<?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>gamedev &#8211; CS@Worcester</title>
	<atom:link href="https://cs.worcester.edu/category/gamedev/feed/" rel="self" type="application/rss+xml" />
	<link>https://cs.worcester.edu</link>
	<description>Worcester State University Computer Science Department</description>
	<lastBuildDate>Mon, 11 Aug 2014 23:00:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
<site xmlns="com-wordpress:feed-additions:1">236835116</site>	<item>
		<title>Guile-2D is now named &#034;Sly&#034;</title>
		<link>http://dthompson.us/guile-2d-is-now-named-sly.html</link>
		
		<dc:creator><![CDATA[David Thompson]]></dc:creator>
		<pubDate>Mon, 11 Aug 2014 23:00:00 +0000</pubDate>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[guile]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[WSU]]></category>
		<guid isPermaLink="false">http://cs.worcester.edu/blog/?guid=1d3c5cfeebf5c8b945cd1a42397ea1c7</guid>

					<description><![CDATA[Guile-2D the a working title for my game engine written in Guile
Scheme.  The name has become very limiting since I realized that it
wouldn't be much extra work to support 3D graphics.  After much
indecision, I've finally decided on an official name: S...]]></description>
										<content:encoded><![CDATA[<p>Guile-2D the a working title for my game engine written in Guile<br />
Scheme.  The name has become very limiting since I realized that it<br />
wouldn&#8217;t be much extra work to support 3D graphics.  After much<br />
indecision, I&#8217;ve finally decided on an official name: Sly.  I think<br />
it&#8217;s a great name.  It&#8217;s short, easy to type, and slyness is one of<br />
the definitions of &#8220;guile&#8221;.</p>
<p>In other news:</p>
<ul>
<li>
<p>Sly has a new contributor!<br />
  <a href="https://gitorious.org/~seconded">Jordan Russel</a> has written a<br />
  <a href="https://gitorious.org/sly/sly/source/9231dca37261de8269149ccad4517acad41aa015:sly/joystick.scm">new module</a><br />
  that provides joystick input support.</p>
</li>
<li>
<p>I have written a<br />
  <a href="https://gitorious.org/sly/sly/source/9231dca37261de8269149ccad4517acad41aa015:sly/transition.scm">module for describing animations</a>.</p>
</li>
<li>
<p>I have been slowly working on a scene graph implementation that<br />
  plays well with the functional reactive programming API.</p>
</li>
<li>
<p>As mentioned above, 3D graphics support is on the way!  So far, I<br />
  have implemented a perspective projection matrix, a &#8220;look at&#8221;<br />
  matrix, and a cube primitive.</p>
</li>
</ul>
<p><img data-recalc-dims="1" decoding="async" alt="3D Scene Graph" src="https://i0.wp.com/dthompson.us/images/sly/scene-graph-prototype.png?w=625" /></p>
<p>Check out the Sly source code repository on<br />
<a href="https://gitorious.org/sly/sly">Gitorious</a>!</p>

<p class="syndicated-attribution"><em>From the blog <a href="http://dthompson.us/">dthompson</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by David Thompson">David Thompson</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">3388</post-id>	</item>
		<item>
		<title>Live Asset Reloading with guile-2d</title>
		<link>http://dthompson.us/live-asset-reloading-with-guile-2d.html</link>
		
		<dc:creator><![CDATA[David Thompson]]></dc:creator>
		<pubDate>Mon, 05 May 2014 02:00:00 +0000</pubDate>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[guile]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[WSU]]></category>
		<guid isPermaLink="false">http://cs.worcester.edu/blog/?guid=5d0b0d652fac70b1dd2c0f703975b135</guid>

					<description><![CDATA[<p>Guile-2d provides a dynamic environment in which a developer can build
a game incrementally as it runs via the Guile REPL.  It's nice to be
able to hot-swap code and have the running game reflect the changes
made, but what about the game data files?  If an image file or other
game asset is modified, it would be nice if the game engine took
notice and reloaded it automatically.  This is what guile-2d's live
asset reloading feature does.</p>
<p>The new <tt>(2d <span>live-reload)</span></tt> module provides the <tt><span>live-reload</span></tt>
procedure.  <tt><span>live-reload</span></tt> takes a procedure like <tt><span>load-texture</span></tt>
and returns a new procedure that adds the live reload magic.  The new
procedure returns assets wrapped in a signal, a time-varying value.  A
coroutine is started that periodically checks if the asset file has
been modified, and if so, reloads the asset and propagates it via the
signal.  Game objects that depend on the asset will be regenerated
immediately.</p>
<p>Here's some example code:</p>
<div><pre><span>(</span><span>define </span><span>load-texture/live</span>
  <span>(</span><span>live-reload</span> <span>load-texture</span><span>))</span>

<span>(</span><span>define-signal</span> <span>texture</span>
  <span>(</span><span>load-texture/live</span> <span>"images/p1_front.png"</span><span>))</span>

<span>(</span><span>define-signal</span> <span>sprite</span>
  <span>(</span><span>signal-map</span>
   <span>(</span><span>lambda </span><span>(</span><span>texture</span><span>)</span>
     <span>(</span><span>make-sprite</span> <span>texture</span>
                  <span>#</span><span>:position</span> <span>(</span><span>vector2</span> <span>320</span> <span>240</span><span>)))</span>
   <span>texture</span><span>))</span>
</pre></div>
<p><tt><span>load-texture/live</span></tt> loads textures and reloads them when they change
on disk.  Every time the texture is reloaded, the sprite is
regenerated using the new texture.</p>
<p>Here's a screencast to see live reloading in action:</p>
<p>Guile-2d is ever-so-slowly approaching a 0.2 release.  Stay tuned!</p>]]></description>
										<content:encoded><![CDATA[<p>Guile-2d provides a dynamic environment in which a developer can build<br />
a game incrementally as it runs via the Guile REPL.  It&#8217;s nice to be<br />
able to hot-swap code and have the running game reflect the changes<br />
made, but what about the game data files?  If an image file or other<br />
game asset is modified, it would be nice if the game engine took<br />
notice and reloaded it automatically.  This is what guile-2d&#8217;s live<br />
asset reloading feature does.</p>
<p>The new <tt class="docutils literal">(2d <span class="pre">live-reload)</span></tt> module provides the <tt class="docutils literal"><span class="pre">live-reload</span></tt><br />
procedure.  <tt class="docutils literal"><span class="pre">live-reload</span></tt> takes a procedure like <tt class="docutils literal"><span class="pre">load-texture</span></tt><br />
and returns a new procedure that adds the live reload magic.  The new<br />
procedure returns assets wrapped in a signal, a time-varying value.  A<br />
coroutine is started that periodically checks if the asset file has<br />
been modified, and if so, reloads the asset and propagates it via the<br />
signal.  Game objects that depend on the asset will be regenerated<br />
immediately.</p>
<p>Here&#8217;s some example code:</p>
<div class="highlight">
<pre><span class="p">(</span><span class="k">define </span><span class="nv">load-texture/live</span>
  <span class="p">(</span><span class="nf">live-reload</span> <span class="nv">load-texture</span><span class="p">))</span>

<span class="p">(</span><span class="nf">define-signal</span> <span class="nv">texture</span>
  <span class="p">(</span><span class="nf">load-texture/live</span> <span class="s">&quot;images/p1_front.png&quot;</span><span class="p">))</span>

<span class="p">(</span><span class="nf">define-signal</span> <span class="nv">sprite</span>
  <span class="p">(</span><span class="nf">signal-map</span>
   <span class="p">(</span><span class="k">lambda </span><span class="p">(</span><span class="nf">texture</span><span class="p">)</span>
     <span class="p">(</span><span class="nf">make-sprite</span> <span class="nv">texture</span>
                  <span class="o">#</span><span class="nv">:position</span> <span class="p">(</span><span class="nf">vector2</span> <span class="mi">320</span> <span class="mi">240</span><span class="p">)))</span>
   <span class="nv">texture</span><span class="p">))</span>
</pre>
</div>
<p><tt class="docutils literal"><span class="pre">load-texture/live</span></tt> loads textures and reloads them when they change<br />
on disk.  Every time the texture is reloaded, the sprite is<br />
regenerated using the new texture.</p>
<p>Here&#8217;s a screencast to see live reloading in action:</p>
<p><video src="http://media.dthompson.us/mgoblin_media/media_entries/10/Screencast_from_05-04-2014_053639_PM.medium.webm"
       style="width:640px;height:360px;" controls><br />
</video></p>
<p>Guile-2d is ever-so-slowly approaching a 0.2 release.  Stay tuned!</p>

<p class="syndicated-attribution"><em>From the blog <a href="http://dthompson.us/">dthompson</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by David Thompson">David Thompson</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">2994</post-id>	</item>
		<item>
		<title>Functional Reactive Programming in Scheme with guile-2d</title>
		<link>http://dthompson.us/functional-reactive-programming-in-scheme-with-guile-2d.html</link>
		
		<dc:creator><![CDATA[David Thompson]]></dc:creator>
		<pubDate>Mon, 10 Mar 2014 01:00:00 +0000</pubDate>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[guile]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[WSU]]></category>
		<guid isPermaLink="false">http://cs.worcester.edu/blog/?guid=e1e33aff69b508d40050466a1116adc0</guid>

					<description><![CDATA[<p>Last month, the <a href="http://gnu.org/s/guile">GNU Guile</a> project celebrated the 3rd anniversary of
its 2.0 release with a hacker <a href="http://savannah.gnu.org/forum/forum.php?forum_id=7887">potluck</a>.  Guilers were encouraged to
bring a tasty hack to the mailing list to share with everyone.  My
dish was a simple <a href="https://en.wikipedia.org/wiki/Functional_reactive_programming">functional reactive programming</a> library.</p>
<p>Functional reactive programming (FRP) provides a way to describe
time-varying values and their relationships using a functional and
declarative programming style.  To understand what this means, let's
investigate a typical variable definition in Scheme.  The expression
<tt>(define c (+ a b))</tt> defines the variable <tt>c</tt> to be the sum of
variables <tt>a</tt> and <tt>b</tt> at the time of evaluation.  If <tt>a</tt> or
<tt>b</tt> is assigned a new value, <tt>c</tt> remains the same.  However, for
applications that deal with state that transforms over time, it would
be convenient if we could define <tt>c</tt> to react to changes in <tt>a</tt>
and <tt>b</tt> by recomputing the sum.  Contrast this approach with the
more traditional style of modeling dynamic state via events and
callbacks.  A lot of programmers, myself included, have written code
with so many callbacks that the resulting program is unmaintainable
spaghetti code.  Callback hell is real, but if you accept FRP into
your heart then you will be saved!</p>
<p>By now you're probably wondering: "What the hell does all this mean?"
So, here's a real-world example of guile-2d's FRP API:</p>
<div><pre><span>(</span><span>define-signal</span> <span>position</span>
  <span>(</span><span>signal-fold</span> <span>v+</span> <span>(</span><span>vector2</span> <span>320</span> <span>240</span><span>)</span>
               <span>(</span><span>signal-map</span> <span>(</span><span>lambda </span><span>(</span><span>v</span><span>)</span>
                             <span>(</span><span>vscale</span> <span>v</span> <span>4</span><span>))</span>
                           <span>(</span><span>signal-sample</span> <span>game-agenda</span> <span>1</span> <span>key-arrows</span><span>))))</span>
</pre></div>
<p>In guile-2d, time-varying values are called "signals".  The above
signal describes a relationship between the arrow keys on the keyboard
and the position of the player.  <tt><span>signal-sample</span></tt> is used to trigger
a signal update upon every game tick that provides the current state
of the arrow keys.  <tt><span>key-arrows</span></tt> is a vector2 that maps to the
current state of the arrow keys, allowing for 8 direction movement.
This vector2 is then scaled 4x to make the player move faster.
Finally, the scaled vector is added to the previous player position
via <tt><span>signal-fold</span></tt>.  The player's position is at (320, 240)
initially.  As you can see, there are no callbacks and explicit
mutation needed.  Those details have been abstracted away, freeing the
programmer to focus on more important things.</p>
<p>I think it's helpful to see FRP in action to really appreciate the
magic.  So, check out this screencast!</p>
<p>To see all of the juicy implementation details, check out the <a href="https://gitorious.org/sly/sly/source/sly/signal.scm">git
repository</a>.  Thanks for following along!</p>]]></description>
										<content:encoded><![CDATA[<p>Last month, the <a class="reference external" href="http://gnu.org/s/guile">GNU Guile</a> project celebrated the 3rd anniversary of<br />
its 2.0 release with a hacker <a class="reference external" href="http://savannah.gnu.org/forum/forum.php?forum_id=7887">potluck</a>.  Guilers were encouraged to<br />
bring a tasty hack to the mailing list to share with everyone.  My<br />
dish was a simple <a class="reference external" href="https://en.wikipedia.org/wiki/Functional_reactive_programming">functional reactive programming</a> library.</p>
<p>Functional reactive programming (FRP) provides a way to describe<br />
time-varying values and their relationships using a functional and<br />
declarative programming style.  To understand what this means, let&#8217;s<br />
investigate a typical variable definition in Scheme.  The expression<br />
<tt class="docutils literal">(define c (+ a b))</tt> defines the variable <tt class="docutils literal">c</tt> to be the sum of<br />
variables <tt class="docutils literal">a</tt> and <tt class="docutils literal">b</tt> at the time of evaluation.  If <tt class="docutils literal">a</tt> or<br />
<tt class="docutils literal">b</tt> is assigned a new value, <tt class="docutils literal">c</tt> remains the same.  However, for<br />
applications that deal with state that transforms over time, it would<br />
be convenient if we could define <tt class="docutils literal">c</tt> to react to changes in <tt class="docutils literal">a</tt><br />
and <tt class="docutils literal">b</tt> by recomputing the sum.  Contrast this approach with the<br />
more traditional style of modeling dynamic state via events and<br />
callbacks.  A lot of programmers, myself included, have written code<br />
with so many callbacks that the resulting program is unmaintainable<br />
spaghetti code.  Callback hell is real, but if you accept FRP into<br />
your heart then you will be saved!</p>
<p>By now you&#8217;re probably wondering: &quot;What the hell does all this mean?&quot;<br />
So, here&#8217;s a real-world example of guile-2d&#8217;s FRP API:</p>
<div class="highlight">
<pre><span class="p">(</span><span class="nf">define-signal</span> <span class="nv">position</span>
  <span class="p">(</span><span class="nf">signal-fold</span> <span class="nv">v+</span> <span class="p">(</span><span class="nf">vector2</span> <span class="mi">320</span> <span class="mi">240</span><span class="p">)</span>
               <span class="p">(</span><span class="nf">signal-map</span> <span class="p">(</span><span class="k">lambda </span><span class="p">(</span><span class="nf">v</span><span class="p">)</span>
                             <span class="p">(</span><span class="nf">vscale</span> <span class="nv">v</span> <span class="mi">4</span><span class="p">))</span>
                           <span class="p">(</span><span class="nf">signal-sample</span> <span class="nv">game-agenda</span> <span class="mi">1</span> <span class="nv">key-arrows</span><span class="p">))))</span>
</pre>
</div>
<p>In guile-2d, time-varying values are called &quot;signals&quot;.  The above<br />
signal describes a relationship between the arrow keys on the keyboard<br />
and the position of the player.  <tt class="docutils literal"><span class="pre">signal-sample</span></tt> is used to trigger<br />
a signal update upon every game tick that provides the current state<br />
of the arrow keys.  <tt class="docutils literal"><span class="pre">key-arrows</span></tt> is a vector2 that maps to the<br />
current state of the arrow keys, allowing for 8 direction movement.<br />
This vector2 is then scaled 4x to make the player move faster.<br />
Finally, the scaled vector is added to the previous player position<br />
via <tt class="docutils literal"><span class="pre">signal-fold</span></tt>.  The player&#8217;s position is at (320, 240)<br />
initially.  As you can see, there are no callbacks and explicit<br />
mutation needed.  Those details have been abstracted away, freeing the<br />
programmer to focus on more important things.</p>
<p>I think it&#8217;s helpful to see FRP in action to really appreciate the<br />
magic.  So, check out this screencast!</p>
<p><video src="/videos/guile-2d-frp-demo.webm"
       style="width:640px;height:360px;" controls><br />
</video></p>
<p>To see all of the juicy implementation details, check out the <a class="reference external" href="https://gitorious.org/sly/sly/source/sly/signal.scm">git<br />
repository</a>.  Thanks for following along!</p>

<p class="syndicated-attribution"><em>From the blog <a href="http://dthompson.us/">dthompson</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by David Thompson">David Thompson</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">2890</post-id>	</item>
		<item>
		<title>Guile-2D 0.1 Release</title>
		<link>http://dthompson.us/guile-2d-01-release.html</link>
		
		<dc:creator><![CDATA[David Thompson]]></dc:creator>
		<pubDate>Fri, 27 Sep 2013 16:00:00 +0000</pubDate>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[guile]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[WSU]]></category>
		<guid isPermaLink="false">http://cs.worcester.edu/blog/?guid=a5e866a19f005aa615115afa0e574bf4</guid>

					<description><![CDATA[To celebrate the GNU Project's 30th anniversary, I have decided to
make the very first release of my 2D game development framework for
GNU Guile. GNU Guile is a Scheme implementation, and has the honor
of being the official extension language of the GN...]]></description>
										<content:encoded><![CDATA[<p>To celebrate the GNU Project&#8217;s 30th anniversary, I have decided to<br />
make the very first release of my 2D game development framework for<br />
<a class="reference external" href="http://gnu.org/software/guile">GNU Guile</a>. GNU Guile is a Scheme implementation, and has the honor<br />
of being the official extension language of the GNU project. Guile-2D<br />
is a layer above SDL, OpenGL, FreeImage, and FTGL that provides<br />
abstractions for common 2D game programming requirements such as<br />
sprites, tilesets, animations, scripting, and collision detection.</p>
<p>There is a lot of work to do in order to get Guile-2D up to snuff with<br />
the game libraries for more popular languages like Python and Lua. I<br />
am looking for contributors who share my vision of creating a fully<br />
featured, easy to use game library in Scheme.</p>
<p>Guile-2D currently supports GNU/Linux distributions. I am looking for<br />
help to get it running on OS X and Windows.</p>
<p>Please refer to the INSTALL.org, README.org, and texinfo files to<br />
learn how to install Guile-2D, run example programs, and write your<br />
own games.</p>
<p><a class="reference external" href="http://dthompson.us/src/guile-2d-0.1.tar.gz">Download the release tarball</a><br />
<a class="reference external" href="https://github.com/davexunit/guile-2d">Browse the source code on GitHub</a></p>

<p class="syndicated-attribution"><em>From the blog <a href="http://dthompson.us/">dthompson</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by David Thompson">David Thompson</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">2686</post-id>	</item>
		<item>
		<title>guile-2d &#8211; A 2D Game Development Framework for GNU Guile</title>
		<link>http://dthompson.us/guile-2d-a-2d-game-development-framework-for-gnu-guile.html</link>
		
		<dc:creator><![CDATA[David Thompson]]></dc:creator>
		<pubDate>Thu, 08 Aug 2013 03:00:00 +0000</pubDate>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[guile]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[WSU]]></category>
		<guid isPermaLink="false">http://cs.worcester.edu/blog/?guid=d70dfe2bcdd97e100971890fdcbe0c1a</guid>

					<description><![CDATA[<p>This is the very first devlog entry for my pet project, guile-2d. As
the title suggests, guile-2d is a 2D game development framework for
<a href="http://gnu.org/s/guile">GNU Guile</a>, a Scheme implementation that has the honor of being the
official extension language of the GNU project. Guile is a language
with a growing number of features, but it still lacks a large
assortment of libraries. I like to do 2D game programming, and I saw a
niche that needed to be filled. Python has Pygame, Lua has Love, but
there's no fun and accessible game programming library for
Guile. Guile-2d is working to correct that.</p>
<p>The goal of Guile-2d is to create an easy to use 2D game programming
framework. Libraries like SDL give the programmer a rather low-level
set of tools that they can use to build a game, guile-2d will provide
high-level tools over low-level SDL and OpenGL for commonly used
elements of 2D games: tile maps, sprite animation, particle systems,
collision detection, vector math, A* pathfinding, etc. Such features
will allow a game developer to very quickly produce a working
prototype with guile-2d.</p>
<p>Guile-2d is a framework, which means that it has some opinion about
what the right way to do things is. The most apparent example of this
is the game loop. The game loop runs at 60 frames-per-second and uses
fixed timestep updates. Those that have read <a href="http://gafferongames.com/game-physics/fix-your-timestep/">Fix Your Timestep</a> will
know that this decision is a good thing.</p>
<p>Perhaps the most important feature of guile-2d is the ability to do
"live coding". When the game loop starts, a REPL
(read-eval-print-loop) server is started. Using the great <a href="http://www.nongnu.org/geiser/">Geiser</a>
extension for Emacs to connect to the REPL server, one can modify
their game as it is running. This gives users the power to evaluate
some new code and see the changes reflected immediately in the game
window. No need to restart the game unless you crash it!</p>
<p>This has been a brief overview of some of the features and goals of
guile-2d. If this project interests you, you can check out the source
code on <a href="https://github.com/davexunit/guile-2d">Github</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>This is the very first devlog entry for my pet project, guile-2d. As<br />
the title suggests, guile-2d is a 2D game development framework for<br />
<a class="reference external" href="http://gnu.org/s/guile">GNU Guile</a>, a Scheme implementation that has the honor of being the<br />
official extension language of the GNU project. Guile is a language<br />
with a growing number of features, but it still lacks a large<br />
assortment of libraries. I like to do 2D game programming, and I saw a<br />
niche that needed to be filled. Python has Pygame, Lua has Love, but<br />
there&#8217;s no fun and accessible game programming library for<br />
Guile. Guile-2d is working to correct that.</p>
<p>The goal of Guile-2d is to create an easy to use 2D game programming<br />
framework. Libraries like SDL give the programmer a rather low-level<br />
set of tools that they can use to build a game, guile-2d will provide<br />
high-level tools over low-level SDL and OpenGL for commonly used<br />
elements of 2D games: tile maps, sprite animation, particle systems,<br />
collision detection, vector math, A* pathfinding, etc. Such features<br />
will allow a game developer to very quickly produce a working<br />
prototype with guile-2d.</p>
<p>Guile-2d is a framework, which means that it has some opinion about<br />
what the right way to do things is. The most apparent example of this<br />
is the game loop. The game loop runs at 60 frames-per-second and uses<br />
fixed timestep updates. Those that have read <a class="reference external" href="http://gafferongames.com/game-physics/fix-your-timestep/">Fix Your Timestep</a> will<br />
know that this decision is a good thing.</p>
<p>Perhaps the most important feature of guile-2d is the ability to do<br />
&quot;live coding&quot;. When the game loop starts, a REPL<br />
(read-eval-print-loop) server is started. Using the great <a class="reference external" href="http://www.nongnu.org/geiser/">Geiser</a><br />
extension for Emacs to connect to the REPL server, one can modify<br />
their game as it is running. This gives users the power to evaluate<br />
some new code and see the changes reflected immediately in the game<br />
window. No need to restart the game unless you crash it!</p>
<p>This has been a brief overview of some of the features and goals of<br />
guile-2d. If this project interests you, you can check out the source<br />
code on <a class="reference external" href="https://github.com/davexunit/guile-2d">Github</a>.</p>

<p class="syndicated-attribution"><em>From the blog <a href="http://dthompson.us/">dthompson</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by David Thompson">David Thompson</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">2691</post-id>	</item>
	</channel>
</rss>
