<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-23809115</id><updated>2012-01-23T09:58:33.999-08:00</updated><category term='favorite games'/><category term='flash game sliding button trigonometry class'/><title type='text'>Greg Lieberman's Weblog</title><subtitle type='html'>A supplement to kwarp.com</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23809115.post-5754777574500482946</id><published>2011-12-04T00:21:00.001-08:00</published><updated>2011-12-11T00:00:54.237-08:00</updated><title type='text'>Rapid Physics Beta Release</title><content type='html'>&lt;script src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shCore.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushAS3.js" type="text/javascript"&gt;&lt;/script&gt; &lt;script src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shLegacy.js" type="text/javascript"&gt;&lt;/script&gt;&lt;link href="http://alexgorbatchev.com/pub/sh/2.1.364/styles/shCore.css" rel="stylesheet" type="text/css"&gt;&lt;/link&gt;&lt;link href="http://alexgorbatchev.com/pub/sh/2.1.364/styles/shThemeDefault.css" rel="stylesheet" type="text/css"&gt;&lt;/link&gt;     &lt;script language="javascript"&gt;window.onload = function () {    dp.SyntaxHighlighter.ClipboardSwf = 'http://alexgorbatchev.com/pub/sh/2.1.364/scripts/clipboard.swf';    dp.SyntaxHighlighter.HighlightAll('code');    dp.SyntaxHighlighter.BloggerMode();}&lt;/script&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hSS_MrOs-3I/Tts-m-q3SmI/AAAAAAAAA98/QC-Xw62XzqA/s1600/rapid_physics_logo_128.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-hSS_MrOs-3I/Tts-m-q3SmI/AAAAAAAAA98/QC-Xw62XzqA/s1600/rapid_physics_logo_128.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Rapid Physics is a custom Physics Engine that I decided to build in Flash.&lt;br /&gt;&lt;br /&gt;Why would I torture myself like that?&lt;br /&gt;&lt;br /&gt;There are plenty of industrial-strength physics engines out there, such as Havok and Box2D. They offer complete and robust physics simulations, but they also hide a lot of information from the programmers that use them. This leads to two problems:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Hard limits on authorship control over the physics simulation (lots of code you didn't write)&lt;/li&gt;&lt;li&gt;A sense of helplessness when debugging engine-level problems (lots of code you didn't test)&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Effectively, game programmers lose the granularity to control subtle features of the physics simulation, and the ability to do custom collision resolution for gameplay purposes. For games whose physics are integral to gameplay, there is still a place for custom physics implementations. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I designed Rapid Physics to tackle one specific problem that most general-purpose physics engines never attempt to address: Tunneling&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Tunneling&lt;/span&gt;&lt;/div&gt;&lt;div&gt;In a physics simulation, physics objects actually teleport small distances each frame. The faster they move, the farther they teleport. Eventually, there comes a point where objects end up teleporting through other objects they should actually collide with. We call this problem Tunneling.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What Rapid Physics Does&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Rapid Physics solves the tunneling problem for a fast-moving points that collide with Lines and Circles.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's all?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For now, yes. The mathematical and algorithmic needs behind advanced collision detection are damned complicated. It turned out that perfecting such a simple task still takes hundreds of lines of code. Throw in some useful engine features, test code, and demos, and the codebase explodes to several thousand lines of code. That's a lot to do in a single semester!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-iSzzcwWIS-Q/TuRjBFJyHAI/AAAAAAAAA-M/sThGczJiSeo/s1600/shot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-iSzzcwWIS-Q/TuRjBFJyHAI/AAAAAAAAA-M/sThGczJiSeo/s1600/shot.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Check out the Beta Release here:&lt;br /&gt;&lt;a href="http://kwarp.com/portfolio/rapidphysics.html"&gt;http://kwarp.com/portfolio/rapidphysics.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;How Rapid Physics Works&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Rapid Physics is heavily inspired by the Flixel 2.5 framework. If you know how to use Flixel, you will know how to write in RapidPhysics. Here is a handy guide of some Flixel equivilents:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;FlxGame - RapidSim&lt;/li&gt;&lt;li&gt;FlxG - RapidG&lt;/li&gt;&lt;li&gt;FlxU - RapidU&lt;/li&gt;&lt;li&gt;FlxState - RapidWorld&lt;/li&gt;&lt;li&gt;FlxBasic - RapidBasic&lt;/li&gt;&lt;li&gt;FlxObject - RapidObject&lt;/li&gt;&lt;li&gt;FlxGroup - RapidGroup&lt;/li&gt;&lt;li&gt;FlxText - RapidText&lt;/li&gt;&lt;li&gt;Input - (literally the same code, use RapidG.keys)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="https://github.com/AdamAtomic/flixel/wiki/Flixel-Organization-Overview"&gt;Flixel's Design overview&lt;/a&gt; applies equally well to RapidPhysics. The class where your game starts will extend RapidSim. The class where you write most of your physics code will be a class that extends RapidWorld. Exactly one RapidWorld exists at a time, and it's easy to switch between worlds with a call to host.switchWorld() (every RapidWorld has a host property).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, let's discuss some of the core components of Rapid Physics:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Islands&lt;/span&gt;&lt;/div&gt;&lt;div&gt;In Rapid Physics, Islands do all of the heavy lifting of the physics simulation. The idea is as follows:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Add all of your RapidObjects to an Island&lt;/li&gt;&lt;li&gt;Add your Island to the RapidWorld's IslandManager&lt;/li&gt;&lt;li&gt;Enjoy sexy physics&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;The base class Island contains that core algorithm that solves collisions in Rapid Physics. Subclasses of island simply define what kinds of objects are collected together for collision solving. Currently, there are exactly 2 Islands in Rapid Physics:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;PointLineIsland&lt;/li&gt;&lt;li&gt;PointCircleIsland&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Let's take a look at PointLineIsland, for example:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="brush: as3" name="code"&gt;package org.rapidphysics.islands&lt;br /&gt;{&lt;br /&gt; import flash.geom.Point;&lt;br /&gt; import flash.utils.Dictionary;&lt;br /&gt; &lt;br /&gt; import org.rapidphysics.Collision;&lt;br /&gt; import org.rapidphysics.RapidU;&lt;br /&gt; import org.rapidphysics.Rlap;&lt;br /&gt; import org.rapidphysics.shapes.RapidLine;&lt;br /&gt; import org.rapidphysics.shapes.RapidPoint;&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * An Island that solves collisions between moving points and fixed lines. &lt;br /&gt;  * @author greglieberman&lt;br /&gt;  * &lt;br /&gt;  */&lt;br /&gt; public class PointLineIsland extends Island&lt;br /&gt; {&lt;br /&gt;  &lt;br /&gt;  public var points:Vector.&lt;rapidpoint&gt;;&lt;br /&gt;  public var lines:Vector.&lt;rapidline&gt;;&lt;br /&gt;  &lt;br /&gt;  public function PointLineIsland()&lt;br /&gt;  {&lt;br /&gt;   super();&lt;br /&gt;   points = new Vector.&lt;rapidpoint&gt;();&lt;br /&gt;   lines = new Vector.&lt;rapidline&gt;();&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * This is an implementation of collectCollisions for points and lines&lt;br /&gt;   * NOTE WELL: This implementation collides every point with every line, but it does NOT collide points with each other, or lines with each other &lt;br /&gt;   * @param frameTime&lt;br /&gt;   * &lt;br /&gt;   */  &lt;br /&gt;  protected override function collectCollisions(frameTime:Number):void&lt;br /&gt;  {&lt;br /&gt;   var temp:Point = new Point();&lt;br /&gt;&lt;br /&gt;   // test for collision between every point and every line&lt;br /&gt;   for each(var rPoint:RapidPoint in points)&lt;br /&gt;   {&lt;br /&gt;    for each(var line:RapidLine in lines)&lt;br /&gt;    {&lt;br /&gt;     var result:Point = (Rlap.lineSegments(rPoint.position, rPoint.nextPosition, line.position, line.end, temp));&lt;br /&gt;     if(result)&lt;br /&gt;     { &lt;br /&gt;      // grab a collision object, and fill it with data from the intersection&lt;br /&gt;      var c:Collision = recycleCollision();&lt;br /&gt;      c.init(rPoint, line, Rlap.resolveMovingPointAndFixedLine); // obj1, obj2, how to resolve the collision&lt;br /&gt;      c.pointOfCollision.x = result.x;&lt;br /&gt;      c.pointOfCollision.y = result.y;&lt;br /&gt;      c.time = frameTime + RapidU.timeOfCollision(rPoint.position, rPoint.nextPosition, result); // define time for priority in solving collisions&lt;br /&gt;      &lt;br /&gt;      addCollision(c); &lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/rapidline&gt;&lt;/rapidpoint&gt;&lt;/rapidline&gt;&lt;/rapidpoint&gt;&lt;/pre&gt;&lt;br /&gt;At it's core, it's just two Vectors, and 2 nested for loops. Not too bad right?&lt;br /&gt;&lt;div&gt;&lt;br /&gt;It should be extremely easy to write new Island subclasses with the existing intersection tests, should you have more custom collision needs. The tough part is writing brand new intersection tests. I could spend another semester just working on those...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;The Core Collision Algorithm&lt;/span&gt;&lt;br /&gt;The core collision-solving algorithm is perfect, but &lt;b&gt;extremely expensive&lt;/b&gt;. Here's what it does:&lt;br /&gt;&lt;br /&gt;Every Island, every frame:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Test for collisions&lt;/li&gt;&lt;li&gt;Sort collisions by time&lt;/li&gt;&lt;li&gt;Resolve collisions in time order&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Every time Step 3 occurs, throw out all collision information, and return to Step 1.&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;This is insane, but necessary. When a collision is solved, it changes the state of the system, so every object that is being tested for collision needs to be evaluated again. In the worst case (which &lt;i&gt;never&lt;/i&gt; happens), you are looking at a runtime of O(n!).&amp;nbsp;The only way to avoid this is to cheat the physics in some way. Thankfully, in general, you are looking at an average runtime of O(n^3). This can be even faster if the collision test code runs better than O(n^2).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Intersection Tests&lt;/span&gt;&lt;br /&gt;I designed Rapid Physics in parallel with a game that I am building. I wanted to utilize parts of Rapid Physics immediately during development, so there are 2 components to the engine that are extremely easy to integrate into to other games: Rlap and RapidU.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rlap contains the hardcore Intersection Tests, and also Collision Resolution functions&lt;/li&gt;&lt;li&gt;RapidU contains low-level utility functions, like clamp, vector reflection, dot product, etc.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Intersection tests are some of the hardest parts of physics programming. I hope they serve you well.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Setup&lt;/span&gt;&lt;br /&gt;For project setup, I strongly recommend importing RapidPhysics into a Flash Builder project. For this, Flixel has a&amp;nbsp;&lt;a href="http://flashgamedojo.com/wiki/index.php?title=Hello_World_-_Flash_Builder_(Flixel)"&gt;nice setup guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Download the source files on GitHub:&lt;br /&gt;&lt;a href="https://github.com/KWarp/Rapid-Physics"&gt;https://github.com/KWarp/Rapid-Physics&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unlike Flixel, RapidPhysics is not a complete game engine. You will probably be better off exploring and modifying the five project demos instead of building something from scratch.&lt;br /&gt;&lt;br /&gt;You can find the code documentation in the GitHub repository, but for convenience, you can also find it here:&lt;br /&gt;&lt;a href="http://kwarp.com/docs/rapidphysics/"&gt;http://kwarp.com/docs/rapidphysics/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;That's a wrap for this Beta Release. Maybe I'll add more to this project in the future.&lt;br /&gt;&lt;br /&gt;PEACE&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-5754777574500482946?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/5754777574500482946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=5754777574500482946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5754777574500482946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5754777574500482946'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/12/rapid-physics-beta-release.html' title='Rapid Physics Beta Release'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-hSS_MrOs-3I/Tts-m-q3SmI/AAAAAAAAA98/QC-Xw62XzqA/s72-c/rapid_physics_logo_128.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-4319495645646486269</id><published>2011-09-20T02:10:00.000-07:00</published><updated>2011-09-20T02:14:53.956-07:00</updated><title type='text'>Rapid Physics</title><content type='html'>I am building a physics engine called Rapid Physics. It is designed to correctly simulate objects that move &lt;b&gt;really fast&lt;/b&gt;. This is difficult problem that is commonly known as the &lt;a href="http://www.aorensoftware.com/blog/2011/06/01/when-bullets-move-too-fast/"&gt;tunneling problem&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Q_AThxixAY0/TnhYMqKSSNI/AAAAAAAAA6E/wXcB3UhidZc/s1600/rapid+screen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="297" src="http://3.bp.blogspot.com/-Q_AThxixAY0/TnhYMqKSSNI/AAAAAAAAA6E/wXcB3UhidZc/s400/rapid+screen.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Check out a quick demo here:&lt;br /&gt;&lt;a href="http://kwarp.com/downloads/blogdownloads/rapidphysics025/RapidPhysics.html"&gt;Rapid Physics 0.25 Alpha&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-4319495645646486269?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/4319495645646486269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=4319495645646486269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/4319495645646486269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/4319495645646486269'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/09/rapid-physics.html' title='Rapid Physics'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Q_AThxixAY0/TnhYMqKSSNI/AAAAAAAAA6E/wXcB3UhidZc/s72-c/rapid+screen.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-3411765198618209573</id><published>2011-09-16T10:52:00.000-07:00</published><updated>2011-09-16T10:52:48.446-07:00</updated><title type='text'>Developer Blog</title><content type='html'>I'm running a developer blog on &lt;a href="http://bullettimeninja.blogspot.com/"&gt;Bullet Time Ninja&lt;/a&gt;. Check it out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-3411765198618209573?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/3411765198618209573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=3411765198618209573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/3411765198618209573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/3411765198618209573'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/09/developer-blog.html' title='Developer Blog'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-5012555281320945381</id><published>2011-06-14T13:26:00.000-07:00</published><updated>2011-06-27T00:43:12.593-07:00</updated><title type='text'>E3 2011</title><content type='html'>&lt;img src="http://www.gogaminggiant.com/wp-content/uploads/2011/05/E3-Logo-Header.jpg" style="-webkit-user-select: none;" /&gt;&lt;br /&gt;&lt;br /&gt;A few weeks ago, I received an amazing phone call that would change my life (for a week).&lt;br /&gt;&lt;br /&gt;I became an IGDA E3 Scholar!&lt;br /&gt;&lt;br /&gt;What's that you ask?&lt;br /&gt;&lt;br /&gt;Let's break it down. First, the &lt;b&gt;IGDA&lt;/b&gt; is an official support group for game developers. Here is their official About statement from IGDA.org:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms', geneva; font-size: 13px; font-style: italic; line-height: 19px;"&gt;The International Game Developers Association is the largest non-profit membership organization serving individuals who create video games. We bring together developers at conferences, in local chapters and in special interest groups to improve their lives and craft.&lt;/span&gt;&lt;/blockquote&gt;The Electronic Entertainment Expo, or &lt;b&gt;E3&lt;/b&gt;, is the largest media gathering in the Videogame Industry. Every major game studio and platform holder uses E3 as a venue to announce their next big thing.&lt;br /&gt;&lt;br /&gt;As an IGDA E3 Scholar, I got a pretty sweet deal:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pre-paid E3 ticket ($500 value)&lt;/li&gt;&lt;li&gt;Access to the press events from Sony, Microsoft, Nintendo, EA, and Ubisoft.&lt;/li&gt;&lt;li&gt;Tours of several game studio booths on the show floor&lt;/li&gt;&lt;li&gt;A couple lunches with various game developers&lt;/li&gt;&lt;li&gt;Some 2nd floor access&lt;/li&gt;&lt;li&gt;A field trip to the CAA, and EALA&lt;/li&gt;&lt;li&gt;Doing all of the above in the company of 14 other IGDA E3 Scholars.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;It was the most epic E3 a person could ever hope for. I am extremely grateful to the IGDA for this incredible opportunity to network and learn from my peers. Below, in no particular order, are some of my most vivid memories from the event:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;During a developers lunch, I spoke with an EA programmer about game engine architectures. My specific interest was what comes first in a professional GameObject class hierarchy: rendering or physics? To illustrate my question more clearly, would the class inheritance&amp;nbsp;hierarchy&amp;nbsp;look like this:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;GameObject&lt;/li&gt;&lt;li&gt;RenderingObject&lt;/li&gt;&lt;li&gt;PhysicsObject&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Or this?&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;GameObject&lt;/li&gt;&lt;li&gt;PhysicsObject&lt;/li&gt;&lt;li&gt;RenderingObject&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The professional convention seems to be one of two things: they either both occur at the same level, or an object-compositional model is used, where a RenderingObject owns a PhysicsObject. The latter model is especially useful in games where a 3rd-party physics engine like Havok is employed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Microsoft made a bunch of Kinect-related announcements during their E3 press conference, one of which was the use of Voice Commands in Mass Effect 3. I was giggling to myself as this was presented, as I had already &lt;a href="http://commandthebridge.com/"&gt;beaten Bioware to the punch&lt;/a&gt; with my Voice Command game, The Bridge. We wrapped up that project last month. :D&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For the record, the experience of physically speaking Voice Commands to a game character, and then having that character respond appropriately, feels really amazing. It will be a killer addition to the Mass Effect 3 experience that everyone should try at least once.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tim Schaffer is hilarious.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sony had a good press conference. The Playstation-branded 3DTV for $500 looked really damn nice.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I managed to show my&amp;nbsp;&lt;a href="http://bullettimeninja.blogspot.com/"&gt;Bullet Time Ninja&lt;/a&gt;&amp;nbsp;game in video form to quite a few game developers on the show floor. Reactions ranged from "pretty neat" to "omg that's really awesome!!", so I'm pleased as punch. :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A few quick blurbs on games that I played:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Fruit Ninja for Kinect is everything that I have ever wanted from a Kinect game.&lt;/li&gt;&lt;li&gt;Skulls of the Shogan looks like a good Indie game. There are a few game design kinks, but I am optimistic that they will be addressed before release.&lt;/li&gt;&lt;li&gt;SkullGirls has the greatest art and animation that I have ever seen in a fighting game. Must buy!&lt;/li&gt;&lt;li&gt;Monaco is really fun, but I feel like the current pixel art is holding the game back. I had a difficult time initially learning what was important on screen. Some focused art direction will turn that game from Great to Incredible.&lt;/li&gt;&lt;li&gt;I was outright impressed by the new XCOM game. The art style is right on the mark.&lt;/li&gt;&lt;li&gt;Kirby Wii is the most fun Kirby game I that have ever played.&lt;/li&gt;&lt;li&gt;The Wii U demos were pretty neat. I have high hopes.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Videogames Live had a great show this year. The Chrono Trigger performance was beautifully done. Have a listen:&amp;nbsp;&lt;a href="http://www.youtube.com/watch?v=UV2RKqmCs4w"&gt;http://www.youtube.com/watch?v=UV2RKqmCs4w&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overall, this was the greatest E3 experience I have ever had. The IGDA is doing a great service for up and coming students. I hope future generations of amazing game designers get the same opportunities.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks for reading,&lt;/div&gt;&lt;div&gt;Greg&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-5012555281320945381?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/5012555281320945381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=5012555281320945381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5012555281320945381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5012555281320945381'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/06/e3-2011.html' title='E3 2011'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-167862062256559193</id><published>2011-06-01T12:25:00.000-07:00</published><updated>2011-06-26T01:25:41.027-07:00</updated><title type='text'>Empires &amp; Allies</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.gev.com/wp-content/uploads/2011/06/empires-allies-logo-.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="297" src="http://www.gev.com/wp-content/uploads/2011/06/empires-allies-logo-.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I started my internship at Zynga Los Angeles last week. We are working on a cool game called Empires &amp;amp; Allies. I think it's the best Zynga game yet.&lt;br /&gt;&lt;br /&gt;While most Zynga games have you building some kind of farm or city, in Empires &amp;amp; Allies you are building an army. Make buildings, produce units, and take them battle. There's a pretty lengthy single-player campaign, and you can also invade your neighbors and take their resources.&lt;br /&gt;&lt;br /&gt;The most interesting part of this game is the incredible sophistication of it's economy. I have never seen a game with a remotely comparable amount of interlocked systems. Let's list out every resource there is:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Coins&lt;/li&gt;&lt;li&gt;Empire Points&lt;/li&gt;&lt;li&gt;XP&lt;/li&gt;&lt;li&gt;Energy&lt;/li&gt;&lt;li&gt;Wood&lt;/li&gt;&lt;li&gt;Oil&lt;/li&gt;&lt;li&gt;Liberty Bonds&lt;/li&gt;&lt;li&gt;Ore Types&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Aluminum&lt;/li&gt;&lt;li&gt;Uranium&lt;/li&gt;&lt;li&gt;Iron&lt;/li&gt;&lt;li&gt;Gold&lt;/li&gt;&lt;li&gt;Copper&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Population&lt;/li&gt;&lt;li&gt;Neighbors&lt;/li&gt;&lt;li&gt;Units&lt;/li&gt;&lt;li&gt;Time - (a component to everything)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;We've seen a lot of these resources in previous Zynga games. Let's talk about the new ones.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Wood&lt;/b&gt;: A resource limiter on how quickly you can make buildings. Simple enough, and quite clever.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Oil&lt;/b&gt;: A resource limiter on how quickly you can make military Units.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ore types&lt;/b&gt;: The player is randomly given one kind of Ore type that can be produced within his or her empire. Players must trade with their neighbors to get other types of Ore. Ore is mostly required to produce certain kinds of units and buildings.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Units&lt;/b&gt;: The most significant new resource. Units you make can be taken to battle. When units die, they are permanently gone, and new ones must be produced.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The problem I have with many Zynga games is that after playing them for a few days, I amass so many buildings and resources, that I stop caring about my resources altogether. This is why I find Units in Empires &amp;amp; Allies so fascinating. A Unit is a resource that I can lose. The more I play the game, the more I burn Units in combat. In response, I deposit my hard-earned Coins, Oil, and Ore to replace them. It's a great cycle that will keep me running a tight economy for the lifetime of my gameplay sessions. Plus, units exist in several&amp;nbsp;tiers. As I unlock new ones, I always have something to build.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Empires &amp;amp; Allies looks to be a fantastic addition to the Zynga portfolio. I am thrilled to be working on it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-167862062256559193?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/167862062256559193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=167862062256559193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/167862062256559193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/167862062256559193'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/06/empires-allies.html' title='Empires &amp; Allies'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-8729212359449805736</id><published>2011-05-09T23:28:00.000-07:00</published><updated>2011-06-26T00:09:21.284-07:00</updated><title type='text'>The Bridge Wrap-Up</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-66P3_yz6XtI/TgbYdVEBpwI/AAAAAAAAA3g/yVCdZRdvLQE/s1600/Insignia-1280x960.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-66P3_yz6XtI/TgbYdVEBpwI/AAAAAAAAA3g/yVCdZRdvLQE/s320/Insignia-1280x960.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Work has wrapped up on The Bridge. Big thanks to the team and everyone who supported us.&lt;br /&gt;&lt;br /&gt;Here's our awesome website:&lt;br /&gt;&lt;a href="http://commandthebridge.com/"&gt;http://commandthebridge.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's a live demonstration of the final game:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=uW5x6AyL7Cw"&gt;http://www.youtube.com/watch?v=uW5x6AyL7Cw&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We were featured on ABC 7 News:&lt;br /&gt;&lt;a href="http://abclocal.go.com/kabc/video?id=8113138"&gt;http://abclocal.go.com/kabc/video?id=8113138&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We were also featured at TEDxUSC:&lt;br /&gt;&lt;a href="http://www.facebook.com/media/set/?set=a.10150217517612037.355868.509387036&amp;amp;l=9a2c67f60c"&gt;http://www.facebook.com/media/set/?set=a.10150217517612037.355868.509387036&amp;amp;l=9a2c67f60c&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What an awesomely fun project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-8729212359449805736?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/8729212359449805736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=8729212359449805736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/8729212359449805736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/8729212359449805736'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/06/bridge-wrap-up.html' title='The Bridge Wrap-Up'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-66P3_yz6XtI/TgbYdVEBpwI/AAAAAAAAA3g/yVCdZRdvLQE/s72-c/Insignia-1280x960.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-9182771206501244853</id><published>2011-01-31T23:31:00.000-08:00</published><updated>2011-01-31T23:31:14.285-08:00</updated><title type='text'>Global Game Jam 2011</title><content type='html'>I made an awesome Tron-style game for Global Game Jam 2011&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://kwarp.com/portfolio/fightfortheusers.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="201" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/TUe141v3cvI/AAAAAAAAAyk/ZLyUqJH1l-E/s400/screenshot.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Play the game here:&lt;br /&gt;&lt;a href="http://kwarp.com/portfolio/fightfortheusers.html"&gt;http://kwarp.com/portfolio/fightfortheusers.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Team page here:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://www.globalgamejam.org/2011/fight-user"&gt;http://www.globalgamejam.org/2011/fight-user&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-9182771206501244853?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/9182771206501244853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=9182771206501244853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/9182771206501244853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/9182771206501244853'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/01/global-game-jam-2011.html' title='Global Game Jam 2011'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LYTx-eCHyN8/TUe141v3cvI/AAAAAAAAAyk/ZLyUqJH1l-E/s72-c/screenshot.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-6862675055676306632</id><published>2011-01-26T15:48:00.000-08:00</published><updated>2011-01-26T15:48:58.088-08:00</updated><title type='text'>Demo Day</title><content type='html'>Each semester, USC hosts a Demo Day where Computer Science Games students present their game projects to professionals in the industry. In December 2010, I presented &lt;a href="http://commandthebridge.com/"&gt;The Bridge&lt;/a&gt; on behalf of my team. The media coverage has just been released, which you can check out here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://viterbi.usc.edu/news/news/2010/gamepipe-lab-hosts.htm"&gt;http://viterbi.usc.edu/news/news/2010/gamepipe-lab-hosts.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://viterbi.usc.edu/news/news/2010/gamepipe-lab-hosts.htm"&gt;&lt;img border="0" height="310" src="http://viterbi.usc.edu/assets/120/72719.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The picture of me in the article is nothing short of ridiculous. :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-6862675055676306632?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/6862675055676306632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=6862675055676306632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/6862675055676306632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/6862675055676306632'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/01/demo-day.html' title='Demo Day'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-3357701493414632615</id><published>2011-01-24T02:22:00.000-08:00</published><updated>2011-01-24T02:22:40.291-08:00</updated><title type='text'>Microsoft Word Makes Me Sad</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/TT1QSQp8koI/AAAAAAAAAyg/czhrXxcS8hQ/s1600/word-icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/TT1QSQp8koI/AAAAAAAAAyg/czhrXxcS8hQ/s1600/word-icon.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I have a love/hate relationship with Microsoft Word. I trust it to get my work done securely and professionally, but my day-to-day experience with the product is often plain frustrating.&lt;br /&gt;&lt;br /&gt;Take for example, this outline I began putting together in Microsoft Word 2008 for Mac&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/TT1QQxs2QhI/AAAAAAAAAyQ/8O8ppe7tkTQ/s1600/Screen+shot+2011-01-24+at+2.07.14+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="95" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/TT1QQxs2QhI/AAAAAAAAAyQ/8O8ppe7tkTQ/s320/Screen+shot+2011-01-24+at+2.07.14+AM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I have pasted a URL, and want to make it a hyperlink. How can I do that?&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/TT1QRJ8pXCI/AAAAAAAAAyU/adEmEji3Y5U/s1600/Screen+shot+2011-01-24+at+2.07.28+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/TT1QRJ8pXCI/AAAAAAAAAyU/adEmEji3Y5U/s320/Screen+shot+2011-01-24+at+2.07.28+AM.png" width="306" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Ah yes, there it is, in this huge menu. Let's select the Hyperlink option.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/TT1QRslRwcI/AAAAAAAAAyY/BDr2S06_O54/s1600/Screen+shot+2011-01-24+at+2.07.43+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/TT1QRslRwcI/AAAAAAAAAyY/BDr2S06_O54/s320/Screen+shot+2011-01-24+at+2.07.43+AM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Whoa, a huge popup with tons of information I don't want to read. Let's press ok and see if it works...&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/TT1QR2UO25I/AAAAAAAAAyc/CErFSUzkaCQ/s1600/Screen+shot+2011-01-24+at+2.07.54+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="81" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/TT1QR2UO25I/AAAAAAAAAyc/CErFSUzkaCQ/s320/Screen+shot+2011-01-24+at+2.07.54+AM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It looks like the URL became a hyperlink, but it also screwed up my bullet point formatting.&lt;br /&gt;&lt;br /&gt;:(&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-3357701493414632615?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/3357701493414632615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=3357701493414632615' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/3357701493414632615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/3357701493414632615'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2011/01/microsoft-word-makes-me-sad.html' title='Microsoft Word Makes Me Sad'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LYTx-eCHyN8/TT1QSQp8koI/AAAAAAAAAyg/czhrXxcS8hQ/s72-c/word-icon.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-7907987258511763408</id><published>2010-12-13T01:50:00.000-08:00</published><updated>2010-12-13T01:51:07.802-08:00</updated><title type='text'>Vector Math</title><content type='html'>I ran into a fun &amp;nbsp;problem while working on The Bridge today:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/TQXrhvOaUXI/AAAAAAAAAxA/IEtmtinkWZ0/s1600/turn+clockwise.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/TQXrhvOaUXI/AAAAAAAAAxA/IEtmtinkWZ0/s320/turn+clockwise.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In my process of refactoring the ship engine, I added a rotational thruster to turn the ship. When the player issues a Turn Clockwise command, the Navigator AI will apply the rotational thruster to the ship until it reaches the desired velocity.&lt;br /&gt;&lt;br /&gt;Here are the properties I worked with:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A target yaw, pitch, and roll to rotate to, in terms of angular velocity&lt;/li&gt;&lt;li&gt;Current angular velocity of the ship&lt;/li&gt;&lt;li&gt;Angular acceleration of the ship's engines&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;Each of these I represented as a Vector3 in XNA&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Vector3&amp;nbsp;targetAngularVelocity;&lt;/li&gt;&lt;li&gt;Vector3 currentAngularVelocity;&lt;/li&gt;&lt;li&gt;ship.engines.angularThrust&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I figured that the most logical way to approach this was to adjust&amp;nbsp;angularThrust every frame in an Update loop.&amp;nbsp;The challenge was figuring out what acceleration was appropriate, when only given currentAngularVelocity and targetAngularVelocity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My first attempt involved finding a midpoint vector with a simple LERP:&lt;/div&gt;&lt;blockquote&gt;ship.engines.angularThrust = Vector3.Lerp(currentAngularVelocity, targetAngularVelocity, strength) * time;&lt;/blockquote&gt;&lt;div&gt;This works when going from not rotating at all, to rotating in some direction. However, it fails miserably if the ship is already moving in some capacity. I ended up spinning the player's ship&amp;nbsp;phenomenally&amp;nbsp;fast.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/TQXn8JaqU7I/AAAAAAAAAw0/aZKMm09cIlA/s1600/aok.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="130" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/TQXn8JaqU7I/AAAAAAAAAw0/aZKMm09cIlA/s320/aok.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/TQXn8l9_8wI/AAAAAAAAAw4/z4FRX7AY85g/s1600/oops.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/TQXn8l9_8wI/AAAAAAAAAw4/z4FRX7AY85g/s320/oops.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Clearly, a midpoint isn't good enough, I need something a bit more relative.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thankfully, a simple Vector Math trick works nicely:&lt;/div&gt;&lt;blockquote&gt;ship.engines.angularThrust = (targetAngularVelocity - currentAngularVelocity) * strength * time;&lt;/blockquote&gt;&lt;div&gt;Subtracting&amp;nbsp;targetAngularVelocity from currentAngularVelocity will give me a new Vector that points from&amp;nbsp;currentAngularVelocity &amp;nbsp;to&amp;nbsp;targetAngularVelocity . Then all I need to do is shrink the strength of the vector down to a reasonable acceleration, and I'm done.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/TQXpkaX9rJI/AAAAAAAAAw8/JXqf2Z-YYvc/s1600/sweet.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/TQXpkaX9rJI/AAAAAAAAAw8/JXqf2Z-YYvc/s320/sweet.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And thanks to the miracles of Vector Math, this will work in any direction, under any circumstance.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-7907987258511763408?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/7907987258511763408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=7907987258511763408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/7907987258511763408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/7907987258511763408'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2010/12/vector-math.html' title='Vector Math'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LYTx-eCHyN8/TQXrhvOaUXI/AAAAAAAAAxA/IEtmtinkWZ0/s72-c/turn+clockwise.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-4684855860544568303</id><published>2010-11-07T01:23:00.000-07:00</published><updated>2010-11-21T20:59:08.481-08:00</updated><title type='text'>Typical Day</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;I have a daily habit of scanning through kotaku.com and gizmodo.com. As I read through article headlines, I open the articles in new tabs for later reading. Here's a sample of what that looks like:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/TNZti0cCJDI/AAAAAAAAAv4/K86AnQ_040E/s1600/Screen+shot+2010-10-17+at+4.12.43+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img border="0" height="302" img="" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/TNZti0cCJDI/AAAAAAAAAv4/K86AnQ_040E/s400/Screen+shot+2010-10-17+at+4.12.43+AM.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;I find it a good way to keep up to speed with current trends in the game and gadget&amp;nbsp;industries, and also find lots of cool pictures.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Sometimes I will watch a video as I read through web articles. Generally I'll watch at a TED conference or two since I find them pretty enriching. The window resizing features in Windows 7 are particularly useful here:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/TOn3e0HuaVI/AAAAAAAAAwo/SxhHIPXwP-M/s1600/story+of+my+life.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/TOn3e0HuaVI/AAAAAAAAAwo/SxhHIPXwP-M/s320/story+of+my+life.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Have a favorite news website to procrastinate on? Leave a comment below.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-4684855860544568303?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/4684855860544568303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=4684855860544568303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/4684855860544568303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/4684855860544568303'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2010/11/typical-day.html' title='Typical Day'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LYTx-eCHyN8/TNZti0cCJDI/AAAAAAAAAv4/K86AnQ_040E/s72-c/Screen+shot+2010-10-17+at+4.12.43+AM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-5702909778844271896</id><published>2010-10-27T21:53:00.000-07:00</published><updated>2010-10-27T22:10:34.323-07:00</updated><title type='text'>The Bridge</title><content type='html'>This semester, I am the Technical Lead of a super-cool Science Fiction game called The Bridge.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://commandthebridge.com/"&gt;&lt;img border="0" height="259" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/TMj-XbRVQeI/AAAAAAAAAvg/QtkXgxvSx_k/s320/coming-soon-title.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the game, you command starship entirely with voice control.&lt;br /&gt;&lt;br /&gt;Here are some of the innovate things the game has going for it:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Speech Recognition as a seamless part of gameplay&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The player can say things like:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;"Weapons, fire missiles at enemy ship alpha"&lt;/li&gt;&lt;li&gt;"Navigator, engage defense orbit"&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Dynamic Story Engine&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Every actor in the game is an Entity&lt;/li&gt;&lt;li&gt;Entities have Relationships with other Entities&lt;/li&gt;&lt;li&gt;Relationships evolve throughout gameplay&lt;/li&gt;&lt;li&gt;Result: fully procedural storytelling&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Emotional Voice Recognition&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The player's tone is interpreted by the game&lt;/li&gt;&lt;li&gt;This affects crew loyalty towards the player&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Of course, that's only the beginning.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;For more information, check out the game's website:&lt;br /&gt;&lt;a href="http://commandthebridge.com/"&gt;commandthebridge.com&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;- Greg&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-5702909778844271896?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/5702909778844271896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=5702909778844271896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5702909778844271896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5702909778844271896'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2010/10/bridge.html' title='The Bridge'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LYTx-eCHyN8/TMj-XbRVQeI/AAAAAAAAAvg/QtkXgxvSx_k/s72-c/coming-soon-title.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-2210528320525316721</id><published>2010-09-17T21:22:00.000-07:00</published><updated>2010-09-17T21:24:45.837-07:00</updated><title type='text'>Flash Sound Tutorial</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;I made a tutorial for using Sound Objects in Flash.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/TJQ7j7UqLsI/AAAAAAAAAuw/DXnxjN6-Vv8/s1600/Screen+shot+2010-09-17+at+9.09.02+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/TJQ7j7UqLsI/AAAAAAAAAuw/DXnxjN6-Vv8/s320/Screen+shot+2010-09-17+at+9.09.02+PM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The tutorial covers a few tricks I use, including:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Object Dictionaries&lt;/li&gt;&lt;li&gt;Creating Asset Instances in the Flash IDE&lt;/li&gt;&lt;li&gt;Importing Sound Assets&lt;/li&gt;&lt;li&gt;Creating Sound Objects in ActionScript&lt;/li&gt;&lt;li&gt;Using Sound Objects&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Play, Stop, and Change Volume&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;You can download the tutorial here:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.kwarp.com/downloads/2010_Sept_17_Flash_Sound.zip"&gt;Flash Sound Object Tutorial&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The tutorial includes a Complete copy of the code, and a Skeleton copy for you to practice writing yourself. You will need Flash CS4 or later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/TJQ-NPbmtCI/AAAAAAAAAvA/4boFzRFBvPo/s1600/Screen+shot+2010-09-17+at+9.18.52+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/TJQ-NPbmtCI/AAAAAAAAAvA/4boFzRFBvPo/s320/Screen+shot+2010-09-17+at+9.18.52+PM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Surprisingly, creating a robust Sound Engine only requires about 60 lines of code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope it's useful,&lt;/div&gt;&lt;div&gt;- Greg&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-2210528320525316721?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/2210528320525316721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=2210528320525316721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/2210528320525316721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/2210528320525316721'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2010/09/flash-sound-tutorial.html' title='Flash Sound Tutorial'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LYTx-eCHyN8/TJQ7j7UqLsI/AAAAAAAAAuw/DXnxjN6-Vv8/s72-c/Screen+shot+2010-09-17+at+9.09.02+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-296229855213176726</id><published>2010-07-08T03:33:00.000-07:00</published><updated>2010-07-08T22:18:17.832-07:00</updated><title type='text'>AStar Game</title><content type='html'>Recently, I learned how to implement the super-awesome pathfinding algorithm called A*. Given a start point and a goal, A* will find the shortest possible path to the goal while evaluating as few paths as necessary.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;&lt;span id="goog_680391971"&gt;&lt;/span&gt;&lt;span id="goog_680391972"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Not satisfied with leaving such a juicy algorithm to rot in a classroom, I set out to &lt;a href="http://kwarp.com/portfolio/astargame.html"&gt;build a game&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://kwarp.com/portfolio/astargame.html"&gt;&lt;br /&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/TDWei8N79_I/AAAAAAAAAp8/3xddtt4kVdE/s320/title+screen.png" width="320" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I chose to create a Cat and Mouse game where the player tries to reach a goal while running away from evil baddies. Sound familiar? Well I've made it before:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/TDWeZq5uxwI/AAAAAAAAAp0/ZlU0eFXRtTY/s1600/old+game.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/TDWeZq5uxwI/AAAAAAAAAp0/ZlU0eFXRtTY/s320/old+game.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://kwarp.com/secret/warpchase.html"&gt;Warp Chase&lt;/a&gt; was the first videogame I ever made. And by "made", I mean copy-pasted from a game programming book and added some levels. Oh shame. At the time, I did my best to add some personal spirit to the title, but didn't know enough concepts to program any of the gameplay that I had imagined.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lucky for me, this kind of game lends itself perfectly to A*, since baddies need to be pretty movement-efficient to chase the player effectively. I set forth to fully realize the gameplay I couldn't quite grasp before.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/TDWe-f9yqKI/AAAAAAAAAqE/g-Tmvp-WtmI/s1600/astar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="142" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/TDWe-f9yqKI/AAAAAAAAAqE/g-Tmvp-WtmI/s320/astar.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Implementing A* was an interesting exercise in itself. I spent a few days experimenting and optimizing my implementation. Ultimately, I cut my processing time for a long A* search from 117 milliseconds to under 4. The biggest gains came from two places: First, I evaluated visited nodes by looking up values in a 2D array, rather than wastefully looking through each nodes list of visited previous nodes. Second, I implemented my own priority queue using a heap, which saved a lot of time on sorting.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/TDWfrizIp2I/AAAAAAAAAqU/9wZdopuaFOg/s1600/boring.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/TDWfrizIp2I/AAAAAAAAAqU/9wZdopuaFOg/s320/boring.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;From a gameplay standpoint, &amp;nbsp;the escape mechanic was fun for a while, but I quickly grew bored of it. A* was just too intelligent to waste on such shallow gameplay.&lt;br /&gt;&lt;br /&gt;I wanted strategy.&lt;br /&gt;&lt;br /&gt;While finishing the implementation for the Escape part of the game, I stumbled upon a very interesting bug. Effectively, the bug allowed the player to create walls that could trap unsuspecting baddies. Very interesting indeed.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/TDWiUIB6efI/AAAAAAAAAqk/BlYkvtzVyBw/s1600/astargame+glitch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/TDWiUIB6efI/AAAAAAAAAqk/BlYkvtzVyBw/s320/astargame+glitch.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A few experiments and 9 levels later, I found that the trap mechanic allowed me to make some modestly interesting puzzles. I won't spoil the levels here though. Go play the game!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kwarp.com/portfolio/astargame.html"&gt;http://kwarp.com/portfolio/astargame.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-296229855213176726?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/296229855213176726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=296229855213176726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/296229855213176726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/296229855213176726'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2010/07/astar-game.html' title='AStar Game'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LYTx-eCHyN8/TDWei8N79_I/AAAAAAAAAp8/3xddtt4kVdE/s72-c/title+screen.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-1138498074901006476</id><published>2010-03-21T00:45:00.000-07:00</published><updated>2010-03-21T00:45:21.081-07:00</updated><title type='text'>Computer Graphics</title><content type='html'>Here's some cool Computer Graphics projects I've worked on this semester:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.kwarp.com/portfolio/lines.html"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/S6XK6omKUgI/AAAAAAAAAns/RNoAAZQcLTQ/s320/lines_screen.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(&lt;a href="http://www.kwarp.com/portfolio/lines.html"&gt;Download Here&lt;/a&gt;)&lt;/div&gt;&lt;br /&gt;In this assignment I wrote a variant of the Midpoint Algorithm to draw lines. You can also toggle attributes such as color, anti-aliasing, and line weight.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.kwarp.com/portfolio/lines.html"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/S6XK7m7F_vI/AAAAAAAAAn0/w5GkqCCYAqU/s320/wires_screen.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(&lt;a href="http://www.kwarp.com/portfolio/wires.html"&gt;Download Here&lt;/a&gt;)&lt;/div&gt;&lt;br /&gt;Here's a cool Wireframe renderer. I wrote Matricies that handle all the transforms from Object Space to Screen Space, and everything in between. I threw in my animated robot dude for good fun, and a slider that moves between a pure perspective and orthographic projection. With a perspective projection, objects farther away seem smaller and converge at a vanishing point. On the other hand, orthographic projection has no vanishing point at all.&lt;br /&gt;&lt;br /&gt;I wrote the programs using a Java-based work environment called &lt;a href="http://www.processing.org/"&gt;Processing&lt;/a&gt;. It's very easy to get started making cool stuff. Check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-1138498074901006476?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/1138498074901006476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=1138498074901006476' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/1138498074901006476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/1138498074901006476'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2010/03/computer-graphics.html' title='Computer Graphics'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LYTx-eCHyN8/S6XK6omKUgI/AAAAAAAAAns/RNoAAZQcLTQ/s72-c/lines_screen.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-5890792049758037100</id><published>2010-01-18T14:40:00.000-08:00</published><updated>2010-01-22T12:39:33.598-08:00</updated><title type='text'>The Factory Project</title><content type='html'>Last semester, I took a Computer Science course about concurrent programming using the Agents. For my final project, I was put into an eleven-person programming team and tasked to design a way for robots to assemble kits in a Factory in 6 weeks. I have put together a walkthrough video of our results:&lt;br /&gt;&lt;br /&gt;&lt;object width="450" height="263"&gt;&lt;param name="movie" value="http://www.youtube.com/v/f6XuUCLgIkI&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/f6XuUCLgIkI&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="450" height="263"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The five of us in my CSCI 201 class worked on the system design and backend. The other six people were in CSCI 200 class and coded the GUI components.&lt;br /&gt;&lt;br /&gt;Our team was very strong, and chose to go well beyond the requirements for the assignment. We chose to make both the machines and the intelligence (making decisions for the machines) operate on separate threads, accurately simulating how a real factory would behave. There are approximately 43 threads in this program.&lt;br /&gt;&lt;br /&gt;I decided to try pair-programming with one of my team mates on this project, which turned out to be the best idea ever. We designed pseudo-code for key parts of the system in a single night, and comprehensively worked through the code on paper (and an excel spreadsheet) to insure that the logic worked out. From there, coding was trivial.&lt;br /&gt;&lt;br /&gt;The most difficult part of the project for me was designing the behavior for the Factory's FeederController. During runtime, the FeederController cycles through four major part-feeding states. At any time during any of those states, the Feeder could be interrupted with a command to feed a new type of part (or parts). The challenge was designing a system intelligent enough to appropriately respond to new commands under any circumstance.&lt;br /&gt;&lt;br /&gt;Unit Testing was an unexpectedly lengthy ordeal, eating up a couple days of my life and 1700 lines of virtual paper. In hindsight, such a comprehensive Unit Test was absolutely necessary. I discovered several behavior-breaking bugs that would have been impossible to detect after integration with the rest of the team. In fact, after integration, my tested components of the system worked almost exactly as expected, and suffered significantly fewer problems than the horror stories I heard from other teams in the class.&lt;br /&gt;&lt;br /&gt;While the resulting Factory simulation doesn't look as cool or flashy as the games on my website, it was a worthwhile team experience that dealt with some very difficult programming designs. Additionally, the tools I gained experience with, Subversion, Team Wikis, and Unit Testing, will be indispensable on future programming projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-5890792049758037100?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/5890792049758037100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=5890792049758037100' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5890792049758037100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5890792049758037100'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2010/01/factory-project.html' title='The Factory Project'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-2476292101977264391</id><published>2010-01-10T00:58:00.000-08:00</published><updated>2010-01-10T01:03:02.893-08:00</updated><title type='text'>3D Animation Reel</title><content type='html'>During the Fall 2009 semester, I took a 3D animation course that let me dabble in modeling, texturing, animating, and lighting 3D objects. I've put together a quick reel of some of the more interesting stuff I worked on.&lt;br /&gt;&lt;br /&gt;&lt;object height="263" width="450"&gt;&lt;param name="movie" value="http://www.youtube.com/v/pSxmzFoQpI4&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/pSxmzFoQpI4&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="450" height="263"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The two big subjects the course introduced me to were animation and lighting. I really enjoyed animating in Maya; it breathed some much-needed life into my (otherwise static) creations. The lighting process is sort of a mixed bag. My 3D objects looked absolutely stunning when lit correctly, but the actual process of lighting an object well took a lot of practice and patience.&lt;br /&gt;&lt;br /&gt;Overall, I learned some powerful techniques in this animation course that will serve me well in future 3D game projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-2476292101977264391?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/2476292101977264391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=2476292101977264391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/2476292101977264391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/2476292101977264391'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2010/01/3d-animation-reel.html' title='3D Animation Reel'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-1495773162669804338</id><published>2009-12-11T01:19:00.000-08:00</published><updated>2009-12-11T17:24:46.924-08:00</updated><title type='text'>Instead of Writing a Research Paper, I Made A Game</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://kwarp.com/projects/youaregodzilla.html"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyIDhBjIgsI/AAAAAAAAAkI/rkpClLZNCc0/s320/title.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;This semester, I took a General Education class on Modern Japanese Literature. One of the cornerstones of the course was writing a lengthy research paper about one of the topics discussed in class. Happy to push my luck, I proposed to the professor that I build a game instead of writing a paper. I figured that creating a simple game to satisfy the assignment would only take a few days to make, and it would give me an excuse to work with Antonio Cade, a fellow classmate taking the course, and an excellent artist.&lt;br /&gt;&lt;br /&gt;Our professor was intrigued with the idea, but only let us go ahead with it the project if we still wrote a 5-page paper to turn in with the game. Not too bad. That makes about 2.5 pages for each of us, and I could easily fill that space with discourse about the game design process. In fact, that's exactly what I did.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyIDjBLRTYI/AAAAAAAAAkQ/Cb4D7W6SFkI/s1600-h/screen1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyIDjBLRTYI/AAAAAAAAAkQ/Cb4D7W6SFkI/s320/screen1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Play the game here:&amp;nbsp;&lt;a href="http://kwarp.com/projects/youaregodzilla.html"&gt;http://kwarp.com/projects/youaregodzilla.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The game is pretty open-ended. You play as Godzilla, and can walk anywhere on the map. Beware that everything you walk into crumbles beneath your mighty feet. There are two ways to "win" the game. Either violently destroy all the buildings, or disappear into the ocean, never to be seen again. The point of the game is to reveal what the players think Godzilla should think and do. In actuality, understanding what Godzilla is about is a pretty sophisticated topic. The paper portion of the assignment discusses those issues in depth.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyIDkQ8cu2I/AAAAAAAAAkY/zDoHYk5zRNY/s1600-h/screen2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyIDkQ8cu2I/AAAAAAAAAkY/zDoHYk5zRNY/s320/screen2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Antonio ended up writing the more "researchy" portion of the paper, while I wrote about the game design and vision. Frankly, writing about the game design process was one of the most fun things I have ever done in a writing course. The paper occupies the rest of this blog post. See if you can find where I stopped writing and Antonio began. ;)&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;===========================================&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;Greg Lieberman&lt;br /&gt;&lt;/div&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;Antonio Cade&lt;br /&gt;&lt;/div&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;ARLT 100g&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" class="MsoNormal" style="text-align: center;"&gt;Designing the Game “You Are Godzilla”&lt;br /&gt;&lt;/div&gt;&lt;div align="center" class="MsoNormal" style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;We (Antonio and Greg) initially had drastically different ideas for how to approach designing a game that answers the question “What is Godzilla Really About?”. &lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;Greg initially wanted to design a narrative-driven game whose theme was to destroy Godzilla before he destroys you.&amp;nbsp; The player would take the role of a person living in a city that Godzilla had begun to destroy, and encounter several moral choices in the game that ultimately lead to either destroying Godzilla or being destroyed by Godzilla. For example, in one scene Greg imagined the player jumping across building rooftops to run away from Godzilla as the creature mindlessly raged forward. If the player kept running away, Godzilla would eventually destroy the whole city. If the player failed to run away, Godzilla would kill the player and then destroy the city. However, if the player strategically attacked Godzilla, the player would defeat Godzilla and the city would be saved. &lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;Greg’s game design was an interesting approach to exploring the way that humans react to Godzilla’s presence, but the design itself did not attempt any deep introspection into understanding Godzilla. In fact, it did the opposite. Greg defined Godzilla as an aggressive villain in the game that must be destroyed for the common good of mankind. Thus, all of the player’s moral choices in the game were framed within the boundaries of Godzilla as a devastating enemy. Ultimately, this one-sided view of Godzilla led to the rejection of Greg’s game design.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Antonio proposed an open-ended exploration game where the player controlled Godzilla directly, allowing the player to explore several of Godzilla’s actions and consequences. The player begins the game as Godzilla near the coast of a city. From there, the player could choose to violently attack the city, attack nearby battleships, harmlessly sulk in the ocean, or leave the map entirely. The genius of this game design is that it empowers the player to be the agent of moral choice, and to project the player’s ideas of what Godzilla does into actions in the game. In tackling the question of “What is Godzilla Really About?”, the game reveals the intentions and biases of the player.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;Wherever Godzilla walks on the game map, the creature leaves a path of destruction in its wake. In our Godzilla game, Godzilla will destroy buildings as it walks past them, even if it is not shooting fireballs. This was a crucial design choice. As Honda Ishiro once observed, “Monsters are tragic beings. They are not evil by choice; they are born too tall, too strong, too heavy… They do not attack humanity intentionally, but because of their size they cause damage and suffering” (Ryfle, 161).&amp;nbsp; Ishiro’s comments highlight an interesting ambiguity. Godzilla is not intrinsically a menacing, destructive force bent on destroying human civilization. Rather, it is completely possible that the only reason Godzilla would approach a metropolis is to explore and satisfy its primitive curiosity. The intention itself seems innocent to Godzilla, but a grave problem to the humans it encounters. We saw this curiosity manifest itself in many of the students who play-tested the game. Upon first playing the game and viewing the city, many students curiously walked into the city and began destroying buildings, even if violent destruction was not their intention.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;The fact that no part of the game map actively tries to stop Godzilla is meant to follow a common theme present throughout all of the movies, “the profound vulnerability of Japan” (Tsutsui, 91). When a player controls Godzilla, buildings crumble, trees snap, and battleships helplessly sink. The message here echoes that of the movies, “we certainly can’t count on the Japanese government, the United Nations, the scientific community, big business, the professional class, or even the world’s armies to do a very good job of protecting life, limb, and property” (Tsutsui, 91). The world’s utter failure to stop Godzilla further accentuates how out-of-control this “child of the atomic bomb” has become. Here is this huge creature, a product of the reckless hubris of civilization, able to easily stomp all over civilization without resistance. The clear lack of ability to stop Godzilla also expresses the loss of faith in science and government held by Japanese society since American occupation.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;The production of Godzilla was taken very seriously, as the film was cultural reminder of Japan’s suffering during the Atomic Age and the dangers of technology. Barely a decade after the atomic bombings of Hiroshima and Nagasaki, the effect of nuclear warfare was still fresh in the memory of Japan’s population. The culture as a whole came to recognize the deadly potential that belies nuclear technology, a strong theme of the Godzilla series. In March 1954, a Japanese fishing vessel, Lucky Dragon No. 5, strayed into a U.S. testing area for hydrogen bombs near Bikini Atoll. One crew member died, another 23 were contaminated from the massive amounts of radiation, and some of the irradiated fish even made its way into the Japanese market. This event serves to show the unexpected and dangerous repercussions of nuclear testing, and its indiscriminance towards the lives of innocents. Godzilla brings these tragic events into public awareness through clear thematic reference, as shown in the opening scene of the 1954 Godzilla film: a fishing vessel is suddenly obliterated by a mysterious energy blast from under the sea. The conscious decision to feature national disasters as plot points shows the director’s intention to openly discuss the impact of these events, and to force the audience to critically analyze their significance in Japanese culture. Japan already suffers from natural disasters such as earthquakes, tsunamis, and typhoons, and by this time the appearance of nuclear testing has instilled another fear of massive destruction in the heart of its culture.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;Godzilla truly is a monstrous creature of destructive nature, but his true intentions and feelings remain a mystery to this day, making his identity as a character quite ambiguous.&amp;nbsp; Godzilla’s potential for destruction is constantly made evident, whether he is trampling through skyscrapers and terrorizing the populace, or battling fierce monsters of equal or greater size. However, his use of his sheer size and power has shifted throughout the life of the series. Sometimes he is a traditional giant monster, mindlessly bent on decimating anything and everything in his path, as illustrated in our game by the option to destroy a large number of buildings, battleships and trees. At other times he is the defender of Japan, protecting it from hostile creatures like Rodan or Mothra in gigantic battles. He is a symbol of both the potential hope and the destruction brought by technological advancement, although nearly every instance of hostility in the series—the monsters themselves—is created by the side-effects of nuclear testing, most often radiation. His entire series plays on faults of mankind that could possible lead to its destruction: the greed for power, the desire for dominion over nature instead of living in harmony with it, the will to destroy anything we cannot understand or control.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;The article "Japan &amp;amp; Godzilla: Reflecting a Nation's Fears, Concerns and Culture” quotes an excellent summary of Godzilla’s identity as the “reverse of every Japanese stereotype. He is huge, in a country where, until recently, people were relatively small. He is clumsy and rude in a country where people tend to be graceful and polite. He is spontaneous in a place that values the impassive, studied response. He is confrontational where conciliation is considered proper behavior. He is, in essence, a nuclear bomb in a country that is emphatically opposed to nuclear weapons" (Easton, 2). Godzilla is Japanese cultural icon representing the many issues of nuclear warfare and its negative,&amp;nbsp; unpredictable effects on humankind, but as a character he forms a duality with the values and characteristics that make Japanese culture unique. In this respect he is almost an anti-hero to the Japanese people and their values; he is not a character one can remotely relate to, and he often acts in opposition to scientific progress and political authority. He lays waste to industrialized areas with tall buildings and communication towers like a child trampling through a sand castle, and even demolishes the Japanese parliament building. His actions stress the vulnerability of civilization’s building blocks in situations of crisis, yet at the same time he defends it from other his hostile entities. Considering these characteristics as a benefactor and as a destroyer, Godzilla stands as a symbol of restraint against dangerous scientific progress. Technology, while yielding the tools such as medicine and transportation which make human life safer and more convenient, gives birth to indiscriminant, destructive tools such as the atomic bomb. Godzilla is a testament against the creation and use of such technology, as his own destructive nature parallels the destructive potential of man’s own tools.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Cambria; font-size: 12pt; line-height: 200%;"&gt;&lt;br clear="ALL" style="page-break-before: always;" /&gt; &lt;/span&gt;  &lt;br /&gt;&lt;div class="MsoNormal" style="line-height: 200%; text-indent: 0.5in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" class="MsoNormal" style="text-align: center;"&gt;&lt;span style="font-size: 24pt;"&gt;Work Cited&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Ryfle, &lt;u&gt;Japan’s Favorite Mon-Star&lt;/u&gt;. Chicago: LPC, 1998.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Tsutsui, William. &lt;u&gt;Godzilla on My Mind.&lt;/u&gt; Palgrave McMillan, 2004.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Gunde, Richard. "Godzilla and Postwar Japan." (2005): n. pag. Web. 8 Dec 2009. &lt;http: article.asp?parentid="24850" www.international.ucla.edu=""&gt;.&lt;/http:&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Bunchwacky, . "Japan &amp;amp; Godzilla: Reflecting a Nation's Fears, Concerns and Culture." (2008): n. pag. Web. 10 Dec 2009. &lt;http: 676765="" article="" japan_godzilla_reflecting_a_nations.html?cat="40" www.associatedcontent.com=""&gt;.&lt;/http:&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-1495773162669804338?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/1495773162669804338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=1495773162669804338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/1495773162669804338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/1495773162669804338'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2009/12/instead-of-writing-research-paper-i.html' title='Instead of Writing a Research Paper, I Made A Game'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LYTx-eCHyN8/SyIDhBjIgsI/AAAAAAAAAkI/rkpClLZNCc0/s72-c/title.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-5537710240187881936</id><published>2009-12-10T18:20:00.000-08:00</published><updated>2009-12-11T17:19:56.744-08:00</updated><title type='text'>Semester in Review: FA 102</title><content type='html'>I took a Fine Arts Design course this semester to contribute to my minor in 2D Art For Games. The course had me do a lot of sketching and painting with a solid watercolor paint called&amp;nbsp;Gouache. The stuff was slick, better than printer ink.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkI53ubwI/AAAAAAAAAjI/4aEjwkIeIrw/s1600-h/IMG_6788.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkI53ubwI/AAAAAAAAAjI/4aEjwkIeIrw/s400/IMG_6788.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;These pieces are created by painting two sheets of bristol paper with black and white paint. The shapes are then cut out of one sheet and glued onto the other. The result is crisp, clean, and delicious.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkHJJN9GI/AAAAAAAAAjA/ngLwbPRuzK0/s1600-h/IMG_6714.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkHJJN9GI/AAAAAAAAAjA/ngLwbPRuzK0/s400/IMG_6714.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/SyGj4D1vM3I/AAAAAAAAAio/vORkk08eGwA/s1600-h/IMG_0052.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/SyGj4D1vM3I/AAAAAAAAAio/vORkk08eGwA/s400/IMG_0052.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;The course put a huge emphasis on the process of drafting art. All of our assignments began with several pencil thumbnails, the best of which became ink drawings, then full size drawings, and ultimately a final painted product.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkLOtJ2gI/AAAAAAAAAjQ/ZFM8GaTTpVk/s1600-h/IMG_6827.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkLOtJ2gI/AAAAAAAAAjQ/ZFM8GaTTpVk/s320/IMG_6827.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SyGkM025u1I/AAAAAAAAAjY/gsbUIGCGM44/s1600-h/IMG_6829.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SyGkM025u1I/AAAAAAAAAjY/gsbUIGCGM44/s320/IMG_6829.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We also had our fair share of technical painting exercises. I will never look at gray the same way again.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SyGkEtDGjCI/AAAAAAAAAiw/OZcm4R5UsHU/s1600-h/IMG_0069.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SyGkEtDGjCI/AAAAAAAAAiw/OZcm4R5UsHU/s320/IMG_0069.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkGAQxaVI/AAAAAAAAAi4/h9y6D5ODO-0/s1600-h/IMG_0070.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkGAQxaVI/AAAAAAAAAi4/h9y6D5ODO-0/s1600-h/IMG_0070.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkGAQxaVI/AAAAAAAAAi4/h9y6D5ODO-0/s320/IMG_0070.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; margin: 0px; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin: 0px; text-align: center;"&gt;My only frustration with the course was that I could not submit any of my final drafts as a computer image (not even printed). The final piece needed to be assembled by hand.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin: 0px; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin: 0px; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyGn8q9w9cI/AAAAAAAAAj4/rvi3hst54hI/s1600-h/shootforthestars4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyGn8q9w9cI/AAAAAAAAAj4/rvi3hst54hI/s320/shootforthestars4.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Of course, that didn't stop me from coloring my sketches in Photoshop to determine color schemes. :)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyGkTCCWuzI/AAAAAAAAAjw/XV82vlEb0iE/s1600-h/IMG_7030.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyGkTCCWuzI/AAAAAAAAAjw/XV82vlEb0iE/s320/IMG_7030.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;The final product, a 14 by 17 inch poster.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/SyGo0fJWvKI/AAAAAAAAAkA/ar4XTJom0ro/s1600-h/8BP079.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/SyGo0fJWvKI/AAAAAAAAAkA/ar4XTJom0ro/s320/8BP079.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;The last class assignment was to redesign a CD album cover. I chose one of my favorite indie composers.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SyGkQggslbI/AAAAAAAAAjo/CsWSv2TsUhM/s1600-h/IMG_7022.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SyLuL9KEWWI/AAAAAAAAAko/Xiec9nSvEOo/s1600-h/IMG_7032.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/SyLvpokcXWI/AAAAAAAAAkw/1okUUD8WCzY/s1600-h/IMG_7032.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/SyLvpokcXWI/AAAAAAAAAkw/1okUUD8WCzY/s320/IMG_7032.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;I liked the pattern in the original cover, and decided to expand upon it with imagery that the music triggered in my mind. To keep in line with the technically raw nature of the music, I repeated the simple primary colors and strong angular lines found in the pattern. Materials used were colored pencil, and drops of paint for the stars.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Overall, this art class gave me great practice in design and composition. I learned some useful skills for designing color schemes that will be essential for my digital art projects.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-5537710240187881936?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/5537710240187881936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=5537710240187881936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5537710240187881936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/5537710240187881936'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2009/12/semester-in-review-fa-102.html' title='Semester in Review: FA 102'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LYTx-eCHyN8/SyGkI53ubwI/AAAAAAAAAjI/4aEjwkIeIrw/s72-c/IMG_6788.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-7299514380030440951</id><published>2009-10-21T18:04:00.000-07:00</published><updated>2010-04-12T23:20:06.741-07:00</updated><title type='text'>Designing Levels for Kory The Thief</title><content type='html'>&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA69-W6G5I/AAAAAAAAAhw/rycsLuJ9l2o/s1600-h/ktt_screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA69-W6G5I/AAAAAAAAAhw/rycsLuJ9l2o/s400/ktt_screenshot.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://kwarp.com/portfolio/korythethief.html"&gt;Kory The Thief&lt;/a&gt;&amp;nbsp;was an interesting exercise in level design. Thanks to the Edward Flash Platformer Engine, I was able to build sophisticated levels with relative ease the Flash IDE. In this post I will describe the my intentions when designing the levels, and why every piece has its place.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SuA0q2CoyhI/AAAAAAAAAgg/V6pI0jT_D8Y/s1600-h/korythethief0.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395370264255580690" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SuA0q2CoyhI/AAAAAAAAAgg/V6pI0jT_D8Y/s400/korythethief0.png" style="cursor: pointer; display: block; height: 82px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Tutorial Level&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The purpose of the tutorial level is to introduce the player to the key elements of the game. One at a time the player learns to move, jump over obstacles, the nature of sloped surfaces, the consequences of touching lasers, and the behavior of fans and trampolines. Upon completing the tutorial level, the player is familiar with every element that commonly appears throughout the game's levels.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA0rIn9u1I/AAAAAAAAAgo/LAE55rnndMk/s1600-h/korythethief1.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395370269243980626" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA0rIn9u1I/AAAAAAAAAgo/LAE55rnndMk/s400/korythethief1.png" style="cursor: pointer; display: block; height: 172px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Dino Level 1&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;To complete a level in Kory The Thief, the player must first grab the level's jewel, then proceed to the door. Level 1 presents the jewel in plain sight, making the goal clear. However, the player needs to circle around the entire level to grab it. In this process the player will likely see the door and find it inactive. After grabbing the jewel, the player has no hint of where to go except to the door. Thus the requirements for level progression are learned.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/SuA0rYGfKUI/AAAAAAAAAgw/BLu-pfZHAaI/s1600-h/korythethief2.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395370273398532418" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/SuA0rYGfKUI/AAAAAAAAAgw/BLu-pfZHAaI/s400/korythethief2.png" style="cursor: pointer; display: block; height: 400px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 241px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Dino Level 2&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This level lets the player get some air time with fans and trampolines. It adds a welcome change of pace compared to the previous two levels. Like the previous level, the jewel is in an easy-to-see but hard-to-reach location. Moving laser beams are also introduced, increasing the play difficulty a bit.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SuA1BkAgLiI/AAAAAAAAAg4/sKJKPPjCQiA/s1600-h/korythethief3.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395370654551780898" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SuA1BkAgLiI/AAAAAAAAAg4/sKJKPPjCQiA/s400/korythethief3.png" style="cursor: pointer; display: block; height: 253px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Dino Level 3&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Naturally, a dinosaur themed set of levels should have a giant dinosaur skeleton. The player is pretty smart at this point, so I set a few simple laser traps. They can be easily avoided through caution or trial and error.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA1CD_lw1I/AAAAAAAAAhA/7dtepRAaA8Y/s1600-h/korythethief4.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395370663137887058" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA1CD_lw1I/AAAAAAAAAhA/7dtepRAaA8Y/s400/korythethief4.png" style="cursor: pointer; display: block; height: 185px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Aqua Level 1&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;A new environment theme. By this point, the player knows to get the jewel then proceed to the door, so the jewel is not in plain sight like previous levels.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA1CnYrbgI/AAAAAAAAAhI/Bs-2Inelpqc/s1600-h/korythethief5.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395370672638356994" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA1CnYrbgI/AAAAAAAAAhI/Bs-2Inelpqc/s400/korythethief5.png" style="cursor: pointer; display: block; height: 131px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Aqua Level 2&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The difficulty ramps up a bit here, requiring synchronized jumping with the motion of the lasers. I am particularly happy with how the 3 lasers at the end of the level almost squeeze the player into getting caught. Once the player gets to the door, well, mind the gap.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://3.bp.blogspot.com/_LYTx-eCHyN8/SuA1k2lN2tI/AAAAAAAAAhQ/DH3ksn5ug44/s1600-h/korythethief6.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395371260833028818" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/SuA1k2lN2tI/AAAAAAAAAhQ/DH3ksn5ug44/s400/korythethief6.png" style="cursor: pointer; display: block; height: 400px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 279px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Aqua Level 3&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This stage breaks from the theme of dodging lasers to solving a simple, but tricky puzzle. When the player jumps from a high enough height into the fan updraft, the player will fall past the updraft, hit the trampoline, and shoot up to the ceiling where the jewel is.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SuA1lXAN8PI/AAAAAAAAAhY/6ga5J1YNwLw/s1600-h/korythethief7.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395371269536215282" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SuA1lXAN8PI/AAAAAAAAAhY/6ga5J1YNwLw/s400/korythethief7.png" style="cursor: pointer; display: block; height: 193px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Egypt Level 1&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This stage introduces conveyor belts and some tough lasers to dodge. The player is smart enough at this point to navigate stages without guidance, so I placed an impassable laser path between the jewel and the door to throw the player off.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SuA1ltQ1AGI/AAAAAAAAAhg/YRnhSD9pj2s/s1600-h/korythethief8.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395371275511464034" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SuA1ltQ1AGI/AAAAAAAAAhg/YRnhSD9pj2s/s400/korythethief8.png" style="cursor: pointer; display: block; height: 242px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Egypt Level 2&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This stage introduces lasers that pulse on and off. I torment the player in this level by making the room with the jewel difficult to find. I expect many players to at first skip past the room and catch a glimpse of the jewel while falling down the corridor on the right. Of course, by then it's too late. :P&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA1mA1d36I/AAAAAAAAAho/BkX0q8CU4lQ/s1600-h/korythethief9.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395371280765411234" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA1mA1d36I/AAAAAAAAAho/BkX0q8CU4lQ/s400/korythethief9.png" style="cursor: pointer; display: block; height: 179px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Egypt Level 3&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The final stage looks more difficult than it actually is. There are many lasers in the level, but most are easy to dodge, except the lasers on the conveyor belts. Once the player has spent a few lives figuring out how to grab the jewel, the rest of the level only requires some simple, cautious jumping before the player is out of the museum and scot-free.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In Summary&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;-Thanks to the linear nature of the game, I was able to design the difficulty curve to tightly coordinate with the player's ever-increasing skill set.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;-In designing levels, I gave each stage its own unique shape and progression. Unique levels are memorable.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;If you are interested in designing your own levels, download Edward and give it a go.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Have fun,&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;-Greg&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-7299514380030440951?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/7299514380030440951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=7299514380030440951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/7299514380030440951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/7299514380030440951'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2009/10/designing-levels-for-kory-thief_21.html' title='Designing Levels for Kory The Thief'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LYTx-eCHyN8/SuA69-W6G5I/AAAAAAAAAhw/rycsLuJ9l2o/s72-c/ktt_screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-1960084788963420872</id><published>2009-07-07T16:28:00.000-07:00</published><updated>2009-07-20T20:49:56.616-07:00</updated><title type='text'>3D Models</title><content type='html'>Last semester, I took an introductory course in 3D modeling for video game engines. All the students in the class made assets to help senior game design students with their final game projects. I had a blast working with Maya and made some pretty sweet objects.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUBo2q_JMI/AAAAAAAAAbc/pklNiHbswNs/s1600-h/Sopwith_Triplane_0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUBo2q_JMI/AAAAAAAAAbc/pklNiHbswNs/s400/Sopwith_Triplane_0.jpg" alt="" id="BLOGGER_PHOTO_ID_5360692732836652226" border="0" /&gt;&lt;/a&gt;After running through a couple weeks of tutorials, our professor let the class loose to create 3D model from scratch. He sent us to a website full of blueprints from World War 1 vehicles and told us to build anything that was not already in USC's Online Asset Database. I picked the Sopwith Triplane and got to work.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUJ3FKWyEI/AAAAAAAAAcU/aLmBZhw4MZ0/s1600-h/sopwithmodel.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 240px;" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUJ3FKWyEI/AAAAAAAAAcU/aLmBZhw4MZ0/s400/sopwithmodel.PNG" alt="" id="BLOGGER_PHOTO_ID_5360701773337512002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Modeling the object was pretty straight-forward. Since this 3D model is meant to be run by a videogame rendering engine, I needed to keep the shape geometry as simple a possible so that the engine could render it quickly.&lt;br /&gt;&lt;br /&gt;Texturing the model was a completely different process from building it. The procedure for texturing a 3D object involves mapping its surface in 2D space on a square image. The process, called UV mapping, is much like peeling an orange, ripping the peel into cleverly shaped chunks, and then pounding all the peel chunks together to form a perfect square. Oh, and the computer usually treats automatic UV mapping with the same finesse as a paper shredder, so I needed to do this process manually.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SmUJw6EdDVI/AAAAAAAAAcM/fqrz2yW_qbI/s1600-h/textureoutline.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 366px;" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SmUJw6EdDVI/AAAAAAAAAcM/fqrz2yW_qbI/s400/textureoutline.PNG" alt="" id="BLOGGER_PHOTO_ID_5360701667280751954" border="0" /&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Cool! So where's the texture? Well, I had to make that from scratch too. Making good textures required a comprehensive search of images on Google and liberal use of Photoshop's clone stamp tool.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUJwlBo39I/AAAAAAAAAcE/uH-w7Ahozgg/s1600-h/texture.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 366px;" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUJwlBo39I/AAAAAAAAAcE/uH-w7Ahozgg/s400/texture.PNG" alt="" id="BLOGGER_PHOTO_ID_5360701661631799250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Eventually everything fits together like a tight game of Tetris and you've got yourself a complete 3D model. I think this plane took around 16 hours to build from start to finish.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SmURBlpnflI/AAAAAAAAAcc/64pLUWI_yHc/s1600-h/Souk_Groceries_0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SmURBlpnflI/AAAAAAAAAcc/64pLUWI_yHc/s400/Souk_Groceries_0.jpg" alt="" id="BLOGGER_PHOTO_ID_5360709650438651474" border="0" /&gt;&lt;/a&gt;My second model was a grocery store for a Dubai-style strategy game. It's meant to be seen from a Gods-eye view, so again I kept the geometry agonizingly simple (perhaps too simple). The class learned a lot about the particulars of Arabic architecture, particularly the flat roofs and bleached building colors.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_LYTx-eCHyN8/SmUBpUMkYjI/AAAAAAAAAbs/DCQDJ14QClw/s1600-h/US_Bank_Tower_0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://1.bp.blogspot.com/_LYTx-eCHyN8/SmUBpUMkYjI/AAAAAAAAAbs/DCQDJ14QClw/s400/US_Bank_Tower_0.jpg" alt="" id="BLOGGER_PHOTO_ID_5360692740762133042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I loved working on this one. The building is a simplified version of the US Bank Tower, the tallest building in downtown Los Angeles. I managed to work a massive amount of texture detail into the model by patterning the window texture vertically along all sides of the building.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SmUBptdGqYI/AAAAAAAAAb0/voVcOyvnf9o/s1600-h/Airport_Control_Tower_0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SmUBptdGqYI/AAAAAAAAAb0/voVcOyvnf9o/s400/Airport_Control_Tower_0.jpg" alt="" id="BLOGGER_PHOTO_ID_5360692747542374786" border="0" /&gt;&lt;/a&gt;I wasn't even required to make this airport tower. I happened to need one for a Java 3D project and figured it would be good exercise. There are control panels inside the top part of the building, but you can't see them from here.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUVnzPjLMI/AAAAAAAAAck/zXSr62NfSAI/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 362px;" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUVnzPjLMI/AAAAAAAAAck/zXSr62NfSAI/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5360714704968953026" border="0" /&gt;&lt;/a&gt;Score one for effective asset reuse!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUJwUNBTeI/AAAAAAAAAb8/1oEc8OCbowQ/s1600-h/safs_raptor_sc.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUJwUNBTeI/AAAAAAAAAb8/1oEc8OCbowQ/s400/safs_raptor_sc.jpg" alt="" id="BLOGGER_PHOTO_ID_5360701657116134882" border="0" /&gt;&lt;/a&gt;Our final project was a bit more involved than the previous models. We were expected to make our model twice as complicated and our textures four times as detailed. Our source material were some &lt;a href="http://www.maschinenkrueger.com/"&gt;science-fiction robot figurines&lt;/a&gt; that are popular among hobbyists. Many of the models are carved with insane detail, including realistic rust marks, oil stains, and warped metal all where one would expect. I found some fantastic photos of my model, the SAFS Raptor, for my texture work.&lt;br /&gt;&lt;br /&gt;My resource luck aside, the Raptor was extremely difficult to model. The main body was a complex collection of bulging, rounded plates of metal that did not lend itself easily to a mashing of cubes and spheres. I needed three days to get the modeling done properly, and another two to apply the textures. It was incredible that I survived all my finals that week.&lt;br /&gt;&lt;br /&gt;Building 3D models was a blast. Next semester, I will be animating them.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SmUBptdGqYI/AAAAAAAAAb0/voVcOyvnf9o/s1600-h/Airport_Control_Tower_0.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-1960084788963420872?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/1960084788963420872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=1960084788963420872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/1960084788963420872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/1960084788963420872'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2009/06/3d-models.html' title='3D Models'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LYTx-eCHyN8/SmUBo2q_JMI/AAAAAAAAAbc/pklNiHbswNs/s72-c/Sopwith_Triplane_0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-2835303556443553399</id><published>2008-11-08T02:31:00.000-08:00</published><updated>2008-11-08T02:46:37.116-08:00</updated><title type='text'>Brief Thoughts on Violent Videogames</title><content type='html'>I support strict content regulation of violent videogames, but I highly doubt videogames universally make people violent.&lt;br /&gt;&lt;br /&gt;Who spends the most time immersed in a given violent videogame? The game developers of course. If videogames universally train people to become violent, then the behavior of all videogame developers would have to most clearly support this claim. Not every violent game developer can aim a real gun properly, or feel indifferent to injuries on real people. Other factors influence the suspectability of a person to commit a violent act, and violent videogames are just one of a vast ocean of potential influencing factors.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-2835303556443553399?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/2835303556443553399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=2835303556443553399' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/2835303556443553399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/2835303556443553399'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2008/11/brief-thoughts-on-violent-videogames.html' title='Brief Thoughts on Violent Videogames'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-7435625451917264743</id><published>2008-08-18T03:48:00.000-07:00</published><updated>2008-08-19T01:19:15.558-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash game sliding button trigonometry class'/><title type='text'>The Sliding Button Class</title><content type='html'>I recently finished a new Flash game called &lt;a href="http://kwarp.com/portfolio/trigspinner.html"&gt;Trig Spinner&lt;/a&gt;. A couple ActionScript 3.0 classes developed over the course of the project, so I've decided to share them with the curious.&lt;br /&gt;&lt;br /&gt;Today's class is the oh-so-neat sliding button:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LYTx-eCHyN8/SKlWxgDMqGI/AAAAAAAAAOk/djCO8N5fWkQ/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_LYTx-eCHyN8/SKlWxgDMqGI/AAAAAAAAAOk/djCO8N5fWkQ/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5235811450211838050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;The sliding piece on the button gets dragged by the mouse and when let go, locks to either the left or right side. In Trig Spinner's case, it sets the game mode into either degrees or radians. I made a sample file to demonstrate how the button works:&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="300" height="300" id="SlidingButtonExample" align="middle"&gt; &lt;param name="allowScriptAccess" value="sameDomain" /&gt; &lt;param name="allowFullScreen" value="false" /&gt; &lt;param name="movie" value="http://www.kwarp.com/downloads/SlidingButtonExample.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;param name="bgcolor" value="#999999" /&gt; &lt;embed src="http://www.kwarp.com/downloads/SlidingButtonExample.swf" quality="high" bgcolor="#999999" width="300" height="300" name="SlidingButtonExample" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/&gt;&lt;/embed&gt;&lt;br /&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The class's code goes as follows:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;package {&lt;br /&gt;&lt;br /&gt; import flash.display.MovieClip;&lt;br /&gt; import flash.events.MouseEvent;&lt;br /&gt; import flash.events.Event;&lt;br /&gt; import flash.geom.Point;&lt;br /&gt;&lt;br /&gt; //Algorithm&lt;br /&gt; //on mouse down&lt;br /&gt; //if mouse is touching slider&lt;br /&gt; //start dragging it&lt;br /&gt; //on mouse up over the button or stage&lt;br /&gt; //if I am dragging the slider, stop dragging it&lt;br /&gt; //release and autolock the slider to closest edge&lt;br /&gt; //left = true&lt;br /&gt; //right = false&lt;br /&gt;&lt;br /&gt; public class SlideButton extends MovieClip {&lt;br /&gt;  //For a cool sliding button that gets dragged by the mouse and locks into place when let go&lt;br /&gt;  //if the piece isn't dragged, the it will also autolock on the closest side the mouse releases inside the button boundaries&lt;br /&gt;  //NOTE: slidePiece1 is an instance variable name inside my library movieclip&lt;br /&gt;&lt;br /&gt;  //generic variable describing the boolean state of the button, &lt;br /&gt;  //access it through myBoolState and interperet it &lt;br /&gt;  private var myBool:Boolean;&lt;br /&gt;  //assists dragging accuracy, difference between mouseX and slidePiece1's x&lt;br /&gt;  private var xDiff:Number;&lt;br /&gt;  private var initWidth:Number;&lt;br /&gt;  private var rightEdge:Number;&lt;br /&gt;  //constructor&lt;br /&gt;  public function SlideButton() {&lt;br /&gt;   addEventListener(MouseEvent.MOUSE_DOWN, mouseDownState);&lt;br /&gt;   slidePiece1.mouseEnabled = false;&lt;br /&gt;   //true by default, be careful!&lt;br /&gt;   myBool = true;&lt;br /&gt;   xDiff = 0;&lt;br /&gt;   //width changes during runtime when the slide piece is dragged too far, need it constant&lt;br /&gt;   //scaling the SlideButton instance is also a factor&lt;br /&gt;   initWidth = width/scaleX;&lt;br /&gt;   //the farthest x-coordinate the slide piece can go, &lt;br /&gt;   //do not confuse with the edge of the button graphic&lt;br /&gt;   rightEdge = initWidth-slidePiece1.width;&lt;br /&gt;  }&lt;br /&gt;  public function get myBoolState():Boolean {&lt;br /&gt;   return myBool;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function mouseDownState(event:MouseEvent) {&lt;br /&gt;   //convert local points to global so hitTest will work&lt;br /&gt;   var clickPoint:Point = new Point(mouseX, mouseY);&lt;br /&gt;   clickPoint = localToGlobal(clickPoint);&lt;br /&gt;   if (slidePiece1.hitTestPoint(clickPoint.x, clickPoint.y, true)) {&lt;br /&gt;    xDiff = slidePiece1.x - mouseX;&lt;br /&gt;    addEventListener(Event.ENTER_FRAME, dragHandler);&lt;br /&gt;   } else {&lt;br /&gt;    xDiff = -slidePiece1.width/2;&lt;br /&gt;   }&lt;br /&gt;   //let the stage listen for the mouseUp since the mouse can be dragged anywhere&lt;br /&gt;   this.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpState);&lt;br /&gt;  }&lt;br /&gt;  public function dragHandler(event:Event) {&lt;br /&gt;   //don't drag beyond the button boundaries&lt;br /&gt;   if (mouseX + xDiff &lt; 0) {&lt;br /&gt;    slidePiece1.x = 0;&lt;br /&gt;   } else if (mouseX + xDiff &gt; rightEdge) {&lt;br /&gt;    slidePiece1.x = rightEdge;&lt;br /&gt;   } else {&lt;br /&gt;    slidePiece1.x = mouseX + xDiff;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  public function mouseUpState(event:MouseEvent) {&lt;br /&gt;   removeEventListener(Event.ENTER_FRAME, dragHandler);&lt;br /&gt;   if (mouseX + xDiff &lt;= rightEdge/2) {&lt;br /&gt;    slidePiece1.x = 0;&lt;br /&gt;    myBool = true;&lt;br /&gt;   } else if (mouseX + xDiff &gt; rightEdge/2) {&lt;br /&gt;    slidePiece1.x = rightEdge;&lt;br /&gt;    myBool = false;&lt;br /&gt;   }&lt;br /&gt;   event.target.stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpState);&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kwarp.com/downloads/slidebuttonex.zip"&gt;Download the sample .fla file here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You are free to use this code however you please (without any warranty whatsoever, not even an implied one), but crediting me would be a nice gesture. ;)&lt;br /&gt;&lt;br /&gt;(Learn about ActionScript 3.0 classes &lt;a href="http://www.adobe.com/devnet/flash/quickstart/creating_class_as3/"&gt;here&lt;/a&gt;.)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-7435625451917264743?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/7435625451917264743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=7435625451917264743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/7435625451917264743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/7435625451917264743'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2008/08/i-recently-finished-new-flash-game-trig.html' title='The Sliding Button Class'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LYTx-eCHyN8/SKlWxgDMqGI/AAAAAAAAAOk/djCO8N5fWkQ/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23809115.post-3196929020341032396</id><published>2008-08-18T00:21:00.000-07:00</published><updated>2009-07-20T20:51:43.034-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='favorite games'/><title type='text'>Some of My Favorite Videogames</title><content type='html'>These are some of my favorite videogames in no particular order:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_LYTx-eCHyN8/SKktXCGTYuI/AAAAAAAAANk/0wsgdTsxyUQ/s1600-h/0263.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_LYTx-eCHyN8/SKktXCGTYuI/AAAAAAAAANk/0wsgdTsxyUQ/s320/0263.jpg" alt="" id="BLOGGER_PHOTO_ID_5235765915518460642" border="0" /&gt;&lt;/a&gt;Advance Wars is a turn based strategy game for the Game Boy Advance.  The game was my first real dive into the strategy genre. I fell in love with the beginning tutorial missions, whose clear instructions eased me into the deep and varied play mechanics as if I had known them all along.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;The rest of the game proved equally fantastic. The unique and varied units, commanding officer abilities, balanced gameplay, clever map designs, strategy possibilities, funny dialog, solid music, and stage editor made for a phenomenal package I sunk hundreds of hours into (and hundreds more in the sequels). My only complaint with the first game was being stuck with the same 3 commanding officers for most of the Campaign mode. Thankfully, Advance Wars 2 changed officers every couple missions and made some other welcome improvements. Of the four Advance Wars games (as of 2008), Advance Wars 2 is my personal favorite.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SKk1PtICjXI/AAAAAAAAANs/Gf2e22NsM_g/s1600-h/197771_14106_front.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SKk1PtICjXI/AAAAAAAAANs/Gf2e22NsM_g/s320/197771_14106_front.jpg" alt="" id="BLOGGER_PHOTO_ID_5235774585722539378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I first attempted to play this gem around 1999 at the age of 10. It freaked me out! Playing as child Link was fine, but after turning to adult Link and encountering the sea of redead in the castle town, those club-wielding boars in the Lost Woods, and even creepier creatures Forest Temple, I was just too frightened to proceed any further. *shiver* Come 2003, I'm completely addicted to this game, replaying it more than 4 times (and one go for the Master Quest version). Of all Zelda titles, this one houses my favorite 3D dungeons, music, and emotionally engaging plot. I still discover quirky details here and there when replaying the game.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LYTx-eCHyN8/SKk59WBHfrI/AAAAAAAAAN0/Yskzpwq3PIU/s1600-h/1205034837-Kirby_Super_Star.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_LYTx-eCHyN8/SKk59WBHfrI/AAAAAAAAAN0/Yskzpwq3PIU/s320/1205034837-Kirby_Super_Star.png" alt="" id="BLOGGER_PHOTO_ID_5235779767839981234" border="0" /&gt;&lt;/a&gt;Hell yes! Kirby Super Star is my favorite videogame ever. I will happily play and replay this entire game any day of the week. Kirby is an adorable pink blob with the ability to eat his enemies and copy their abilities. The copy mechanic allows players to experience the game's platforming environments in dozens of different ways. The game's rich color palette and happy music create a wonderful aesthetic I dearly miss in more modern "polygon-pushing" titles. The game consists of 5 chapters that take Kirby on different platforming adventures, and also a few mingames for good measure.&lt;br /&gt;&lt;br /&gt;One chapter, "Revenge of Metaknight", incorporates narrative in a very interesting way. The chapter reveals plot progression from the radio communications between Metaknight and his underlings. As the player progresses through the platforming stages, the villians comment on Kirby's position in real time as he foils Metaknight's plan to conquer Dreamland one stage at a time. I haven't seen narrative incorporated as tightly into a sidescrolling game ever since. Like the rest of the game, "Revenge of Metaknight" consists of exciting stages, boss battles and sweet theme music.&lt;br /&gt;&lt;br /&gt;Another chapter, "The Great Cave Offensive" places Kirby on a fantastical treasure hunt as he searches for a way out of the underground cave he has fallen into. Kirby travels through underground gardens, mine-shafts, and water-filled crystaline caverns (among many more) in his search for wealth and freedom. The sheer amount of imagination poured into each of these environments astounds me; how did these designers squeeze such rich colors and beautiful levels into a 2 megabyte cartridge? The level design proves just as interesting. Collecting all 50 hidden treasures is quite a tough feat, even with the help of a strategy guide. I could gush about this game forever,  so to conclude: artistry, music, level design, and play mechanics, Kirby Super Star has got it all. (Also, the 2-player rocks!)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23809115-3196929020341032396?l=kwarp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kwarp.blogspot.com/feeds/3196929020341032396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23809115&amp;postID=3196929020341032396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/3196929020341032396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23809115/posts/default/3196929020341032396'/><link rel='alternate' type='text/html' href='http://kwarp.blogspot.com/2008/08/these-are-some-of-my-favorite.html' title='Some of My Favorite Videogames'/><author><name>Greg Lieberman</name><uri>http://www.blogger.com/profile/08083153987589335224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/-Rih01IbTwSY/TnOJg_MWPjI/AAAAAAAAA5o/D9xACZFb5UM/s220/168057_10150116782247037_509387036_8344504_430279_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_LYTx-eCHyN8/SKktXCGTYuI/AAAAAAAAANk/0wsgdTsxyUQ/s72-c/0263.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
