<?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-292781996978576543</id><updated>2011-12-22T20:45:53.681-08:00</updated><category term='horrible'/><category term='ThreeRings'/><category term='POSIX'/><category term='Flash'/><category term='AI'/><category term='Physics'/><category term='IGDA'/><category term='WTF'/><category term='design'/><category term='Flex'/><category term='Blogs of the Round Table'/><category term='evil'/><category term='projects'/><category term='EVE'/><category term='fluff'/><category term='YRO'/><title type='text'>Making Banana Peels Relevant</title><subtitle type='html'>Game design through creative application of manholes.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-8639863852489899089</id><published>2010-12-05T16:01:00.000-08:00</published><updated>2010-12-05T17:17:14.945-08:00</updated><title type='text'>jsplatformer Part 1 - Figuring out Links</title><content type='html'>Experimenting with using &lt;a href="https://sites.google.com/"&gt;Google Sites&lt;/a&gt; as a way to host both code files and final runnable version of the tutorials.&lt;br /&gt;&lt;br /&gt;This is an addendum to my earlier post, &lt;a href="http://ethicsofmadness.blogspot.com/2010/11/jsplatformer-part-1.html"&gt;jsplatformer Part 1&lt;/a&gt; including links to individual code files and working examples of the final pieces.&lt;br /&gt;&lt;br /&gt;&lt;big&gt;Assets&lt;/big&gt;&lt;br /&gt;&lt;br /&gt;Both versions use the same Image file&lt;br /&gt;&lt;br /&gt;&lt;img src="https://sites.google.com/site/ethicsofmadness/html5-canvas-vs-flex-tutorials/jsplatformer1/jsplatformer1-smiley.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;big&gt;HTML5 Canvas&lt;/big&gt;&lt;br /&gt;&lt;br /&gt;Here we have the html and javascript files that go together.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/ethicsofmadness/html5-canvas-vs-flex-tutorials/jsplatformer1/canvas/jsplatformer-html"&gt;jsplatformer.html&lt;/a&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/ethicsofmadness/html5-canvas-vs-flex-tutorials/jsplatformer1/canvas/jsplatformer-js"&gt;jsplatformer.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;canvas id="canvas" width="640" height="480"&gt;&gt;&lt;br /&gt;&lt;p&gt;Your browser doesn't support the canvas element.&lt;/p&gt;&lt;/canvas&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="https://sites.google.com/site/ethicsofmadness/html5-canvas-vs-flex-tutorials/jsplatformer1/canvas/jsplatformer.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Next, figuring out the Flash posting....&lt;br /&gt;&lt;br /&gt;&lt;big&gt;Flex&lt;/big&gt;&lt;br /&gt;&lt;br /&gt;Here we have the mxml file that is used to produce the swf and the actionscript file that it references for the actual 'game' logic.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/ethicsofmadness/html5-canvas-vs-flex-tutorials/jsplatformer1/flex/simple1-mxml"&gt;Simple1.mxml&lt;/a&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/ethicsofmadness/html5-canvas-vs-flex-tutorials/jsplatformer1/flex/simplecanvas-as"&gt;SimpleCanvas.as&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object&gt;     &lt;param name="movie" value="Simple1.swf"&gt;&lt;embed src="https://sites.google.com/site/ethicsofmadness/html5-canvas-vs-flex-tutorials/jsplatformer1/flex/Simple1.swf" width="640" height="480"&gt;     &lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-8639863852489899089?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/8639863852489899089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=8639863852489899089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/8639863852489899089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/8639863852489899089'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/12/jsplatformer-part-1-report.html' title='jsplatformer Part 1 - Figuring out Links'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-1497580630352231858</id><published>2010-11-29T17:15:00.000-08:00</published><updated>2010-11-29T17:16:11.260-08:00</updated><title type='text'>A danger of hyped releases.</title><content type='html'>Taking a break from the tutorials for a different kind of post.  Ok, in reality I am on the train and have discovered tutorials written for 'web' languages often are heavily dependent on having an internet connection and getting access to API documentation offline is kinda sucky.. so anyway!  This is not going to be one my more coherent posts since, well, trains are not the most distraction free environments, but let us see what I come up with.&lt;br /&gt;&lt;br /&gt;I have no idea how universally this applies, but I have noticed a recurring pattern in when I tend to stop playing games.  Often games that have an update cycle will, from time to time, move from 'little' updates to something 'big'.  This big set of changes will often be hyped and talked about for months with speculation about which features will make it in and how they will work.&lt;br /&gt;&lt;br /&gt;Now, one of the problems with speculation.. what gets implemented will never live up to people's imaginations.  Often the developers will have the same basic ideas but discover that they did not have the time to implement them or the balance could not be worked out or the feature would simply consume too many resources to execute.&lt;br /&gt;&lt;br /&gt;This results in a highly anticipated expansion that, for many, is not as good as they hoped.  Now, when it comes out, you usually have plenty of people happy with it anyway and many pointing out that people should not complain (which ends up just making the complainers more annoyed… trivializing feedback is rarely a good way to silence it).&lt;br /&gt;&lt;br /&gt;So here is what happens with people like me at least.  Usually by the time a major update is in the works current features are a little stale, so the hype serves as a reason to 'stick around'…. I tend to get wrapped up in the discussions about features, sometimes even logging on to test servers to get a taste of how things might start panning out.  I can see which features are making it in (sometimes, depends on the game and openness of testing) but hold out hope that 'awesome' features make it in.  Here is one of the initial problems… I tend to care about features many other gamers do not… I am not a big 'graphics, combat, and scores' person, which is what most developers cater to… so features I am looking forward to usually get cut in order to get those in.&lt;br /&gt;&lt;br /&gt;So I walk away with that initial disappointment.. 'skipped over again'.  This was a big problem with EVE, every cycle they promises interesting industrial content but it always got pushed off for combat type stuff.  When updates are frequent this is not a big issue, but when updates are big and infrequent the next cycle feels very far off, usually interrupted by at least a cycle of working out bugs related to the new features.  Thus, disappointment combined with a feeling of hope being a long way off, results in stopping playing.&lt;br /&gt;&lt;br /&gt;Minecraft is my current example.  Big halloween update that took months (when updates used to be weakly) that ended up containing nothing of real interest.. mostly things related to fighting (which is odd since it kinda sucks as a FPS) and making things more 'hard core' for the score-oriented people.  I played it maybe a week after that and just.. sorta… stopped.&lt;br /&gt;&lt;br /&gt;Again, I am not sure how universal the lesson is, but the one I take away from this is one should stick to small, frequent updates rather then highly publicized major updates, at least from the perspective of keeping existing players.  I think one of the reasons companies tend to like these big updates is they tend to have marquee value.. something big and different to coax in new players or get older ones to return.  For minecraft this makes a lot of sense since it is a 'pay once' game.. for EVE I am less sure since the game depends on keeping players over a long haul.  So I guess ultimately it will come down to what the purpose of the update….. gaining new players or keeping an existing community happy.&lt;br /&gt;&lt;br /&gt;I think.. I think with games like EVE we are seeing a bit of a problem with business models.  Even being a fairly seasoned company at this point, subscription games are still a fairly new area that 'conventional wisdom'  is still being sorted out.   Even as their internal teams figure things out they will have a constant influx of marketers and executives that adjust even slower, and as more jobs are on the line innovation and risk taking tends to decrease.  &lt;br /&gt;&lt;br /&gt;I think this is something that a lot of these 'Facebook' and similar games have started to figure out since they have less bureaucratic overhead and thus can adapt quicker.  As I watch those games (and older ones like pardus), updates tend to be small and fairly frequent, which I think is one of the reasons they tend to have pretty good retention relative to their complexity.  The biggest problem they have is people burning through all the content quickly and leaving, which could be fixed by having a larger team and keeping updates coming.&lt;br /&gt;&lt;br /&gt;And now I am pretty much out of battery and track, so this seems like a good place to wrap up.&lt;br /&gt;&lt;br /&gt;*humms happily* ask not for whom the mp3, may toll it tolls for thee…. your doomed the moment I cease to sing….&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-1497580630352231858?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/1497580630352231858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=1497580630352231858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/1497580630352231858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/1497580630352231858'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/11/danger-of-hyped-releases.html' title='A danger of hyped releases.'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-4647282845375643863</id><published>2010-11-26T11:17:00.000-08:00</published><updated>2010-11-26T12:13:06.183-08:00</updated><title type='text'>jsplatformer Part 1</title><content type='html'>Ok! First part of this experiment.  For this piece I will use &lt;a href="http://www.brighthub.com/internet/web-development/articles/38744.aspx#ixzz16Pz0K1nP"&gt;Drawing an Image to the Canvas with JavaScript&lt;/a&gt;.  Let me also take a moment to mention how much I detest those sites that use javascript to alter the text you try to copy out of their page.  Creepy.&lt;br /&gt;&lt;br /&gt;Anyway.  This tutorial goes over the basic task of displaying an image to the page and then bouncing it around.  I decided to start with this since it was (a) simple and (b) I already know some flex and believe I can accomplish the same task.&lt;br /&gt;&lt;br /&gt;Before I start going over my solution, I want to talk a little about tools.  I have never felt it was fair to ask people first learning a new technology to also learn a new IDE at the same time, which Flex tutorials are rather heavy on.  So for this I stuck to very basic tools.&lt;br /&gt;&lt;br /&gt;For Canvas, I used vim and Safari.   For Flex I used vim, Safari, mxmlc (the Flex command line compiler) and Adobe's stand alone player.&lt;br /&gt;&lt;br /&gt;Secondly, I want to make it clear, I am a newbie to both these technologies.  I am sure there are better ways to do things, built in tools, add ons that make things easier, etc..... I do not know any of these things yet.  I am still figuring out what things are needed to accomplish a task and which things are simply things some tutorial author did that LOOK necessary but are not.&lt;br /&gt;&lt;br /&gt;Now, on to the actual stuff I wrote.  Obviously for Canvas I followed the tutorial pretty closely so the files are only a little different from what was on the page.  Sadly I am still working out how to post code to blogger, so the formatting is less then stellar.&lt;br /&gt;&lt;br /&gt;For canvas I had three files (including the image)&lt;br /&gt;&lt;br /&gt;jsplatformer.html&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html lang="en"&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;title&amp;gt;JavaScript Platformer 1&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;script type="text/javascript" src="jsplatformer1.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;canvas id="canvas" width="640" height="480"&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;p&amp;gt;Your browser does not support the canvas element.&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/canvas&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;jsplatformer.js&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// target frames per second&lt;br /&gt;const FPS = 30;&lt;br /&gt;var x = 0;&lt;br /&gt;var y = 0;&lt;br /&gt;var xDirection = 1;&lt;br /&gt;var yDirection = 1;&lt;br /&gt;var image = null;&lt;br /&gt;var canvas = null;&lt;br /&gt;var context2D = null;&lt;br /&gt;&lt;br /&gt;window.onload = init;&lt;br /&gt;&lt;br /&gt;function init()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;image = new Image();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;image.src = "file:/./jsplatformer1-smiley.jpg";&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;canvas = document.getElementById('canvas');&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;context2D = canvas.getContext('2d');&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;setInterval(draw, 1000 / FPS);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function draw()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;context2D.clearRect(0, 0, canvas.width, canvas.height);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;context2D.drawImage(image, x, y);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;x += 1 * xDirection;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;y += 1 * yDirection;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (x &amp;gt;= 450)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;x = 450;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;xDirection = -1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;else if (x &amp;lt;= 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;x = 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;xDirection = 1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (y &amp;gt;= 250)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;y = 250;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;yDirection = -1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;else if (y &amp;lt;= 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;y = 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;yDirection = 1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;For Flex, there were a few more files but not many:&lt;br /&gt;&lt;br /&gt;Simple1.html&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html lang="en"&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;title&amp;gt;JavaScript Platformer 1&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;object&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;param name="movie" value="Simple1.swf"&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;embed src="Simple1.swf" width="640" height="480"&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/embed&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/object&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Simple1.mxml&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&lt;br /&gt;&amp;#160;&amp;#160;styleName = "plain"&lt;br /&gt; xmlns="source.*" &lt;br /&gt; layout="absolute"&lt;br /&gt; frameRate="30"&lt;br /&gt; width="640"&lt;br /&gt; height="480"&lt;br /&gt; creationComplete="initApp()"&lt;br /&gt; enterFrame="enterFrame(event)"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;mx:Script&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;![CDATA[&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public function initApp():void&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;canvas.init();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public function enterFrame(event:Event):void&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;canvas.onTick();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt; &amp;lt;/mx:Script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;lt;SimpleCanvas id="canvas" width="100%" height="100%" themeColor="#ffffff" /&amp;gt;&lt;br /&gt;&amp;lt;/mx:Application&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Simple.as&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package source {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;import mx.core.UIComponent&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;import flash.display.Bitmap&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class SimpleCanvas extends UIComponent &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;        [Embed(source = '../assets/jsplatformer1-smiley.jpg')]&lt;br /&gt;        public static const SmileImage:Class        &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private var SmileBmp:Bitmap = null;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private var xD:int = 1&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private var yD:int = 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public function init():void &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SmileBmp = new SmileImage()&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;addChild( SmileBmp )&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public function onTick():void&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (SmileBmp == null)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SmileBmp.x += 1*xD;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SmileBmp.y += 1*yD;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (SmileBmp.x + SmileBmp.width &amp;gt;= width)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;xD = -1&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}else if (SmileBmp.x &amp;lt;= 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;xD = 1&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (SmileBmp.y + SmileBmp.height &amp;gt;= height)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;yD = -1&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}else if (SmileBmp.y &amp;lt;= 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;yD = 1&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ok, enough of the raw code, onto some comments.  The core logic is the same, which is not surprising.  The differences were more in feel.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Simplicity:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Canvas won when it came to simplicity.  2 code files to Flex's 3, and information was not as duplicated (for instance, the size of the Flex frame had to be put in multiple locations).  Canvas was much more 'start up and go', one had to worry much less about how they were going to do things or how to structure their project.&lt;br /&gt;&lt;br /&gt;This also gets into my chief complaint about Flex so far.  Flex has many ways to do the same things,.. it feels like a language that has been extended over the years in order to accommodate programmers rather then programmers adjusting to it.  This kind of flexibility is good for development, but it makes life for the newbie difficult.  I went through 3 different flex tutorials, each one did things sufficiently differently that lessons from one could not easily be applied in others, and figuring out why something did not work was difficult because only a few comments might discuss the way that particular author was doing things.&lt;br /&gt;&lt;br /&gt;For instance, loading and image.  Canvas seemed to have a way to do it, Image() and then set the source.&lt;br /&gt;&lt;br /&gt;Flex, first you have 3 different ways to embed an image, plus there were people talking about a 'loader'  API you could also use.  Images could be (and in different examples, were) loaded as Bitmap, Sprite, FlexSprite, FlexBitmap, UIComponent, BitmapData, or MovieClip.  In various examples they might be added directly to the canvas or immediately embedded in a temp container which in turn was added, with no real explanation of why people were doing this.&lt;br /&gt;&lt;br /&gt;There is also the issue of mxml vs as.  mxml is for layout and UI, as is for logic.. so you have two different syntaxes for the same functionality, with the intent being the mxml syntax makes layout easier while actionscript makes logic easier, but at first glace figuring out why you have to completely different syntaxes for the same language can be a bit confusing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Explicitness:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Flex was better about explicitness.   With Canvas, I guess the whole js file was either converted to a class or processed as some kind of procedural program where it looks for key symbols and links to them.  This 'by convention' approach makes things simple, but feels a bit like a big gray room where you are not sure what else might be in there.  Flex had things contained within a nice clean class, everything outside language keywords had to be imported (so the split between API and language was much clearer), and entry functions were explicitly defined in the mxml file.  You got a much better sense for how things fit into a larger framework.&lt;br /&gt;&lt;br /&gt;I admit, I like Flex's explicitness.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Integration:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This one is a good example of 'what do you want to use it for?'.  Flex produces self contained applications, either for embedding in a web page or running as a desktop application.  All interaction with a larger system probably needs to be done via APIs to things like XMLRPC or sockets.  However, Flex has no knowledge of the page in which it exists.&lt;br /&gt;&lt;br /&gt;Canvas is integrated into the web page, so you can use the main html page for layout and can pass information (like buttons and forms) from the page to the Canvas.  I am guessing this also means the Cavans probably has access to other page information so you can adjust what is going on inside the Canvas according to the page, which might contain other technologies like Django linking to a database.  &lt;br /&gt;&lt;br /&gt;So Canvas feels like a dedicated web technology designed to work with other web technologies... Flex feels more like Java did... it can be run through websites, but is not really 'part' of them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Asset Management&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Canvas dynamically loads its assets, including pulling them from remote (and remotely managed) locations, and it does this very naturally.  Since it is not 'compiled' till someone views the page it can delay as long as possible.&lt;br /&gt;&lt;br /&gt;Flex needs to pre-embed images into it's self contained file, so it needs to know ahead of time what each image will be (and seems to convert each asset to a named class?).  This brings up the concern of 'what if you do not know till compile time?'... do you need to name EVERY image or is there some way to grab an entire directory?  I am guessing there is some kind of html API within Flex for grabbing content off the web and displaying it, but I doubt it is as natural.&lt;br /&gt;&lt;br /&gt;So I have concerns about Flex, but these feel like 'newbie/easy' concerns that have solutions later on.   Again, Canvas's integration with the rest of a site gives it some clear advantages if you need that kind of structure.&lt;br /&gt;&lt;br /&gt;So, this was the very first attempt to compare them.  Next up... jsplatformer Part 2!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-4647282845375643863?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/4647282845375643863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=4647282845375643863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/4647282845375643863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/4647282845375643863'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/11/jsplatformer-part-1.html' title='jsplatformer Part 1'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-2618177328073218081</id><published>2010-11-24T19:33:00.000-08:00</published><updated>2010-11-24T19:56:14.875-08:00</updated><title type='text'>Flex vs HTML5 Canvas</title><content type='html'>Looking back at this nearly abandoned blog, I can see that I have talked off and on about sitting down to learn Flex.  In my defense, I actually have learned bits and pieces of it so it has not been all talk at least ^_^&lt;br /&gt;&lt;br /&gt;The point of this post though... which is better to learn?  When I ask people this, I tend to get two basic answers.. "Learn Flash" or "Learn Canvas".  No one ever seems to recommend Flex, which oddly enough kinda endears it to me.&lt;br /&gt;&lt;br /&gt;Flex/Flash seem to have the current mindshare... lots of people using them, lots of tools built around them, lots of help advice out there.   On the other hand the are closed source, and Flex suffers from not just duplicate APIs, but finding Flex specific help (as opposed to Flash), esp outside a specific IDE, is hard.   Flex also has AIR and a standard player on every machine.&lt;br /&gt;&lt;br /&gt;Canvas is new, it is not really standardized (and each browser has its own implementation), a lot of stuff is still missing, help is infrequent, and the APIs are not very mature.&lt;br /&gt;&lt;br /&gt;Now, I am not learning this for a job or any particular project.. and I have no time scale... so why not learn both?&lt;br /&gt;&lt;br /&gt;For this experiment I have choosen two online tutorials, one for each language..&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.brighthub.com/internet/web-development/articles/11010.aspx"&gt;Matthew Casperson's FlexFighters&lt;/a&gt; and.. well... &lt;a href="http://www.brighthub.com/internet/web-development/articles/38364.aspx"&gt;Matthew Casperson's jsplatformer&lt;/a&gt;.  Hrm, only while typing this did I notice they were by the same person.  That should make this more interesting.&lt;br /&gt;&lt;br /&gt;Anyway, the idea will be to attempt both tutorials in both languages and get a feel for how the two languages solve the same problems.    I guess we will see how far I get.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-2618177328073218081?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/2618177328073218081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=2618177328073218081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2618177328073218081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2618177328073218081'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/11/flex-vs-html5-canvas.html' title='Flex vs HTML5 Canvas'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-6564044646169755712</id><published>2010-08-16T20:29:00.000-07:00</published><updated>2010-10-12T06:45:57.855-07:00</updated><title type='text'>Freeman's Mind</title><content type='html'>A recurring pattern of video game/movie crossovers, I believe we can generally agree, is that they tend to be of rather poor quality.  &lt;br /&gt;&lt;br /&gt;Movie writers struggle how to shove video game plots into their traditional 'movies must have X, Y and Z to be successful' templates.. &lt;br /&gt;&lt;br /&gt;Video game producers end taking overused game mechanics, dropping in movie related assets, and making a game with no real innovation and unusually limited content.&lt;br /&gt;&lt;br /&gt;End result, cross overs almost always fail... to a significant degree this is probably because movie people are making movies and game developers are making games.. neither ever seem to know enough about the other medium to make the transition.&lt;br /&gt;&lt;br /&gt;On an amateur level though this might be changing.... via machinima....&lt;br /&gt;&lt;br /&gt;Take Freeman's Mind by Accursed Farms. Video game based (Half-Life 1)... in fact, the whole series could almost be a person simply playing the game.. no additional mechanics, no additional graphics.   It is currently on episode 29 (with each episode being between 5 and 10 minutes long), so all put together it is movie length.... and importantly, it is entertaining.  With nothing more then the video game there is sufficient monologue and plot to be interesting.  Granted, there is no love interest.. no comedic sidekick,.... none of the elements screenwriters seem to think a movie 'needs'.&lt;br /&gt;&lt;br /&gt;Rooster Teeth's 'Red vs Blue' is another example.   It has gone on for 7 seasons now and has a massive following.  It is more complex then Freeman's mind, requiring an actual plotline separate from the video game, but it is still a video game based series that translated well and people actually enjoy.&lt;br /&gt;&lt;br /&gt;I wonder what would happen if these machinima outfits actually had a real budget and professional voice actors (or even actors+sets+etc).  Even a small budget....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-6564044646169755712?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/6564044646169755712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/6564044646169755712'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/08/freemans-mind.html' title='Freeman&apos;s Mind'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-2132404363166607518</id><published>2010-05-07T11:30:00.000-07:00</published><updated>2010-05-07T11:51:17.526-07:00</updated><title type='text'>Alcan Highway</title><content type='html'>It is not often I run into such a visible example of what I would like to see in a 4X game, but I think this documentry on The History Channel shows one:&lt;br /&gt;&lt;br /&gt;&lt;a href=http://www.history.com/shows/modern-marvels/videos/the-alcan-highway#the-alcan-highway&gt;"Modern Marvels - The Alcan Highway"&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So what does this have to do with 4X design?   Getting away from the specific engineering of the project, it has a number of interesting logistical and strategic elements that I would love to see come out naturally in a game.  Namely:&lt;br /&gt;&lt;br /&gt;At the time, Japan was a major force in the Pacific Rim, but only in terms of naval force.  There were worries that they would attack the US mainland with the major worry being Alaska.  Alaska was easily accessible, poorly defended, and geographically isolated from the mainland.  The only way it could be reenforced would be via moving troops in ships, at which point the troop carriers would have to content with the Japanese Navy, which could probably stall them long enough to dig in.  So here we have element one: strategic footholds that getting reinforcements to is difficult (most 4X games treat travel as very quick).&lt;br /&gt;&lt;br /&gt;So the US&amp;Canada decided to build a highway that ran from the lower US, past several Canadian airfields, to Alaska.  This was a major project, not something you can do over and over.  So the scale is another issue, 4X games, it only takes so long before  you can tile the entire map with roads or rails, so the cost of infrastructure tends to be high early on and dirt cheap later on.   I am not sure how to offset that, but something needs to scale the costs so that major strategic builds do not end up tiling the whole map.&lt;br /&gt;&lt;br /&gt;Lastly, in order to actually run such a massive project, it was cheaper to build an entire associated oil infrastructure, including wells, refining, and distribution, right off the road construction.   This would be another interesting element, logistics where getting resources to massive projects other then 'use 50 shields' is a real consideration.&lt;br /&gt;&lt;br /&gt;So ideas ideas ^_^&lt;br /&gt;&lt;br /&gt;I think this would also be a good example of how a 4X game could be moved into an MMO type domain.   Logistics has the potential to be quite complex, a game unto it'self.   In EVE, even though it was painful and boring, people still would play pure logistics roles for years at a time.  Imagine what it would be like if someone built a game where logistics was interesting rather then tedious?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-2132404363166607518?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/2132404363166607518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=2132404363166607518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2132404363166607518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2132404363166607518'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/05/alcan-highway.html' title='Alcan Highway'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-6985827739728118129</id><published>2010-05-05T08:46:00.000-07:00</published><updated>2010-05-05T08:53:08.848-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EVE'/><title type='text'>EVE</title><content type='html'>For some reason when I tried to title this post, blogger tried to autofill 'Every Kiss....'.  I have no idea where that came from.&lt;br /&gt;&lt;br /&gt;I have decided (yeah, for the nth time) I am done with EVE.  I have been playing less and less, and EVE is a bad game to set down and come back to.  The OSX client has been getting progressively worse (and I wager in the next expansion it will get even slower), the exploration interface is borked, etc etc.&lt;br /&gt;&lt;br /&gt;What did in me in though was a random wardec from an alliance with half a dozen corps in it.  Wiped out my staging platform which contained some ore and my freighter.  It is a recoverable loss, but recovery just does not sound fun this time.  It took ages to get to the point where mining Bar was less tedious because of the platform, and going back to a more tedious task just to get back to being less tedious, is not appealing right now.&lt;br /&gt;&lt;br /&gt;I think one of the other blog entries from that contest pointed out, in terms of play, EVE really sucks.  The whole package can be fun because the final rewards give you a thrill, but pretty much all the gameplay elements, when taken in isolation, are not fun to actually do.&lt;br /&gt;&lt;br /&gt;I always felt that the wardec mechanic was a bad one, and a bad mechanic just kicked over my sandcastle.  Even worse, it worked because I do not get a chance to log in every day, which is frustrating.    So I have deleted my apps and canceled my accounts.&lt;br /&gt;&lt;br /&gt;Not a rage quit, no carebare tears, just sorta, done.&lt;br /&gt;&lt;br /&gt;And with that, I am probably done with multiplayer games for the foreseeable future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-6985827739728118129?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/6985827739728118129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=6985827739728118129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/6985827739728118129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/6985827739728118129'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/05/eve.html' title='EVE'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-6454766294413014635</id><published>2010-04-30T12:08:00.001-07:00</published><updated>2010-04-30T12:17:08.488-07:00</updated><title type='text'>OSX vs Windows as a Game</title><content type='html'>A quick follow up (or at least related) thought from the gender post the other day....&lt;br /&gt;&lt;br /&gt;One of the things that comes up when talking about gender inclusiveness in game design in the concept of 'dominating the technology'.  Fighting and beating the technology the game is embedded in as opposed to playing and beating the game itself.  This usually takes the form of figuring out hidden mechanics and such.&lt;br /&gt;&lt;br /&gt;Then today I saw yet another 'Mac vs PC' argument, this time on a game site.  I have noticed that tech males and male gamers seem especially venomous towards OSX over the years and wondered why this is.  &lt;br /&gt;&lt;br /&gt;So I started thinking about the OS as a type of game.  The OS provides the rules and mechanics, individual apps and capabilities provide the actual gameplay.  Think of the OS as the engine and games as the assets.  If one goes by this analogy, OSX could be seen as 'too easy' by males.  There are not many secrets to figure out, nothing complicated to fight, no real way to distinguish the hardcore from the softcore... you take your app, drag it across, and run.  One does not fight with OSX, one uses it as a tool.  There is nothing to figure out.&lt;br /&gt;&lt;br /&gt;Windows on the other hand, is dripping with secret knowledge and requires constant exploration and fighting.  Windows is 'challenging', there is always something to show off so people know that you have 'found tricks' in the OS  that make the gameplay easier, similar to, say, the bunny-hop in HL.  Playing games in windows is similar to figuring out what the limits of the physics engine or the meta behavior of the AIs in a FPS,.. sure you can just play the game, but to be 'good' you need to understand the underlying engine and play against &lt;span style="font-weight:bold;"&gt;it&lt;/span&gt; too.&lt;br /&gt;&lt;br /&gt;I wonder if there is an actual pattern here, or if it is pure conjecture?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-6454766294413014635?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/6454766294413014635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=6454766294413014635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/6454766294413014635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/6454766294413014635'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/04/osx-vs-windows-as-game.html' title='OSX vs Windows as a Game'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-1518672693880999402</id><published>2010-04-26T09:40:00.000-07:00</published><updated>2010-04-26T09:54:42.701-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YRO'/><title type='text'>Entertainment Merchants Association (EMA) v. Schwarzenegger</title><content type='html'>The topic has been so heavily discussed that there it not much I can really add myself.....&lt;br /&gt;&lt;br /&gt;Apparently the Supreme Court has &lt;a href=http://www.gamepolitics.com/2010/04/26/breaking-scotus-will-review-schwarzenegger-v-ema-update-2&gt;agreed to hear the case&lt;/a&gt;, which has both great potential for good, and disaster.&lt;br /&gt;&lt;br /&gt;On the one hand, if they rule in favor of the EMA, this may FINALLY put to bed the myriad of laws politicians have been passing over the last decade attempting to regulate game content and sales.  These laws have universally been shot down by the courts, but have never made it to the highest court in the land, and having an actual SC decision might dampen their enthusiasm for illegal laws.&lt;br /&gt;&lt;br /&gt;On the other hand, if they rule in favor of Schwarzenegger (which given John Paul Stevens's retirement and some of the Bush appointees, is a possibility), it would relegate an entire class of communication, anything 'interactive', to a second class status that does not enjoy 1st amendment protections.  It would be the equivalent of, in the early part of the century, ruling that movies were not protected because moving pictures are not expressive art (which was argued at the time).&lt;br /&gt;&lt;br /&gt;So in many ways, this is the big one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-1518672693880999402?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/1518672693880999402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=1518672693880999402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/1518672693880999402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/1518672693880999402'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/04/entertainment-merchants-association-ema.html' title='Entertainment Merchants Association (EMA) v. Schwarzenegger'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-8436985499543689590</id><published>2010-04-25T19:06:00.000-07:00</published><updated>2010-04-25T21:45:17.344-07:00</updated><title type='text'>Gender Inclusiveness in CCP's EVE Online</title><content type='html'>I have been looking for a reason to start posting again, and &lt;a href="http://www.crazykinux.com/2010/04/eve-blog-banter-special-edition-ladies.html"&gt;The EVE Blog Banter Special Edition: The Ladies of New Eden &lt;/a&gt; seemed like a good start, so I hammered out a quick response:&lt;br /&gt;&lt;h2&gt;Background:&lt;/h2&gt;&lt;br /&gt;Gender inclusive game design.  It is something the game industry has been struggling with from day one.  Game design in general suffers from an institutional problem.  A certain type of male was generally playing games in the 80s and 90s; they grew up, and they founded companies, and they made more games like what they wanted to play.  They made those games for people like themselves, and considered a game a success based off that demographic.  Males, 15-35 years of age.  The industry perceives these as the only people who really buy games, thus they make games for these people, so only they buy the games.&lt;br /&gt;&lt;br /&gt;Every once in a while the industry tries to reach out to female gamers.  Generally when someone tries to pitch such a project they are told that ‘girls do not buy games’, and if they do get funding (usually a small amount) and marketing (usually a small amount), the project ends up going poorly.  Males are put in charge of critical parts and they try to build games based off what ‘they’ think girls want.   The result tends to be dull games that no one wants to play, which is then pointed to as further proof that girls do not play games, and they go back to developing games for 15-35 year old males.  Rinse lather repeat.&lt;br /&gt;&lt;br /&gt;Now, the industry is up against some real problems.  For starters, games tend to be a big piece of how young males socialize.  They provide a common point of connection that they can discuss and use to position themselves within their peer group.  This happens because, well, lots of males play the games, so you have a chicken and egg problem.  Males connect to males because other males play the games.  Females do not build these connections because not enough of their peers are playing.  You need a critical mass to really start selling games.&lt;br /&gt;&lt;br /&gt;Critical mass aside, you have another problem.  Little boys are encouraged to play with technology.  Parents buy them mechanical toys, buy them computers, praise them for solving technical problems.   On the other hand, girls are given social toys, they get the hand-me-down computers, and most importantly, they are taught to interact with technology as a tool to be used for developing other skills.  They are not encouraged or taught to ‘play’ or challenge the technology, just use it.  This has effects down the road when they get into games.  We will touch more on this later.&lt;br /&gt;&lt;br /&gt;The last institutional problem is pure design assumption.  There was a study years back where they asked children (male and female) to make a game.  They separated the people into 3 different groupings.  One grouping was told to design games for little boys.  One grouping was told to design games for little girls.  The third grouping was told to design games for ‘children.’  What surprised the researchers was that the games designed for little boys and ‘children’ in general were structured the same, while the games designed for little girls were structured differently.   What did this show?  It showed that there is a male-normative effect going on; unless a group specifically is told to think in terms of girls, they defaulted to thinking in terms of boy behavior.   The lesson to pull from is that thinking ‘we are going to design games for people, not males!’ is not good enough.  When developers think this, they end up designing games for males.&lt;br /&gt;&lt;br /&gt;The main thing to pull from this background is that making a game for female players is not a trivial matter.   It is not just a game problem, or a company problem, or even an industry wide problem.  Anyone trying to address this is up against such fundamental problems as institutionalized sexism and the very way that girls are raised by society.   It can be done, but do not expect huge returns for a few minor tweaks and a couple pink bows.&lt;br /&gt;&lt;br /&gt;A secondary thing to keep in mind is that people vary a great deal.  In making a game that is more inclusive to females, you also open it up to more males.  Done right this does not have to make a game any less fun, or even less safe.  Women enjoy the same killing and bloodlust as the guys, it just needs to be structured a little differently.&lt;br /&gt;&lt;h2&gt;EVE&lt;/h2&gt;&lt;br /&gt;In a way, it actually comes as a bit of a surprise that EVE turned out with the gender skew it did.  In many ways, EVE is the spiritual successor to Ultima Online. UO was credited with being one of the more inclusive games of its time.  The RPGs that it originated had significant female followings due to their story, character development, and rather importantly, multiple solutions for how to solve problems.  UO reached an unheard of female population of 15% during a time when girls in general probably made up, at most, 1% of the gamer population.   EVE should have built off this success and was positioned to do something significant.  CCP did do something significant with EVE, no argument there, but when it comes to building a game that girls can get into, they did not just fall on their face;  they fell on their sword and disemboweled themselves.  5%? Today? That is beyond abysmal, considering current statistics are between 40 and 60%.&lt;br /&gt;&lt;br /&gt;So what can be done?  Even the simple answers might not be easy.&lt;br /&gt;&lt;h2&gt;Employment&lt;/h2&gt;&lt;br /&gt;The biggest way to improve things is not a feature, it is not a bell or a whistle, it is not a change in the game at all.  It is a change in the company.  Look at any game that has a good balance of male and female players and you will find one consistent feature in the company: women in positions of power.   Women in the development teams, women in the Q&amp;amp;A teams, women in management.  Not token women around so you can say you have women in your company, not small quiet things that sit there and do their job, and not ‘one of they guys’ women.  Women with real influence on the path a game’s development takes, women who are listened to, women who make decisions.  Also of importance, they have a significant number of women so they get a variety of perspectives (since, as should be obvious, not all females are the same), enough to break up the group-think and have them be less easily bowled over by the ‘prevailing wisdom.’&lt;br /&gt;&lt;br /&gt;Men who sit around and try to design games based off what they think women want rarely develop games that actually match what women want to play.  While human resource issues are considered rather boring and unsexy to developers, if you want games that attract significant numbers of female players, long term, this is the only way to get there.&lt;br /&gt;&lt;h2&gt;EVE specific issues.&lt;/h2&gt;&lt;br /&gt;Despite the overwhelming importance of changes in corporate culture, there are some technological changes specific to EVE that potentially could make the game more inclusive.   Even with a shift in corporate culture, eventually it has to come down to changes in actual mechanics.&lt;br /&gt;&lt;h2&gt;Fighting the Technology&lt;/h2&gt;&lt;br /&gt;Earlier I spoke a little about how little boys are taught to compete with (and ideally, dominate) technology, while girls are taught to use it for other goals.  One of the ways this comes out in game design is that developers build games so that the mechanics have to be explored.  They expect players to get a kick out of finding hidden features, explore the mechanics, find new ways to do things.  This is often touted as ‘developing skill,’ but often it is a matter of figuring out how the game actually works as part of play.&lt;br /&gt;&lt;br /&gt;Female players tend to resonate with this poorly.  Rather then being something wonderful to explore, it is pure frustration with no real reward other then getting to help counter advantages other players might have.  Fighting games are a classic example of this effect going on.  Fighting games are built with lots of hidden moves that you find out about via either (a) randomly bashing the controller or (b) leaving the game to look them up on external sites.    This has resulted in many frustrated female players that quickly discover that even if they are good at the game, ‘secret knowledge’ that male players tend to pick up render them uncompetitive and the process of getting this information is just not fun, so they stop playing.&lt;br /&gt;&lt;br /&gt;This is actually one of the easier things to address; the solution is pretty well documented actually.  Documentation.  Extensive in-game help and new player experience.    There is a general assumption that wikis and external sites fill this role, but they do not do it well from this perspective. Female players, especially early on, are more likely to get frustrated and quit a game then go to external forums/wikis to find information on how to play the game.   Often it is suggested that people should just ask in newbie chat, or go get help, but history has shown that female players are simply less willing to do this (again, this gets back to childhood training).  This also gets into our next issue, in-game behavior.&lt;br /&gt;&lt;h2&gt;Behavior&lt;/h2&gt;&lt;br /&gt;There is not much CCP can do about this one, but it is a huge issue.  In the late 90s there was a research study done involving student access to educational material at the University of Phoenix.  They looked at educational forums that were linked to classes and how males and females interacted on them.  In theory both groups had equal access to the resources and equal reason to be there, and it was assumed that gender access would even out pretty quickly.  It did not.  In fact the result were pretty sharp.&lt;br /&gt;&lt;br /&gt;Females tended to structure their posts around empathy.  They tried to build connections  with the other students.  Male posters, on the other hand, used harsher language filled with put downs and similar attempts to denigrate other posters.  At first the female students attempted to interject into the conversations but were quickly ‘slapped down’ and pushed out of the thread.  The few females who did keep participating got an even worse fate... they tended to be ostracized by both the males and the females, resulting in being cliqued out of the resources.   Both players and developers tend to underestimate just how much of effect this ‘locker-room banter’ has on female players.  It is not even a case of needing a thicker skin; anyone who has watched female argument can see how vicious they can get. It is a case of how enjoyable the behavior is.  Males (or at least, many males) get a kick out of this type of behavior; females on the other hand find it unpleasant and intimidating.  Abuse is easy to put up when you enjoy it, but it is game breaking when you do not.  EVE, unfortunately, strongly encourages abusive behavior.   This brings us to….&lt;br /&gt;&lt;h2&gt;Kill Stats&lt;/h2&gt;&lt;br /&gt;It is assumed boys love stats.  An important stat in EVE is the ability to compete indirectly via ranking oneself against other players in raw numbers like number of kills. This is a common element in many on-line games, and it tends to have a single recurring result; it drives away female players.  On the one hand it is a ‘reward’ they tend to not care that much about.  On the other hand, it tends to encourage male players to kill for no in-game reason.  Not only is it immersion breaking, but it encourages in-game harassment for no in-game benefit.  It is the currency of kicking over other people’s castles.  It gives positive feedback for actions that serve only to make the game less fun for other people.&lt;br /&gt;&lt;br /&gt;This gets into the entire issue of ‘why do we kill?’ in EVE.  In null there is conflict over territory, but only about 20% of the EVE population is playing that game.  In the rest of EVE, there is little in-game reason to PvP.  PvP is a sink; it is costly with little reward.  That small reward ensures that the people doing the PvP are going to do it for out of game rewards.  Changing this can make the game more inclusive right there.&lt;br /&gt;&lt;br /&gt;How?  Increase the cost of failure for the aggressor is one piece.  EVE’s PvP is structured around rewarding the aggressor by making it as cheap as possible for people seeking to kill to do so, while putting the costs on the victim.  The net result is resources leaving the game, but it is disproportionally on the victim rather then the attacker.  This sends a pretty clear message for what the player ‘should’ be doing, and taking wealth away from others just for the sake of hurting them tends not to be a female thing.The other piece is to increase the reward for the attacker to compensate for the higher cost.  A classic way to do this is allow the capturing of cargo or the salvage (retrieval of a complete, repairable ship) of ships.  This would encourage people to pirate for in-game reasons and spread the possible costs around so that a successful attacker gets a good in-game prize while a failing attacker gets a significant in-game penalty.  This mechanism would also increase (from effectively zero) the possible payoff to the victim since they could salvage the attacker’s ship.&lt;br /&gt;&lt;h2&gt;Conflict Resolution&lt;/h2&gt;&lt;br /&gt;This might sound like a PvE issue, but it applies to PvP too.   Outside null, there really is only one way to resolve a conflict: blow the person up.  It is often said that you can pay someone off (so extortion), but realistically since there is no contract mechanism is in place, paying someone off will rarely result in an actual resolution.  More often then not it will simply result in loss of ISK and a loss of your ship/goods/POS.&lt;br /&gt;&lt;br /&gt;Females (and many males) tend to prefer more then one way to resolve a situation.  Games with large female player bases tend to have ways to resolve a situation that do not involve killing.  They might involve sneaking past a monster, or distracting the guard with a decoy, or bribing an official to give you the widget that was going to go on the transport.&lt;br /&gt;&lt;br /&gt;On a PvE side, this could be accomplished via more varied missions...both missions with multiple solutions and missions where you are doing something non-combative like scanning people down or having to go remote-rep a ship that is damaged or under attack, or even having to run a blockade.&lt;br /&gt;&lt;br /&gt;On the PvP side this could be accomplished via a system where negotiation with players or corps has a legal (and enforced) effect in the game.  The game is too wide, and players policing players does not work when anyone can roll a new alt (or for that matter, have multiple alts waiting in the wings) at the drop of a hat.  Giving CONCORD the ability to enforce some contracts between player corps might give player corps some new ways to resolve conflicts.&lt;br /&gt;&lt;h2&gt;Null Lite&lt;/h2&gt;&lt;br /&gt;Null sec has a lot of potential for female players since it is player story driven.  It is the area of the game with the most social connection, most diplomacy, most room for really interacting with other players.   Player corps, the social unit of EVE, simply have too little meaning outside null sec.  For many players all they are good for is setting up a research POS, but come with the risk of wardec harassment.   Finding ways for player corps to be useful and relevant through all levels of the player experience would increase the social aspects of the early game and give it context.    At the moment, isolation tends to bring more rewards then working together.&lt;br /&gt;&lt;br /&gt;More types of anchor-able structures in high sec might help here.  Small corps setting up small bits of infrastructure that help the group beyond research would encourage these small groups of players working together.  This also opens up the ability for players to have some visual impact on the universe.  Null sec alliances have the ability to shape space, but outside that all players have are POSes with disconnected modules.  While EVE is hardly a decorating game, treating POSes as a decorating project could keep some players interested.&lt;br /&gt;&lt;br /&gt;There is also the issue of fleets.  Fleets are one of the early ways for players to work together and build connections.  Fleets have a problem though, they are all or nothing and require a significant amount of trust.  Fleeting with strangers (and thus, helping strangers) is dangerous since as soon as you ‘fleet’ you are a target with no CONCORD protection, which discourages players from working together.    The minor change of ‘fleeting does not remove CONCORD protection’ could have significant impact on strangers socializing in the game.&lt;br /&gt;&lt;h2&gt;Penalties - Learning Implants&lt;/h2&gt;&lt;br /&gt;One of the differences in how how males and females tend to play games is how they react to penalties for failure.   Games  that resonate with males usually include ‘death’ or other ‘return to start’ mechanisms while games that resonate well with females on the other hand tend to adopt a ‘prevent from advancement’ mechanism instead.  Failure either pushes you back or stops you from moving forward.  A somewhat abstract difference but it can have a significant impact on the game’s enjoyment for females.&lt;br /&gt;&lt;br /&gt;This is a hard thing to address in EVE since the game is built around the idea of ‘real loss’.  One of the reasons WoW does so well is the player risks so little when they fight, while in EVE they lose so much.  Insurance is usually brought in to mitigate the effect of loss in EVE, but it is debatable how much this really does for anyone other than the attacker.  For attackers this works very well; if they know they are going to attack they can plan well ahead, switch to a cheap implant clone, fly cheap ships, carry no cargo. &lt;br /&gt;&lt;br /&gt;For the defender insurance is not worth so much.  Defenders will generally be flying with normal implants (which control how quickly you advance in the game) and often have cargo.  Insurance does not cover implants, and does not cover cargo.   Cargo, being shipped, is meant to be lost, that makes sense.  With learning implants the defender generally has the choice of always flying with cheap implants or risk losing expensive ones in a random encounter they have no control over.  Loss with lack of control effects everyone, but it tends to especially hit home with female players.&lt;br /&gt;&lt;br /&gt;The solution to this is to make learning implants like SP, that simply stay with the character.   Players can still take risks with implants that impact the actual conflict, but the penalty for being attacked is decreased.&lt;br /&gt;&lt;h2&gt;Social elements that will not help.&lt;/h2&gt;&lt;br /&gt;There are a lot of ideas floating around based off what males think women want.    The most popular meme right now is that women want social games, and if you want women to play you need ‘social’ elements to the game.  Since EVE is already a very social oriented game and that does not seem to be ‘working’ people are focusing on some rather surface ideas about how women socialize and hoping that those ideas will help.  The two common examples are Incarna and EVEGate. &lt;br /&gt;&lt;br /&gt;In Incarna, people are assuming that girls need a ‘human like’ thing to relate to, so if you have human avatars in the game, women will feel more comfortable and thus flock to EVE.  The problem here is that, as described, Incarna does not really do much.  It is a place to hang out when you are station camped, a glorified net-meeting.  Unless there is some compelling game-like content in there that gives women something to DO in this new environment, most will not be impressed with it and seek out games that either do the pure-social aspect better (like Second Life) or have compelling avatar based content (like WoW).&lt;br /&gt;&lt;br /&gt;EVEGate on the other hand tries to be more ‘facebook’ like.  People have noticed that facebook games are popular, especially among women, so the theory goes that if EVE has a facebook like component to EVE that women will flock to it.   This is what we generally call ‘cargo-cult development’; trying to duplicate the success on something based off surface similarities with no real depth or understanding about why it was actually successful.&lt;br /&gt;&lt;h2&gt;Other resources&lt;/h2&gt;&lt;br /&gt;In the end, there are better resources then blog posts for this topic.  There have been numerous studies done on how to make inclusive games, and several good resources. &lt;br /&gt;&lt;br /&gt;For starters, there is Sheri Graner Ray’s excellent book Gender Inclusive Game Design which goes over a wide range of differences between male and female players. The book also has extensive references to various studies and papers that go over specific issues and the science behind them.&lt;br /&gt;&lt;br /&gt;There is also the IGDA Women In Game’s working group which has regular workshops at GDC where such issues are discussed.&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;Gender inclusive game design is not a trivial matter.   Anyone attempting it is up against some pretty deeply engrained social issues that are beyond their power to control or change.  Even things within the developer’s power are wider in scope then simply adding a new feature or changing a little window dressing.   Appealing to a wider audience requires changes in corporate culture, hiring practices, and shifting thought about what elements are ‘required’ to make a good game.&lt;br /&gt;&lt;br /&gt;However,  making a game gender inclusive, and making a game that still appeals to the traditional male base are not mutually exclusive.    By putting thought into what makes a game unattractive to female players, one also gains other male players and potentially even improves the experience for the traditional base.  This results in more profit for the company, and happier players all around.   Change can be scary, but this is a type of change that can be win-win.&lt;br /&gt;&lt;br /&gt;CCP’s EVE is innovative and built off doing unusual things for a less then mainstream audience.  Some view this as something that results in EVE being locked in to niche design constraints that make it impossible for it to be inclusive without destroying what makes it unique.  Personally, I think that puts EVE in a unique position where it could shift to be more inclusive, not lose the things that made it unique in the first place, and potentially make it special in even more ways.&lt;br /&gt;&lt;br /&gt;There is, however, a fundamental problem with asking the EVE player base how to attract women.  As was described in the first section, one of the ways the industry got into this mess in the first place was players becoming developers and then designing the games that they would play or what they THINK other people will play.  The people that CCP should be talking to are people who are not even playing EVE in the first place.&lt;br /&gt;&lt;br /&gt;Lastly, part of the rules is that you need to include links to other posts.  I am not sure why this is, but I will respect it and link to the last few on the list above me, since they are probably not linked much already:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wraithwerks.net/blog/2010/04/getting-more-eves-in-eve-onlin.html"&gt;Getting More Eves in Eve Online&lt;/a&gt; (recommended read)&lt;br /&gt;&lt;a href="http://forum.enerla.net/content/221-man-fight-back.html"&gt;Be a man! Fight back!&lt;/a&gt;&lt;br /&gt;&lt;a href="http://12signsyoumightbedead.wordpress.com/2010/04/25/the-search-for-the-sisters-of-eve/"&gt;In Search of the Sisters of Eve&lt;/a&gt;&lt;br /&gt;&lt;a href="http://forum.enerla.net/content/219-52-days-eve-online.html"&gt;52 days of Eve Online&lt;/a&gt;&lt;br /&gt;&lt;a href="http://brutebz.blogspot.com/2010/04/bringing-sisters-to-eve-response-to-eve.html"&gt;Bringing the Sisters to EVE&lt;/a&gt;&lt;br /&gt;&lt;a href="http://highspeedlimo.blogspot.com/2010/04/your-agent-has-ended-your-mission-for.html"&gt;Your agent has ended your mission for not attainin...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-8436985499543689590?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/8436985499543689590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=8436985499543689590' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/8436985499543689590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/8436985499543689590'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/04/gender-inclusiveness-in-ccps-eve-online.html' title='Gender Inclusiveness in CCP&apos;s EVE Online'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-1265344655550379688</id><published>2010-04-24T23:45:00.001-07:00</published><updated>2010-04-24T23:47:50.036-07:00</updated><title type='text'>Testing Again</title><content type='html'>I wonder if some of the new facebook features caused old ones to stop working?&lt;br /&gt;&lt;br /&gt;This is one of the problems with companies that try to keep on the 'cutting edge', their stuff stops working, online help and documentation becomes wrong, etc.  I think this is why a lot of the web2.0 technology is a bad idea, or at least immature.  These people can not develop APIs or protocols that last 6-12 months, yet they seek to unseat systems that have been functioning robustly for decades?&lt;br /&gt;&lt;br /&gt;I think before you try to throw out the old, you should at least demonstrate that you can build something equally stable and consistent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-1265344655550379688?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/1265344655550379688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=1265344655550379688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/1265344655550379688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/1265344655550379688'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/04/testing-again.html' title='Testing Again'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-5474485622950074398</id><published>2010-04-24T13:32:00.001-07:00</published><updated>2010-04-24T13:32:37.051-07:00</updated><title type='text'>Testing</title><content type='html'>Assuming I followed the directions correctly, this should post to facebook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-5474485622950074398?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/5474485622950074398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=5474485622950074398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/5474485622950074398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/5474485622950074398'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2010/04/testing.html' title='Testing'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-8836245256090531137</id><published>2009-08-14T10:43:00.001-07:00</published><updated>2009-08-14T10:52:57.882-07:00</updated><title type='text'>Python, a little too permisive?</title><content type='html'>Also known as, why static typing can rock.&lt;br /&gt;&lt;br /&gt;So today I was tracking down a subtle bug.  It is a long standing one that we have been having trouble with and things were finally quiet enough to really start digging in.  Here is the type of problem it ended up being.&lt;br /&gt;&lt;br /&gt;Say you have a bit of python that looks like this:&lt;br /&gt;&lt;br /&gt;ids = {foo,bar,baz,moop}&lt;br /&gt;for id in ids:&lt;br /&gt;    fxn(id)&lt;br /&gt;&lt;br /&gt;with fuction doing something like:&lt;br /&gt;&lt;br /&gt;def fxn(id)&lt;br /&gt;    """&lt;br /&gt;    @param id: id of thing we are working with&lt;br /&gt;    @type id: str or unicode&lt;br /&gt;    """&lt;br /&gt;    somedict[id] = do_stuff&lt;br /&gt;&lt;br /&gt;Now, this will all work find untill you do something like:&lt;br /&gt;&lt;br /&gt;names = {foo,bar,baz,moo}&lt;br /&gt;for name in names:&lt;br /&gt;    fxn(id)&lt;br /&gt;&lt;br /&gt;Now, what just happened here?  At some point someone went and edited the loop and changed a variable name in one place, but not another.  'id' in python is a build in function (gives you the memory address of the parameter), so no error is raised for unknown variable.&lt;br /&gt;&lt;br /&gt;However, once we get inside fxn, there is nothing making sure that 'id' is, in fact, a string.  Instead it is happily using it as the index for the dictionary.&lt;br /&gt;&lt;br /&gt;The result you get is, instead of:&lt;br /&gt;&lt;br /&gt;foo: foostuff&lt;br /&gt;bar: barstuff&lt;br /&gt;baz: bazstuff&lt;br /&gt;moop: moopstuff&lt;br /&gt;&lt;br /&gt;you get&lt;br /&gt;&lt;br /&gt;&lt;build in function&gt;: moopstuff&lt;br /&gt;&lt;br /&gt;and of course any further use of the dictionary will be missing 3 elements and the 4th one is misnamed so you can not access it anyway.&lt;br /&gt;&lt;br /&gt;the two basic problems here: &lt;br /&gt;&lt;br /&gt;(1) Permissive overloading by wildly different types:  id the function gets replaced by id the string and no errors (or even warning) are raised.&lt;br /&gt;(2) Permissive passing of arbitrary data to functions:  nothing stops to warn the user that the function expecting a string just got a function instead.&lt;br /&gt;&lt;br /&gt;Now, of course there are ways to protect against this,... for instance what I did was:&lt;br /&gt;&lt;br /&gt;assert(isinstance(id,str) or isinstance(id,unicode))&lt;br /&gt;&lt;br /&gt;Which essentially reimplementation strong typing.  &lt;br /&gt;&lt;br /&gt;So yeah.... python's permissiveness is a really powerful tool, but wow can it catch you as a project ages and is maintained.  That tends to be the problem with loose and agile technologies/methodologies.. they are great for throwaway stuff, but they become increasingly difficult to maintain and keep 'correct' as they age.  This is a class of bug that even C/C++/ObjC would choke on and not let buy.  And Ada probably would break your fingers to boot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-8836245256090531137?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/8836245256090531137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=8836245256090531137' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/8836245256090531137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/8836245256090531137'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2009/08/python-little-too-permisive.html' title='Python, a little too permisive?'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-2761106419285631870</id><published>2009-08-08T23:38:00.000-07:00</published><updated>2009-08-08T23:43:23.204-07:00</updated><title type='text'>C++ Concepts</title><content type='html'>I think after reading &lt;a href=http://www.devx.com/cplus/Article/42448/0/page/1&gt;Bjarne Stroustrup's interview on concepts&lt;/a&gt;, I have reaffirmed by belief that C++ has become the wrong answer to pretty much any question.&lt;br /&gt;&lt;br /&gt;The language just reeks of 'bored programmer syndrome'.  More and more stuff added to it for the sake of expanding the language because using simple languages is 'boring'. C++ is crammed full of geek cred.. so many obscure features, strange interactions, special rules, etc.  This is not a good thing for a language.  A language should be quick and simple to learn with lots of useful APIs to use.&lt;br /&gt;&lt;br /&gt;C++ on the other hand turns learning the language into a skill in and of itself.  A bit like victorian erra protocol for dating. The complexity seems to exist purely so you can say you learned the complexity and thus show your aristocratic heritage.  Meanwhile it did not actually change any of the actual abilities to date.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-2761106419285631870?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/2761106419285631870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=2761106419285631870' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2761106419285631870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2761106419285631870'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2009/08/c-concepts.html' title='C++ Concepts'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-2928945367341751214</id><published>2009-08-08T20:32:00.000-07:00</published><updated>2009-08-08T21:44:55.461-07:00</updated><title type='text'>Social Networking Games.</title><content type='html'>Social network games are all the rage.  For casual developers they are the next big thing.  Or at least many seem to think so.&lt;br /&gt;&lt;br /&gt;I am seeing a lot of casual games being shoe-horned to become 'social network' games.  One of the ones I have been watching is Farm Town, which seems to be rather typical.&lt;br /&gt;&lt;br /&gt;What these games seem to be focusing on is providing incentive to build up as large of social networks as possible.  This is done though gatekeepers (i.e. certain functionality can not be turned on unless you have X friends in game) and gifting.&lt;br /&gt;&lt;br /&gt;Both of these seem to be features for the sake of having features that can be called 'social'.  The gatekeeper one is an especially shallow feature and does little more then either (a) keep people from features or (b) encourage the player to friend list a bunch of people for no reason.&lt;br /&gt;&lt;br /&gt;The later, gifting, is a bit more clever and gives a real reward without actually preventing people from play. Still, the feature feels kinda hokey, something slapped on to make it 'social network compliant'.&lt;br /&gt;&lt;br /&gt;This is a case where I am really not sure what a better solutions might be.  It could be that the 'right' solution is none at all.   Adding features for the sake of having them is not always a good thing.&lt;br /&gt;&lt;br /&gt;An example of this would be Wii titles.  For every title that has a good reason for motion control there are 5 that force motion control into the game just for the sake of having it.  Generally when this has been done it has resulted in a title that does WORSE for it. For instance, DeBlob.  Good game... if they had just dropped the motion control.  It was not needed, added nothing, and detracted from the game.&lt;br /&gt;&lt;br /&gt;Perhaps what social network games need is to stop trying to be social network games and start adding in social features as they truly extend playability.&lt;br /&gt;&lt;br /&gt;I will be curious to see what CCP does with COSMOS.  They are going the other direction, taking an existing game and adding a social layer to it from scratch. So building a social network site off a social game rather then building a social game off an existing site.&lt;br /&gt;&lt;br /&gt;Time will tell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-2928945367341751214?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/2928945367341751214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=2928945367341751214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2928945367341751214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2928945367341751214'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2009/08/social-networking-games.html' title='Social Networking Games.'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-209560026274394357</id><published>2009-08-05T17:26:00.000-07:00</published><updated>2009-08-05T17:27:30.029-07:00</updated><title type='text'>CCP Case Study: On the problems of scale</title><content type='html'>Rambling a bit about someone else's upcoming difficulty.&lt;br /&gt;&lt;br /&gt;EVE Online has a new feature in the works called Walking In Stations (WIS).  It will actually be a backport of an engine they are developing for another game, specifically WhiteWolf's World of Darkness.  The basic idea is that players will be able to get out of their ships and walk around as full bodied avatars in one of the stations in-game.   It will not be an FPS, but instead something closer to second life.. you walk around, you talk, emote, and that is about it.  They will probably expose some kind of store functionality, which really means taking the existing market controls and given them an agent front end.    So no new gameplay.  From the sounds of it, it will probably be very close in functionality to those virtual meetings packages that no one uses beyond the first two weeks, only with much prettier graphics.&lt;br /&gt;&lt;br /&gt;Now, one of the problems they will probably encounter is one of the classic issues sci-fi games (and movies/tv) run into.  What to do with scale.&lt;br /&gt;&lt;br /&gt;Sci-Fi has a bad habit of making everything really really big.  You see it in most movies/shows/games.  There are even these wonderful image files out there that show how big things are in comparison to real world objects like famous building and air craft carriers.  The usual result is that even small ships are bigger then the biggest thing we have built today because, well, big is really impressive and futury.  But it poses a problem when you actually try to interact with it.&lt;br /&gt;&lt;br /&gt;Agent or actor, at some point you have to create assets to present the viewer.  If you are on a multi-mile long space dreadnaught that requires thousands of people and untold rooms and corridors, you somehow have to communicate this to the player.  There are generally three ways to do this:&lt;br /&gt;&lt;br /&gt;(1) Lots of repetitive auto generated content.  Got 100km of corridors?  Let the player walk around 100km of corridors.  They all look the same and the only real cost is changing the {x,y,z} coordinate of the avatar.  Add nearly identical shops every once in a while and backfill with NPCs, ideally with lots of canned dialog and motion to give the illusion of a bustling metropolis.    This is generally the approach that sandbox games take (with varying degrees of custom content depending on your art budget).&lt;br /&gt;&lt;br /&gt;(2) Limit the player's motion and include lots of huge background images and occasional giant rooms.  Sure you only have two rooms for all the players, but look out the window at that immense city scape!  This lets you concentrate your assets in a small area and make them fairly rich.  It also allows you to concentrate your players in a small area so they interact with each other, minimizing the need for NPC clutter.&lt;br /&gt;&lt;br /&gt;(3) Let players create content.  This takes elements form (1), specifically lots of blank real-estate and (2) players concentrating assets into 'switched on' areas.  Second Life does this to significant success.  This lets the players participate, fills the space potentially with LOTS of content, but takes artistic control away from the company which CCP might not like.&lt;br /&gt;&lt;br /&gt;Now, what could CCP do?  (3) is unlikely.  They will not even allow players to add aesthetic structures to POSes (Player Owned Starbase)(which NPCs do all the time, resulting in really cool looking places to visit or mission in), so if they will not allow that then i can not see them releasing artistic control on this level.  (1) is unlikely due to, well, CCP built a huge universe including thousands of stations that are probably hundreds of cubic kilometers each.&lt;br /&gt;&lt;br /&gt;My guess is that they will do (2).  Probably some type of tram-system where you can go between multiple disconnected locations, each with a fairly rich (but identical between different stations) area that players can wander between.  Both the tram and the rooms will likely have awe-inspiring vistas that can not be interacted with.  They will probably consider connecting areas like hallways or malls but drop them as they run into scale issues.  One of the problems is that stations can have either a handful of people (0-5) or hundreds at a time (Jita might have 1000+ people in it for instance) and thus any solution they put together will have to support either extreme without making these huge stations feel empty or cluttered.. since 0-1000 player avatars SHOULD be little more then a drop in the bucket.&lt;br /&gt;&lt;br /&gt;How would I have approached it?  I admit, I am a big proponent of (3), but I don't care about artistic control too much.  I also would have made stations (and ships) fairly small things, with the idea that space is big and cold and lonely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-209560026274394357?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/209560026274394357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=209560026274394357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/209560026274394357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/209560026274394357'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2009/08/ccp-case-study-on-problems-of-scale.html' title='CCP Case Study: On the problems of scale'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-4223394211563173093</id><published>2009-07-26T12:46:00.000-07:00</published><updated>2009-07-26T14:11:59.803-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='EVE'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Tadaima</title><content type='html'>Ok, back to work.&lt;br /&gt;&lt;br /&gt;Since consulting did not really pan out (I guess one needs to be more social then I am in order to make the connected needed to find work), yet I still have a craving for projects, I've decided I am going to take a long overdue new shot at some hobbyist work.&lt;br /&gt;&lt;br /&gt;For a while I played around with writing some apps for EVE, specifically a python app that could read in both market dumps and the EVE database, plus a set of blueprints, then produce charts concerning total costs and total profits.  It was fun, but rather limited.&lt;br /&gt;&lt;br /&gt;I also wrote an app that you could scan through the database and find system that met certain criteria.  For instance, find a system with stations, L4 agent, and no good refining.&lt;br /&gt;&lt;br /&gt;But this was rather limited, so after playing some Farm Town on Facebook, I started thinking about Flash games.  I've always wanted to try out this (ok, no longer 'emerging') technology but never got around to it.&lt;br /&gt;&lt;br /&gt;So now I am exploring how this stuff works.  The first thing I need to figure out is what tech to focus on.  There are a whole bunch of techs used for doing stuff like this.  Flex, Java, Silverlight, and AJAX.&lt;br /&gt;&lt;br /&gt;Flex is well supported, and there are lots of 3rd party sites out there that host the files.  Newgrounds, Albinoblacksheep, etc.  It would also be something very new for me to learn.&lt;br /&gt;&lt;br /&gt;Java I already know, but I am not sure how to handle hosting.  It is also a pretty heavy technology and support seems to vary.  While it would be the most 'comfortable' technology from a language perspective, I am not sure how comfortable I would be with it for actually writing something for other people to play.&lt;br /&gt;&lt;br /&gt;Silverlight is still too Microsoft specific.&lt;br /&gt;&lt;br /&gt;AJAX sounds like a cool idea, but it is a mix of techologies and I am not sure what the barrier to entry to would be.&lt;br /&gt;&lt;br /&gt;There is also the question of server support.  I would start with single player games, but I really like the idea of working on a multiplayer game (duh).  I keep dreaming of making something in the veign of tradewars ^_^&lt;br /&gt;&lt;br /&gt;Of course the scary part is, whatever I do, I will eventually need art.  I need to learn computer art.  Blark.&lt;br /&gt;&lt;br /&gt;At the moment, I am leaning towards Flex due it having a low barrier to entry and cross platform support.  This may change as I explore how it actually works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-4223394211563173093?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/4223394211563173093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=4223394211563173093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/4223394211563173093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/4223394211563173093'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2009/07/tadaima.html' title='Tadaima'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-2592043971435867069</id><published>2008-08-18T17:38:00.000-07:00</published><updated>2008-08-18T18:08:49.829-07:00</updated><title type='text'>Power Corrupts.</title><content type='html'>So yeah, I have not updated in quite some time.  But now that things are calming down I am going to try to post a little more regularly.  If nothing else I have a bunch of things to ramble about.&lt;br /&gt;&lt;br /&gt;Time ran an article today that, while not directly related to, actually applies in a rather important way to software development.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.time.com/time/health/article/0,8599,1808140,00.html"&gt;Does Power Corrupt? Absolutely Not&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The basic idea goes like this.  Give someone power, and they care more about their job (since they feel more in control of it), and thus they are more efficient and make fewer mistakes.  Take power away from people and they start messing up.&lt;br /&gt;&lt;br /&gt;It was a blind study.  Wide group of people split into 3 groups, each encouraged to think of themselves as dominant, submissive, and neutral.  What the found was that comprehension and mistakes ended up being quite different between the groups.&lt;br /&gt;&lt;br /&gt;It pointed to the idea that if you want people to work well, give them power over their own work.  It also suggested that the roles people have ended up in are a cause rather then an effect.. that it isn't 'efficient people bubble to the top, inefficient sink' but instead the role you drop someone into actually effects how they preform.&lt;br /&gt;&lt;br /&gt;So what does this have to do with software development?  In writing software, building a game, etc, reducing mistakes and increasing emotional investment are absolutely vital to a product going well.  You could easily say that the difference between a success and a failure in a design is directly related to how well people preform and how much investment they have in things going well.  No amount of 'process' will overcome people who just don't care.&lt;br /&gt;&lt;br /&gt;Looking back, I think this played a bigger role in why I left Merit then I had realized.  I went from having significant power (small in the big scheme of course, but still it made me feel in control of things that I was involved in) to being shoved pretty far down the chain to the point I was, well, just programming.  I think it REALLY effected my work.  Looking at everything I did over the last year, I can't say I'm overly proud of any of it.  I lost efficiency, I checked in more and more bad code, my designs got worse, it just stopped mattering.  And that effected the whole product indirectly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-2592043971435867069?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/2592043971435867069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=2592043971435867069' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2592043971435867069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2592043971435867069'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/08/power-corrupts.html' title='Power Corrupts.'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-3543560176607059761</id><published>2008-07-04T14:25:00.000-07:00</published><updated>2008-07-04T14:26:23.158-07:00</updated><title type='text'>Bad Design - When 'it just works' Doesn't.</title><content type='html'>Bit of a rant, bit of an examination of what I consider a bad design.  The Netflix Movie Player.&lt;br /&gt;&lt;br /&gt;Now I can't speak to it's internal architecture of course, but I can talk about how it interacts with the user and the rest of the system a bit, and that is where it kinda fails.&lt;br /&gt;&lt;br /&gt;So let us look at what is offered and how it is supposed to work. In theory you go to the netflix site, pick a movie, install an ActiveX control, and poof, you are up and running. No hassle, you have been walked through every step, you are up and going. If you have problems there are common 'faq' that you can access.&lt;br /&gt;&lt;br /&gt;So where does this go horribly wrong?&lt;br /&gt;&lt;br /&gt;For starters, it depends on some pretty specific bits of software being installed, Windows Media Player 11 and Internet Explorer 7. Not uncommon bits of software I will admit but not everyone has or run them. From a design perspective though it means that Netflix has tied their stack specifically into Windows full-chain DRM system which, lets face it, does little to stop pirates but does a lot to piss off the user. So part one is tieing to high-level APIs with known issues.&lt;br /&gt;&lt;br /&gt;So lets say you get those apps onto your system (which eats about a gig or so) then you try to install the ActiveX control. Netflix is very helpful about how to install it assuming everything goes correctly... but if anything goes wrong, well, your options are pretty limited. The software has minimal introspection so it can't tell you why it failed, the FAQ really do not cover much, and, here is the important part... no support forum or support email address. You can call someone but that is pretty much your only option. That, I feel, is a big part of the 'bad design' of the entire process, poor options for customer support.&lt;br /&gt;&lt;br /&gt;So lets say you get it installed. I managed to have it installed for a short while before it broke so I can still talk about this part. One of the first things it does is find out if you have enough drive space. The problem? It only checks C:. Many windows users are painfully aware of how the C drive tends to fill up rather unchecked. Figuring out what is eating up space in windows can be an exercise in futility (no equivalent of 'du -s') so many users will create 'clean' partitions or even second drives intended for large downloads and media. In my case my C: is about 8 Gig (7 of which is filled with just the OS and things that can not control where they install, such as IE and WMP), but I have 8GB of D: for temp files and 200GB of F: for things I actually install.&lt;br /&gt;&lt;br /&gt;Unfortunately, the player doesn't have an option for controlling where it downloads things. In fact, it has no options what so ever. It doesn't even seem to have registry entries to control where things go. To be fair neither does IE, but a lot of people are unhappy with IE's design for just such reasons. So this is the other big design flaw.. lack of even basic user control of options, or more specifically, the design decision that the user should not have to have any options in the first place... 'it just works'.&lt;br /&gt;&lt;br /&gt;Annoyingly enough, one reboot later Netflix couldn't detect their own player and attempts to reinstall it keep generating a "A network error occurred while attempting to read from the file: C:\ .... NF_Movie_Player_z11.msi" error, which gets back to the lack of introspection/debugging. When it fails, there is nothing you can do. So I never actually got to the point where I could actually PLAY a movie, and thus can not speak to how well it behaves from there.&lt;br /&gt;&lt;br /&gt;In short, I do not think I will ever be using this downloadable service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-3543560176607059761?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/3543560176607059761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=3543560176607059761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/3543560176607059761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/3543560176607059761'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/07/bad-design-when-it-just-works-doesnt.html' title='Bad Design - When &apos;it just works&apos; Doesn&apos;t.'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-9209793292462802924</id><published>2008-05-19T22:09:00.000-07:00</published><updated>2008-05-19T22:20:04.491-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Physics'/><title type='text'>Phun</title><content type='html'>&lt;span style="font-size:100%;"&gt;One thing I enjoy is looking through the myriad of little flash games you can find on newgrounds/albinoblacksheep/etc.  So many little ideas condensed into their simplest form to fit into the system requirements of a downloadable flash object.&lt;br /&gt;&lt;br /&gt;Something I found today though was a slightly different beast.  It was only a youtube demo of the program, but the idea it showed had some interesting game potential.  It is called "Phun", from &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="author"&gt;Umeå University.  It isn't a game exactly, more of a sandbox.  A physics sandbox to be exact.  It is a bit like those 'animator vs animated' shorts except interactive and real time.  You draw stuff, the laws of physics apply to the objects, stuff happens.  Quite sophisticated actually.. I would love to poke through and see how they made it work.&lt;br /&gt;&lt;br /&gt;But on to the game angle.  Watching the examples I couldn't help think about the game potential of such an engine.  Sure there are lots of physics engines out there, many of them capable of far more complex things.  But this was was geared twoards the player interacting with the engine rather then the artist+programmer.  This has all sorts of potential for problem solving games.&lt;br /&gt;&lt;br /&gt;The example that came to mind was the simple artillery game (a favorite of mine).  But in this case not only would you have to aim and such, but actually build the mechanism from primitives.  Or a racing game where you have to design the car.   Lots of potential there ^_^&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-9209793292462802924?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/9209793292462802924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=9209793292462802924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/9209793292462802924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/9209793292462802924'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/05/phun.html' title='Phun'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-7352878602984359028</id><published>2008-04-25T11:51:00.000-07:00</published><updated>2008-04-25T14:11:21.169-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogs of the Round Table'/><title type='text'>Meta-thinking and Emergent Behavior</title><content type='html'>Ok, taking a shot at writing something themed for Blogs of the Round Table.&lt;br /&gt;&lt;br /&gt;A short while ago I decided to grab an xbox360 finally.  Of course I went with one of the 'hot' games, Halo3.  I've been wanting a FPS again for a while and I've been through Pandemic's Mercenaries way, way too many times lately.  So I started Halo3 and couldn't help looking at it in terms of the games I usually play and wondering what did, and didn't work for me.&lt;br /&gt;&lt;br /&gt;First I have to say, I am enjoying the game.  It is visually stunning, the AI is actually quite good, and it is mindless fun that I can relax too.   Having said that, I also found it a very disappointing game in it's simplicity and linearity.   For any given situation is was always fairly clear what the 'solution' was.   If the situation was unusual then the needed weapon would happen to be nearby.  Often there was only one way to do something,.. each area had one entrance and one exit, and clues were everywhere regarding which one you should be moving towards.  There was little to no state-fulness between areas (weapons and vehicles reset back to designer intention), etc etc.&lt;br /&gt;&lt;br /&gt;Compare this to a military sandbox like Mercenaries.. no real entrance/exits,  multiple solutions to given problems, flexibility for un-anticipated solutions, state-fullness between missions so that you can prepare and keep things that are useful, etc etc.   This usually works pretty well for me.&lt;br /&gt;&lt;br /&gt;Yet, when I think about it, I can't stand 'puzzle games'.  When I say puzzle game I am not necessary meaning mini-games where you have to solve some explicit puzzle.   I mean any game where the designer integrates a problem to be solved... which actually brings me to my main point.  Meta-thinking.&lt;br /&gt;&lt;br /&gt;When one designs a game, there is always some meta-thinking involved.  The designer HAS to think about how the player will interact with the world.  For instance the designer probably wants to think about what they player would expect the left arrow to do when moving and thus move accordingly.  This is just part of good interface design.&lt;br /&gt;&lt;br /&gt;Beyond that though, designers often try to design 'puzzles' that involve the designer trying to guess how the player will see the puzzle, and more importantly the player trying to guess what the designer was thinking the player would think.  Essentially from the player's perspective you have to figure out what the designer was thinking.&lt;br /&gt;&lt;br /&gt;Now, in the real world when you are presented with a problem it usually has not been specifically 'designed',  thus trying to solve it involves a good model of the real world and such.  In a virtual (highly simplified and artificial) world this doesn't work.  Which gets me to part (2) of my topic, emergent behavior.&lt;br /&gt;&lt;br /&gt;Within this context, emergent behavior is what you get when you set up the virtual world well enough that the player can apply general-purpose problem solving to a situation rather then guessing about the designer's pre-conceived solution.  This is where the games that tend to work well for me diverge from the ones that don't.  Rather then having one or two solutions baked in, these games provide a sandbox in which the designer can challenge the player but does not have much control over how the problem is solved and thus it starts feeling more 'real world' to me.&lt;br /&gt;&lt;br /&gt;It is never perfect of course.  Even the most flexible games still represent a subset of the real world thus one still has to think about what the designer decided to include, how they implemented it, and how it is balanced.&lt;br /&gt;&lt;br /&gt;Now I admit part of this is humans are pretty difficult for me to understand, thus attempting to meta-think someone who's background and assumptions I don't know is generally an exercise in frustration rather then enjoyment.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;p style="text-align: center;"&gt; &lt;iframe frameborder="0" height="64" width="256" marginheight="8" marginwidth="8" scrolling="no" title="Round Table" src="http://blog.pjsattic.com/roundtable.php?rtMON=0408&amp;amp;bgcolor=060606"&gt;Please visit the Round Table's &lt;a title="Round Table Main Hall" href="http://blog.pjsattic.com/corvus/round-table/"&gt;Main Hall&lt;/a&gt; for links to all entries.&lt;/iframe&gt;&lt;/p&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-7352878602984359028?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/7352878602984359028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=7352878602984359028' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/7352878602984359028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/7352878602984359028'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/04/meta-thinking-and-emergent-behavior.html' title='Meta-thinking and Emergent Behavior'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-4001822757909857006</id><published>2008-04-21T11:26:00.000-07:00</published><updated>2008-05-19T20:26:47.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ThreeRings'/><title type='text'>Nothing Ventured</title><content type='html'>A few weeks ago I had decided to take the plunge and apply at Three Rings since they were opening up a location in Philly.  I didn't consider my chances all that good but went for it anyway.   They presented a fascinating opportunity if things panned out so it would have been silly of me to not at least try for it.&lt;br /&gt;&lt;br /&gt;Today I received the official 'we are going to pass' email.  Not surprising but a bit disappointing.&lt;br /&gt;&lt;br /&gt;I decided to actually bluntly ask Three Rings where I had gone wrong.  Probably a faux pas I know but I never get any feedback on 'why' from various companies and these peeps seem informal enough to maybe actually be willing to say something.  That and it would be nice to keep the dialogue open in case something else came up in the future.&lt;br /&gt;&lt;br /&gt;Still, even without getting the job the experience it'self was probably worth it.   I got to play in their development environment, learned a new language, and worked with a network programming paradigm that was new to me.  It was interesting to see how in some ways their network API was way ahead of what we use, and in other ways so far behind.  So I learned stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-4001822757909857006?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/4001822757909857006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=4001822757909857006' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/4001822757909857006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/4001822757909857006'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/04/nothing-ventured.html' title='Nothing Ventured'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-2300032548657073370</id><published>2008-04-19T19:29:00.001-07:00</published><updated>2008-04-19T19:29:41.673-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WTF'/><category scheme='http://www.blogger.com/atom/ns#' term='horrible'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Duke Nuk'em.  Horrible for interesting reasons</title><content type='html'>Last night I got a craving for mindless FPS. Not a type of game I have many of I'm afraid. I usually just play Mercenaries when I want thing to go 'splode but I had just finished running through it twice the other day, so that wasn't going to cut it.&lt;br /&gt;&lt;br /&gt;So I poke through my collection of games and find 'Duke Nukem, Time to Kill', a PS1 game from years back. I had forgotten just how horrible it was. But horrible for what I think are interesting reasons.&lt;br /&gt;&lt;br /&gt;Time to Kill was made in the shadow of Doom. Doom was a fairly revolutionary (in the iterative sense) game,.. it had a highly efficient engine, lots of variety, a good pseudo-3d environment, good controls with lots of capabilities without overwhelming the person, and smooth movement.&lt;br /&gt;&lt;br /&gt;Time to Kill seemed to try to take this formula expand upon it and bring in things that, I am guessing at the time, conventional wisdom felt would be 'better'. So it added an inventory (which was clunky access and use), step based movement instead of phantom-slidy (which result in coarse grained control that made maneuvering difficult), the ability to put away your gun and do other things like climb (which was more realistic perhaps but added unnecessary and confusing state-fulness), and a more 3D engine that followed Doom's pseudo 'everything on one plane' 3D but added multiple slices (or something) so you could climb around. It felt like a bad comprise.&lt;br /&gt;&lt;br /&gt;The end result? An utterly unplayable game that felt like it was designed by a few modders who looked at doom and asked 'wouldn't it be cool if?' but failed to integrate everything into a balanced game.&lt;br /&gt;&lt;br /&gt;At least that is my take ^_^&lt;br /&gt;&lt;br /&gt;Ultimate solution? I finally bought an xbox360 and a copy of Halo3,.. which I have a different set of complaints about having come from Mercenaries ^_^ but that is a different rant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-2300032548657073370?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/2300032548657073370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=2300032548657073370' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2300032548657073370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2300032548657073370'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/04/duke-nukem-horrible-for-interesting.html' title='Duke Nuk&apos;em.  Horrible for interesting reasons'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-2162341424374126693</id><published>2008-04-18T09:47:00.000-07:00</published><updated>2008-04-18T10:00:13.075-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WTF'/><category scheme='http://www.blogger.com/atom/ns#' term='POSIX'/><title type='text'>Moving windows, forks, shares, and ARG!</title><content type='html'>I just spent the last 3 days working on a problem that SHOULD have been incredibly simple.  Take a few windows, slide them to their new positions.    The devil was, however, in the details.&lt;br /&gt;&lt;br /&gt;Each of these windows is owned by a loadable module.  Each module has a binding that translates requests form the loader into commands that the API used by the binding can use.  This allows multiple graphics engines to run side by side and opens up all sorts of cross platform capabilities in the future.&lt;br /&gt;&lt;br /&gt;Now, each module is loaded by the, well, loader, then forked off with a block of anonymous shared memory between them for message passing.  This means that the loader has no way to execute commands directly in the process space of the module.  Now comes the tricky part.&lt;br /&gt;&lt;br /&gt;Moving a window around.  xlib has a simple call for this, move window.  The bindings do not expose the Window reference directly though, instead they take a 'move' signal.  Each module is runing in it's own space and is thus subject to the scheduling whims of the kernel.  So if you do something like:&lt;br /&gt;&lt;br /&gt;for(modules module)&lt;br /&gt;   module-&gt;move(x,y);&lt;br /&gt;&lt;br /&gt;you will get a whole mess of modules all moving themselves in the order and timing of the kernel's liking.  Unfortunately these are low level graphics modules, which means they do not get the nice automatic refresh that you would get on a desktop.  End result? Artifacts as they slide over eachother.&lt;br /&gt;&lt;br /&gt;Now, a way to deal with this would be to have each one call the other modules and say 'hey, I drew over you, refresh yourslf' with the problem that they are all running at different speeds and thus no messages can get across quickly enough.  The loader can in theory coordinate them but at best it can only suggest when to draw, it can't control the execution dirrectly.&lt;br /&gt;&lt;br /&gt;So what I ended up trying to do was using a set of mutexes to let the loader control when each one drew.  Essentially:&lt;br /&gt;&lt;br /&gt;for(modules module)&lt;br /&gt;   module-&gt;lock();&lt;br /&gt;&lt;br /&gt;for(frames)&lt;br /&gt;{&lt;br /&gt;for(modules module)&lt;br /&gt;   module-&gt;unlock()&lt;br /&gt;    sched_yield()&lt;br /&gt;   module-&gt;lock()&lt;br /&gt;&lt;br /&gt;for(modules module)&lt;br /&gt;   module-&gt;unlock()&lt;br /&gt;  sched_yeild()&lt;br /&gt;  module-&gt;lock()&lt;br /&gt;}&lt;br /&gt;for(modules module)&lt;br /&gt;   module-&gt;unlock()&lt;br /&gt;&lt;br /&gt;And on the module side:&lt;br /&gt;&lt;br /&gt;while(!done)&lt;br /&gt;   Lock()&lt;br /&gt;   Move(one_frame_x,one_frame_y)&lt;br /&gt;   Unlock()&lt;br /&gt;   sched_yeild()&lt;br /&gt;   Lock()&lt;br /&gt;   Redraw()&lt;br /&gt;   Unlock()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So each module has it's mutex released in turn, gets to move it'self, then each module in turn gets to draw it'self. &lt;br /&gt;&lt;br /&gt;Oh, that should have worked, but didn't.  It turns out (and this took forever to track down) under the 2.4 kernel semaphores can't be shared between processes (threads are ok, but forked processes fail) and mutexs just quietly don't work.&lt;br /&gt;&lt;br /&gt;Well, you learn something new every day.&lt;br /&gt; Ugh.  The things that should be simple.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-2162341424374126693?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/2162341424374126693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=2162341424374126693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2162341424374126693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/2162341424374126693'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/04/moving-windows-forks-shares-and-arg.html' title='Moving windows, forks, shares, and ARG!'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-5298596897662960425</id><published>2008-04-14T09:54:00.000-07:00</published><updated>2008-04-14T10:37:07.883-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WTF'/><category scheme='http://www.blogger.com/atom/ns#' term='evil'/><title type='text'>delete(this)</title><content type='html'>For any given language there are always language features that are considered so 'wrong' that no programmer 'should' use them ever.  I've always found this a rather interesting bit of behavior and group think among programmers and it is actually a topic I've used as an interview question in the past.&lt;br /&gt;&lt;br /&gt;You can guage someone's perspective on what they think about the 'unholy' language features.  If one claims that a methos is always the right solution, or that a feature is always the wrong solution, that tells me something not so great about how flex able in understanding problems someone is... i.e. when presented with a screw do they still try to use a hammer?&lt;br /&gt;&lt;br /&gt;Goto is the classic example,.. a dangerous command that comletely breaks OOP if OOP is your hammer.  But that isn't the one I wanted to babble about.&lt;br /&gt;&lt;br /&gt;Today I realized I was using "delete(this)".  It isn't even the first time I've used it in this project.  Deleting 'this' is considered one of those no-nos that many say 'well, it just means you structured your program wrong!'... unfortunately people tend to say this without actually knowing the structure, they can simply 'tell' because you came up with the 'wrong ' solution.&lt;br /&gt;&lt;br /&gt;In this case, yes, I used it with one particular class.  The case? Threaded classes that want to be able to terminate themselves.  Nothing else 'owns' the object.  Adding a manager (the 'correct' solution) is significant extra complexity, indirection, a bottleneck, and breaks from an event-driven design.  The thread class ends up needing to know about the manager, the manager needs to know about the threaded class, you have statefullness to keep in sync,  a deeper stack to do anything, and have the potential to introduce all sorts of race conditions.  On top of that in order to do it right you need a whole mess of mutexs to make sure that different threaded classes don't screw with the manager's data.&lt;br /&gt;&lt;br /&gt;All that to get around 'oh no! delete this is bad!'.  And of course, the real problem is going to be the code review...&lt;br /&gt;&lt;br /&gt;This also highlights the problem (and advantage) of multi-paradigm languages like c++.  You can use any paradigm you like but start mixing them and you run into arguments.  On top of that, in order to support so many ways of programming, it implements each of them poorly.&lt;br /&gt;&lt;br /&gt;For instance, the delete(this) problem is handled elegantly in ObjC via Retain/Release.  I would be surprised if Java didn't have a solution to the situations too.  C++?  You have to do something 'evil'.  Oh well, evil needs luffs too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-5298596897662960425?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/5298596897662960425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=5298596897662960425' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/5298596897662960425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/5298596897662960425'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/04/deletethis.html' title='delete(this)'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-360887756361361550</id><published>2008-04-12T12:34:00.000-07:00</published><updated>2008-04-12T13:29:00.222-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Wumpus</title><content type='html'>So, I am writing a demo game as part of a challenge.&lt;br /&gt;&lt;br /&gt;1 Week, in an API I am not familiar with in a language I don't know.   Interesting I admit but stressful too.&lt;br /&gt;&lt;br /&gt;Anyway, I have finished up the tutorial so I think I have an idea of how the system works.   A nice block diagram or UML would have been good, but I think I am getting it.  Very 'automagic' oriented,.. a bit like gendef + netsprites from our system but with more crack.  But anyway.....&lt;br /&gt;&lt;br /&gt;So now I am at the stage where I have to make an actual minigame.&lt;br /&gt;I had several ideas for what to do. I tend to have that problem, there are so many games I would love to have the time (and art skills) to write.  Unfortunately many of them get pretty complicated pretty quick and are not all that easy to simplify into a 'you have a couple days to learn and code' type project.&lt;br /&gt;&lt;br /&gt;I thought of various smaller ones... a turn based artillery game came to mind (since that is a simplified case of one of the other games) but even that felt like a bit much.  While it would be fun to throw together a quick physics engine that would be one more thing to worry about.&lt;br /&gt;&lt;br /&gt;So what about Wumpus world? Ok, it's been done to death, there is no real originality or creativity.  But it is a well understood problem (thus I can focus on the things I don't understand like the API).  I also have a bit of a soft spot for the game given all that time spent solving it in college ^_^.&lt;br /&gt;&lt;br /&gt;And thus my evil plan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/292781996978576543-360887756361361550?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/360887756361361550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=360887756361361550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/360887756361361550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/360887756361361550'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/04/wumpus.html' title='Wumpus'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-292781996978576543.post-545954798444123286</id><published>2008-04-11T19:04:00.000-07:00</published><updated>2008-04-11T19:25:40.598-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IGDA'/><category scheme='http://www.blogger.com/atom/ns#' term='fluff'/><title type='text'>First Post</title><content type='html'>F&lt;span style="font-family:arial;"&gt;OOM!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;So, here I am starting a industry like blog? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Well, the idea came from an IGDA meeting I attended on teusday.  Two speakers, Jason Della Rocca and Corvus Elrod.  Corvus had an interesting suggestion for how to connect with the community,.. and let's face it, community is NOT my strong point ^_^&lt;br /&gt;&lt;br /&gt;Anyway, he suggested blogging, and that is what I'm gonna do.&lt;br /&gt;&lt;br /&gt;So, why Ethics of Madness? I originally thought some combination of cats, and games, and things like that.. but it is overdone.  Next I thought 'For love of Evil', because Evil needs luffs.  But madness.  I'll spend an afternoon trying to figure out how vfork works when a shell script would take 5 minutes  because it's interesting. &lt;br /&gt;&lt;br /&gt;Granted it's interesting in the same way that 'hmmm, what can I learn from driving this corkscrew into my leg!' which is really a whole different blog.  So that is the madness part.  The ethics? Ahm... I'll figure that part out later.&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/292781996978576543-545954798444123286?l=ethicsofmadness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ethicsofmadness.blogspot.com/feeds/545954798444123286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=292781996978576543&amp;postID=545954798444123286' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/545954798444123286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/292781996978576543/posts/default/545954798444123286'/><link rel='alternate' type='text/html' href='http://ethicsofmadness.blogspot.com/2008/04/first-post.html' title='First Post'/><author><name>Nathan Weyer</name><uri>http://www.blogger.com/profile/17266593015888360604</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
