<?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:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3849793384395497972</id><updated>2010-05-05T16:34:07.815-07:00</updated><title type='text'>Portfolio of the Godsey</title><subtitle type='html'>Portfolio for Chad Godsey, a game development student at the University of Missouri</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://portfolio.chadgodsey.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default'/><link rel='alternate' type='text/html' href='http://portfolio.chadgodsey.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ChadyG</name><uri>http://www.blogger.com/profile/08145056828075854965</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3849793384395497972.post-8475184239052117966</id><published>2008-10-25T13:09:00.001-07:00</published><updated>2008-10-25T13:15:17.166-07:00</updated><title type='text'>Ghosts Ghouls and Goblins, oh my!</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;p&gt;In leiu of Halloween I decided to make a simple two-day game about trick or treating.  Once again I used Gosu, but for this I stuck with Ruby as the language.  For Windows users who don't feel like figuring out how to get Ruby on their system I packaged the whole deal using &lt;a href="http://www.erikveen.dds.nl/rubyscript2exe/"&gt;RubyScript2exe&lt;/a&gt; which works fairly well.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The game is pretty basic, you are a ghost going from house to house collecting candy.  However, other trick or treaters will "attack" you.  You can jump over them or throw candy to stun them and get by, but don't throw all of your candy!  Controls are just arrow keys and space bar.  You win by just lasting through to the end of the night (moon goes down).&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.filedropper.com/ghoulsngoblins"&gt;Get package here &lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SQN9MOy9QRI/AAAAAAAAAHo/7ARbwbALru0/s1600-h/GhostsNGhouls.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 249px;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SQN9MOy9QRI/AAAAAAAAAHo/7ARbwbALru0/s320/GhostsNGhouls.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5261186438782599442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849793384395497972-8475184239052117966?l=portfolio.chadgodsey.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portfolio.chadgodsey.com/feeds/8475184239052117966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3849793384395497972&amp;postID=8475184239052117966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/8475184239052117966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/8475184239052117966'/><link rel='alternate' type='text/html' href='http://portfolio.chadgodsey.com/2008/10/ghosts-ghouls-and-goblins-oh-my.html' title='Ghosts Ghouls and Goblins, oh my!'/><author><name>ChadyG</name><uri>http://www.blogger.com/profile/08145056828075854965</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10572125314107723189'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j16AFUG-s4M/SQN9MOy9QRI/AAAAAAAAAHo/7ARbwbALru0/s72-c/GhostsNGhouls.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849793384395497972.post-3719752544314148746</id><published>2008-04-28T18:13:00.000-07:00</published><updated>2009-07-28T16:58:52.367-07:00</updated><title type='text'>Hamsterball Galaxy</title><content type='html'>This project began my use of Julian Raschke's &lt;a href="http://code.google.com/p/gosu/"&gt;Gosu&lt;/a&gt; minimalist 2D game library and Erin Catto's &lt;a href="http://www.box2d.org/"&gt;Box2D&lt;/a&gt; physics library.  This is intended to be a simple and polished game.  For myself, it is a project to solidify my knowledge of C++.&lt;br /&gt;&lt;br /&gt;The concept is simple: you are stuck inside of a ball and must move about each level collecting keys to get out.  In each level you are pushed to master your prison even further by learning how to use the environment.&lt;br /&gt;&lt;br /&gt;What this means is that we have a physics based game where the environment has certain effects on your movement.  There are 5 types of walls;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Normal - no effect&lt;/li&gt; &lt;li&gt;Bounce - propels you away&lt;/li&gt; &lt;li&gt;Push   - invisible barrier&lt;/li&gt; &lt;li&gt;Magnet - pulls you&lt;/li&gt; &lt;li&gt;Sticky - nullifies your movement&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Using these you can work your way through each level.  Your overall progress is measured by a timer and is recorded to a high scores screen.  When you fall off the timer adds 10 seconds, but you are allowed to respawn as many times as necessary.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j16AFUG-s4M/SBZ3Ze1IJQI/AAAAAAAAAEY/Ahgw5XV4MWI/s1600-h/circless1.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_j16AFUG-s4M/SBZ3Ze1IJQI/AAAAAAAAAEY/Ahgw5XV4MWI/s320/circless1.png" alt="" id="BLOGGER_PHOTO_ID_5194470499874776322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBZ3Zu1IJRI/AAAAAAAAAEg/qPXofOr2tKQ/s1600-h/circless2.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBZ3Zu1IJRI/AAAAAAAAAEg/qPXofOr2tKQ/s320/circless2.png" alt="" id="BLOGGER_PHOTO_ID_5194470504169743634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j16AFUG-s4M/SBZ3Z-1IJSI/AAAAAAAAAEo/78Y7fOtvSHM/s1600-h/circless3.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_j16AFUG-s4M/SBZ3Z-1IJSI/AAAAAAAAAEo/78Y7fOtvSHM/s320/circless3.png" alt="" id="BLOGGER_PHOTO_ID_5194470508464710946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j16AFUG-s4M/SBZ3aO1IJTI/AAAAAAAAAEw/ru_TDbrfOc0/s1600-h/circless4.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_j16AFUG-s4M/SBZ3aO1IJTI/AAAAAAAAAEw/ru_TDbrfOc0/s320/circless4.png" alt="" id="BLOGGER_PHOTO_ID_5194470512759678258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j16AFUG-s4M/SBZ3aO1IJUI/AAAAAAAAAE4/qdMQPylmQzE/s1600-h/circless5.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_j16AFUG-s4M/SBZ3aO1IJUI/AAAAAAAAAE4/qdMQPylmQzE/s320/circless5.png" alt="" id="BLOGGER_PHOTO_ID_5194470512759678274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.getdropbox.com/u/6366/ChadyG-CircleGame_v1.5.zip"&gt;Windows exe&lt;/a&gt; | &lt;a href="http://www.filedropper.com/circlemanapp"&gt;Mac app (currently broken)&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849793384395497972-3719752544314148746?l=portfolio.chadgodsey.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portfolio.chadgodsey.com/feeds/3719752544314148746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3849793384395497972&amp;postID=3719752544314148746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/3719752544314148746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/3719752544314148746'/><link rel='alternate' type='text/html' href='http://portfolio.chadgodsey.com/2008/04/i-am-currently-working-with-gosu.html' title='Hamsterball Galaxy'/><author><name>ChadyG</name><uri>http://www.blogger.com/profile/08145056828075854965</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10572125314107723189'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_j16AFUG-s4M/SBZ3Ze1IJQI/AAAAAAAAAEY/Ahgw5XV4MWI/s72-c/circless1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849793384395497972.post-4755570067630144793</id><published>2008-03-04T19:25:00.000-08:00</published><updated>2008-07-31T22:50:01.701-07:00</updated><title type='text'>Cardboard Land</title><content type='html'>Last semester I began work on an adventure/puzzler game where you, a man composed of cardboard boxes, must venture away from the protection of your humble village to locate necessary supplies to sustain your family and friends.  This is developed using the &lt;a href="http://garagegames.com/"&gt;Torque Game Engine Advanced&lt;/a&gt; for my engine as well as using Maya and Photoshop for content creation.&lt;br /&gt;&lt;br /&gt;Many components of it are broken down in my &lt;a href="http://chadgodseydev.blogspot.com/"&gt;development blog&lt;/a&gt;.  I plan on continuing this project when my free time is again realized.  There are a number of things that I wish to complete before I can consider this "done".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Features&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;destructible character&lt;/li&gt;&lt;li&gt;use of HDR and bloom&lt;/li&gt;&lt;li&gt;blended animation&lt;/li&gt;&lt;li&gt;simple state based reflex agent AI&lt;/li&gt;&lt;li&gt;hover vehicle (boat)&lt;/li&gt;&lt;li&gt;sketch able map&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Retrospective&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As a whole, I believe that this game has evolved fairly well. I did not sit down and plan much, I just garnered ideas and ran with them, adapting them to what I believe is interesting game play as best as I could. There are many things that I must work over and expand upon before it will be a game that I myself would find fun and worthy of playing. However, it has potential and isn't out of reach.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j16AFUG-s4M/SBSlUu1IJLI/AAAAAAAAADw/fV34vLahr58/s1600-h/screen6.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_j16AFUG-s4M/SBSlUu1IJLI/AAAAAAAAADw/fV34vLahr58/s320/screen6.png" alt="" id="BLOGGER_PHOTO_ID_5193958045851854002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBSlVO1IJMI/AAAAAAAAAD4/28EJkXF-uDw/s1600-h/screen7.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBSlVO1IJMI/AAAAAAAAAD4/28EJkXF-uDw/s320/screen7.png" alt="" id="BLOGGER_PHOTO_ID_5193958054441788610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j16AFUG-s4M/SBSlVe1IJNI/AAAAAAAAAEA/t0ShNfkaWx8/s1600-h/screen8.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_j16AFUG-s4M/SBSlVe1IJNI/AAAAAAAAAEA/t0ShNfkaWx8/s320/screen8.png" alt="" id="BLOGGER_PHOTO_ID_5193958058736755922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j16AFUG-s4M/SBSlV-1IJOI/AAAAAAAAAEI/7vabdDuRnAc/s1600-h/screen9.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_j16AFUG-s4M/SBSlV-1IJOI/AAAAAAAAAEI/7vabdDuRnAc/s320/screen9.png" alt="" id="BLOGGER_PHOTO_ID_5193958067326690530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j16AFUG-s4M/SBSlWe1IJPI/AAAAAAAAAEQ/OKxjhvrX3CA/s1600-h/screen10.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_j16AFUG-s4M/SBSlWe1IJPI/AAAAAAAAAEQ/OKxjhvrX3CA/s320/screen10.png" alt="" id="BLOGGER_PHOTO_ID_5193958075916625138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.filedropper.com/cardboardlandfinal"&gt;Download (Windows only, sorry)&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849793384395497972-4755570067630144793?l=portfolio.chadgodsey.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portfolio.chadgodsey.com/feeds/4755570067630144793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3849793384395497972&amp;postID=4755570067630144793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/4755570067630144793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/4755570067630144793'/><link rel='alternate' type='text/html' href='http://portfolio.chadgodsey.com/2008/03/cardboard-land.html' title='Cardboard Land'/><author><name>ChadyG</name><uri>http://www.blogger.com/profile/08145056828075854965</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10572125314107723189'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_j16AFUG-s4M/SBSlUu1IJLI/AAAAAAAAADw/fV34vLahr58/s72-c/screen6.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849793384395497972.post-7873014618447415476</id><published>2007-10-22T13:08:00.000-07:00</published><updated>2008-04-28T21:18:03.892-07:00</updated><title type='text'>DS Homebrew</title><content type='html'>&lt;div class="content-item"&gt;&lt;div id="g_body"&gt;Using the &lt;a href="http://www.palib.info/wiki/doku.php"&gt;PAlib&lt;/a&gt; I have begun work on two medium sized game projects.  One was developed for a semester project with two other people, Mike Daly and Rick Naik.  The other is not in active development yet.  There are several, and will be many more DS homebrews cooked up as time passes, since this medium is versatile and quick to develop for.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Physics Simulation&lt;/h2&gt;&lt;br /&gt;&lt;embed id="VideoPlayback" style="width: 400px; height: 326px;" flashvars="" src="http://video.google.com/googleplayer.swf?docid=-5026119460547121008&amp;amp;hl=en" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The first project is to be a 2D physics simulation using primitive shapes, player drawn shapes and sprite objects.  It will allow the player to draw primitives (circles, rectangles, and triangles) and place sprite based objects then run the physics simulation to play out endless scenarios.  It is somewhat similar to games such as &lt;em&gt;The Incredible Machine&lt;/em&gt;, but with the ability to draw your own objects and toy with more realistic physics.  The source and build of this can be found &lt;a href="https://chadley.sytes.net/webSVN" target="_blank"&gt;here&lt;/a&gt;.  These can be run using an emulator such as &lt;a href="http://nocash.emubase.de/gba.htm" target="_blank"&gt;No$GBA&lt;/a&gt;, or hardware such as a &lt;a href="http://eng.supercard.cn/" target="_blank"&gt;SuperCard&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To accomplish this, I researched game physics (as it has been several years since I took physics as a class, and cannot effectively read my notes any more) and sorted through 3D implementations to work out how to accomplish the same ideas in 2D.  I ended up using some simple velocity calculations from the impact vector (splitting into direct and tangential impacts) and then just cheating for rotation (no rotational inertia).  For the collision detection, I am simply using circles to test if there may be a collision, then brutishly checking if any vertex of one shape is inside the other.  This is straighforward, as each shape is convex.  I'm taking the dot product of each edge on shape A, and testing it against each vertex on shape B, so if any of these values is negative, the shapes are not colliding.  This way, a collision is our worst case scenario, which may or may not be the best method, it just seemed simple enough to get me going.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Pirate RPG&lt;/h2&gt;&lt;p&gt;Although little progress has been made with this project, there are some interesting plans for it.  So far, I have an 8 direction ship sprite sheet, a test tiled map, and a stern image for steering hooked into a simple moving ship thing.  So, basically right now you can move the ship, while using the stylus to steer on the bottom screen, and run into the land (basic tile checking for wall detection).  Nothing fancy, yet.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Small projects&lt;/h2&gt; &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBahYu1IJjI/AAAAAAAAAHI/fwvTk1-K2GA/s1600-h/DSFace.PNG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBahYu1IJjI/AAAAAAAAAHI/fwvTk1-K2GA/s320/DSFace.PNG" alt="" id="BLOGGER_PHOTO_ID_5194516666478241330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBahYu1IJkI/AAAAAAAAAHQ/BxvqDdn0OQM/s1600-h/DStorus.PNG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBahYu1IJkI/AAAAAAAAAHQ/BxvqDdn0OQM/s320/DStorus.PNG" alt="" id="BLOGGER_PHOTO_ID_5194516666478241346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;p&gt;&lt;br /&gt;Just for fun, I wrote an obj parser to render 3D models on the DS using openGL calls.  As you may notice, the default shaders are not available through the libraries, so I just made up some crappy colorization to differentiate the geometry.  If I hadn't lost the code for this, I would chock up some lambertian or phong, but it was lost in some HD changes.   Maybe I'll get around to rewriting it and adding these things.&lt;br /&gt;&lt;/p&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/3849793384395497972-7873014618447415476?l=portfolio.chadgodsey.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portfolio.chadgodsey.com/feeds/7873014618447415476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3849793384395497972&amp;postID=7873014618447415476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/7873014618447415476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/7873014618447415476'/><link rel='alternate' type='text/html' href='http://portfolio.chadgodsey.com/2007/10/ds-homebrew.html' title='DS Homebrew'/><author><name>ChadyG</name><uri>http://www.blogger.com/profile/08145056828075854965</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10572125314107723189'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j16AFUG-s4M/SBahYu1IJjI/AAAAAAAAAHI/fwvTk1-K2GA/s72-c/DSFace.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849793384395497972.post-2508575107283574277</id><published>2007-10-22T12:56:00.000-07:00</published><updated>2008-04-29T17:16:08.788-07:00</updated><title type='text'>MMOG Development</title><content type='html'>Not long after getting the Internet in 2001, I found an online MMOG based originally on ALttP             ( www.graalonline.com ).  Not long after, a built in editor was discovered so I started playing with              the proprietary scripting engine.  Some of my more notable accomplishments are described below.             &lt;div class="content-item"&gt;&lt;div id="g_body"&gt;             &lt;h2&gt;A* Pathfinding&lt;/h2&gt;&lt;h2&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j16AFUG-s4M/SBae2O1IJVI/AAAAAAAAAFY/GUwGQn3ACeQ/s1600-h/Pathfinder1.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_j16AFUG-s4M/SBae2O1IJVI/AAAAAAAAAFY/GUwGQn3ACeQ/s320/Pathfinder1.png" alt="" id="BLOGGER_PHOTO_ID_5194513874749498706" border="0" /&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j16AFUG-s4M/SBae2e1IJWI/AAAAAAAAAFg/h2tgH8LG2c0/s1600-h/Pathfinder2.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_j16AFUG-s4M/SBae2e1IJWI/AAAAAAAAAFg/h2tgH8LG2c0/s320/Pathfinder2.png" alt="" id="BLOGGER_PHOTO_ID_5194513879044466018" border="0" /&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBae2u1IJXI/AAAAAAAAAFo/oDMi7z1AL7I/s1600-h/Pathfinder3.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBae2u1IJXI/AAAAAAAAAFo/oDMi7z1AL7I/s320/Pathfinder3.png" alt="" id="BLOGGER_PHOTO_ID_5194513883339433330" border="0" /&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;               &lt;/h2&gt;&lt;p&gt;             One of the things that brought myself fame in the game's community is this A* implementation.             While not optimised for large areas, it was well suited for single level traversal.               It used the tiles in the game as nodes and several arrays for the F and G costs, aswell              as for the Parent relationships.  It was built to add cost for water, swamp, and other              rough terrrain.  In the pictures, the blue Xs are visited nodes and the green Xs are open nodes.              &lt;/p&gt;             &lt;p&gt;             As I grew more knowledgable of abstract data types (binary heaps etc) and dynamic memory              management, implementations of A* grew more powerful and useable in more demanding settings.             &lt;/p&gt;             &lt;h2&gt;Mini Games&lt;/h2&gt;   &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j16AFUG-s4M/SBafSe1IJYI/AAAAAAAAAFw/jvpkbqysve8/s1600-h/dots.PNG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_j16AFUG-s4M/SBafSe1IJYI/AAAAAAAAAFw/jvpkbqysve8/s320/dots.PNG" alt="" id="BLOGGER_PHOTO_ID_5194514360080803202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBafSu1IJZI/AAAAAAAAAF4/RZ4Wi9YUkxc/s1600-h/ConnectFour.PNG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBafSu1IJZI/AAAAAAAAAF4/RZ4Wi9YUkxc/s320/ConnectFour.PNG" alt="" id="BLOGGER_PHOTO_ID_5194514364375770514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBafSu1IJaI/AAAAAAAAAGA/gxrwYTljr34/s1600-h/polarium.PNG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBafSu1IJaI/AAAAAAAAAGA/gxrwYTljr34/s320/polarium.PNG" alt="" id="BLOGGER_PHOTO_ID_5194514364375770530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   &lt;p&gt;             I built several mini games, some of which allowed you to play other people.               As you can see above, I recreated the popular DS game &lt;em&gt;Polarium&lt;/em&gt; (although             never got around to adding versus play). Also, I scripted a Dots game (drawing squares             on paper versus others), Connect Four, and a single player Tic-Tac-Toe (using a              Minimax implementation limited by the game engine's script restraints).  Since pixel graphics are not my specialty (or most graphics), all of these make heavy use              of the polygon drawing functions within the scripting language.  This caused me to find many ways to optimise drawing using vectors and arrays.             &lt;/p&gt;             &lt;h2&gt;3D rendering&lt;/h2&gt;                &lt;embed id="VideoPlayback" style="width: 400px; height: 326px;" flashvars="" src="http://video.google.com/googleplayer.swf?docid=1325932576626778833&amp;amp;hl=en" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j16AFUG-s4M/SBafvO1IJbI/AAAAAAAAAGI/Bg2cmGlyylA/s1600-h/3dgraph2.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_j16AFUG-s4M/SBafvO1IJbI/AAAAAAAAAGI/Bg2cmGlyylA/s320/3dgraph2.png" alt="" id="BLOGGER_PHOTO_ID_5194514854002042290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j16AFUG-s4M/SBafvO1IJcI/AAAAAAAAAGQ/4ZEVXS3v1l8/s1600-h/sphere.PNG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_j16AFUG-s4M/SBafvO1IJcI/AAAAAAAAAGQ/4ZEVXS3v1l8/s320/sphere.PNG" alt="" id="BLOGGER_PHOTO_ID_5194514854002042306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;p&gt; The second picture here is an early attempt at a simple 3d engine. It uses some complex trigonometric equations to solve for rotating the points (very slow). The first and third are both from the same script (different from first picture) that uses 3d transformation matricies to rotate the points with some very basic culling and lighting (just the cosine between the veiwing angle and face normal). &lt;/p&gt; &lt;embed id="VideoPlayback" style="width: 400px; height: 326px;" flashvars="" src="http://video.google.com/googleplayer.swf?docid=-1523724894288221699&amp;amp;hl=en" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;              &lt;p&gt;             This is a simulation of rope using relatively simple vector normalisation and inertia calculations.             The 3D effect is created by doubling the draw of each segment to perpendicular rectangles              (knowledge of 3D rotations was not a part of my toolkit at this point).             &lt;/p&gt;             &lt;h2&gt;Various&lt;/h2&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j16AFUG-s4M/SBagPe1IJdI/AAAAAAAAAGY/5_lR2ZG5Xhg/s1600-h/bacon%2Beggs.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_j16AFUG-s4M/SBagPe1IJdI/AAAAAAAAAGY/5_lR2ZG5Xhg/s320/bacon%2Beggs.png" alt="" id="BLOGGER_PHOTO_ID_5194515408052823506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBagPu1IJeI/AAAAAAAAAGg/2AY3AjJcCcg/s1600-h/campfire.PNG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBagPu1IJeI/AAAAAAAAAGg/2AY3AjJcCcg/s320/campfire.PNG" alt="" id="BLOGGER_PHOTO_ID_5194515412347790818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j16AFUG-s4M/SBagPu1IJfI/AAAAAAAAAGo/lhvO_wBB9tE/s1600-h/FiresWorks.PNG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_j16AFUG-s4M/SBagPu1IJfI/AAAAAAAAAGo/lhvO_wBB9tE/s320/FiresWorks.PNG" alt="" id="BLOGGER_PHOTO_ID_5194515412347790834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j16AFUG-s4M/SBagQO1IJgI/AAAAAAAAAGw/ZECe6QfVDjI/s1600-h/Flag1.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_j16AFUG-s4M/SBagQO1IJgI/AAAAAAAAAGw/ZECe6QfVDjI/s320/Flag1.png" alt="" id="BLOGGER_PHOTO_ID_5194515420937725442" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;       &lt;p&gt;             The first picture is of a vector drawing script that allows the player to draw lines and              shapes with the selected color.  This was all done using the aforementioned polygon drawing             functions.  The second is just an experiment with the built in particle system (adopted              from the Torque engine, which the MMOG began to use) as well as a custom built shadow             script that would rotate based on time of day.  The third is a custom built particle effect             that would simulate an exploding spray of sparks.  The flag image is actually a procedural             animation that would chop up an image and disply vertical portions of it in a way to simulate             a wave effect.  The version shown is actually using an array of color values instead of an image.             &lt;/p&gt; &lt;embed id="VideoPlayback" style="width: 400px; height: 326px;" flashvars="" src="http://video.google.com/googleplayer.swf?docid=-2409604617195844435&amp;amp;hl=en" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;              &lt;p&gt;             The above is one of a few string/rope simulations made using simple vector calculations             based on Euclidian distance.  One of the more advanced versions of this calculated the string             for 3 dimensions and used screen aligned quads to keep the rope at a consistant width.               In this version, the line used simple physics relations for projectile motion to cast              and land in the water.             &lt;/p&gt;         &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j16AFUG-s4M/SBagf-1IJhI/AAAAAAAAAG4/OqxL7t-hRfQ/s1600-h/Fractal2.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_j16AFUG-s4M/SBagf-1IJhI/AAAAAAAAAG4/OqxL7t-hRfQ/s320/Fractal2.png" alt="" id="BLOGGER_PHOTO_ID_5194515691520665106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j16AFUG-s4M/SBagf-1IJiI/AAAAAAAAAHA/Fe238tbJ8P8/s1600-h/Fractal3.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_j16AFUG-s4M/SBagf-1IJiI/AAAAAAAAAHA/Fe238tbJ8P8/s320/Fractal3.png" alt="" id="BLOGGER_PHOTO_ID_5194515691520665122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;         &lt;p&gt;             This is a simple fractal algorithm that would take an array of vectors, then extrude the edges             of a square using the vectors.             &lt;/p&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/3849793384395497972-2508575107283574277?l=portfolio.chadgodsey.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portfolio.chadgodsey.com/feeds/2508575107283574277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3849793384395497972&amp;postID=2508575107283574277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/2508575107283574277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849793384395497972/posts/default/2508575107283574277'/><link rel='alternate' type='text/html' href='http://portfolio.chadgodsey.com/2007/10/mmog-development.html' title='MMOG Development'/><author><name>ChadyG</name><uri>http://www.blogger.com/profile/08145056828075854965</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10572125314107723189'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_j16AFUG-s4M/SBae2O1IJVI/AAAAAAAAAFY/GUwGQn3ACeQ/s72-c/Pathfinder1.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>