<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:ksleet</id>
  <title>Unrequested Fission Surplus</title>
  <subtitle>Mark Sachs</subtitle>
  <author>
    <email>markbriansachs@gmail.com</email>
    <name>Mark Sachs</name>
  </author>
  <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom"/>
  <updated>2009-12-27T07:11:46Z</updated>
  <lj:journal userid="6501371" username="ksleet" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://ksleet.livejournal.com/data/atom" title="Unrequested Fission Surplus"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:188318</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/188318.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=188318"/>
    <title>where doing it man. where MAKING THIS HAPEN</title>
    <published>2009-12-27T07:11:46Z</published>
    <updated>2009-12-27T07:11:46Z</updated>
    <category term="art"/>
    <lj:music>Kompressor feat. MC Frontalot - Rappers We Crush</lj:music>
    <content type="html">I acquired a cheap Wacom Bamboo tablet a little while ago on the general principle that I need to find an entirely new and better way of doing webcomics, my current methodology having pretty much hit a cul-de-sac of both efficiency and quality -- and the &lt;i&gt;next&lt;/i&gt; comic Jon and I will be doing requires steps forward in those areas. Having acquired it I promptly didn't get around to using it. On an impulse I started giving it a shot today.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://project-apollo.net/pie/sketch/waywardvagabond.png" align="LEFT" hspace="20" width="192" height="262"&gt;And yeah, I'm just barely at the level of being able to draw characters from &lt;a href="http://www.mspaintadventures.com"&gt;MS Paint Adventures&lt;/a&gt;. (Which is not a slam on Andrew Hussie's artistic ability, by the way. A &lt;i&gt;simple&lt;/i&gt; character design is far from -- in fact, usually the opposite of -- a &lt;i&gt;bad&lt;/i&gt; character design.) A problem with the Wacom I hadn't realized is that it doesn't fit well with the way I normally hold a pen. Though I'm right handed, I have a peculiar sort of left-handed pen holding pose in which part of my hand rests on the paper. And you can't have anything else resting on the tablet or it'll get confused. So in addition to learning a new method of drawing, I have to hold the pen in this weird way I'm not used to.&lt;br /&gt;&lt;br /&gt;I'm wondering if there are any decent online tutorials on how to use a drawing tablet, anyway? I'm also curious if anyone out there knows how to remap the controls on the Bamboo tablet or pen (on the Macintosh with Photoshop, that is.) I'd love it if I could map a button on the pen or the tablet to "Undo" considering the colossal number of mistakes I make, but the documentation is frustratingly vague on the subject and so far my net searches have brought up no useful information.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:188069</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/188069.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=188069"/>
    <title>Afterlife Blues update.</title>
    <published>2009-12-22T06:30:16Z</published>
    <updated>2009-12-22T06:30:16Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Usual place.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In conclusion, I give you No Signal.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="44" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:187830</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/187830.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=187830"/>
    <title>Afterlife Blues update.</title>
    <published>2009-12-18T20:36:58Z</published>
    <updated>2009-12-18T20:36:58Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <category term="science"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Updated last night&lt;/a&gt;, etc., etc.&lt;br /&gt;&lt;br /&gt;In conclusion, I give you a highly educational video from the Spitzer Science Center.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="43" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:187593</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/187593.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=187593"/>
    <title>Afterlife Blues update.</title>
    <published>2009-12-15T04:58:21Z</published>
    <updated>2009-12-15T05:08:48Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <category term="links"/>
    <lj:music>Broadcast - Goodbye Girls</lj:music>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Surprisingly painless&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Oh, heck. I forgot to recommend my new favorite thing, &lt;a href="http://www.mspaintadventures.com/?s=6&amp;amp;p=001901"&gt;Homestuck&lt;/a&gt; over at &lt;a href="http://www.mspaintadventures.com"&gt;MS Paint Adventures&lt;/a&gt;. &lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;img src="http://project-apollo.net/pie/homestuck.png"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The basic idea is that the comic's readers toss out suggestions and one of those suggestions is used to determine where each page of the comic will go. It actually reminds me of something I did on occasion when in elementary school, simply with a pencil and a piece of paper. Granted, it generally led to bafflement and abuse from my peers, but it was still cool and it's neat to see a modern version that doesn't get me noogied.&lt;br /&gt;&lt;br /&gt;Now naturally, if you run a story like this most of the suggestions are &lt;a href="http://www.mspaintadventures.com/?s=6&amp;amp;p=002585"&gt;ridiculous&lt;/a&gt; and generally lead, at best, to whatever environment the story takes place in becoming a &lt;a href="http://www.mspaintadventures.com/?s=4&amp;amp;p=000600"&gt;totally devastated wreck&lt;/a&gt;, which makes it all the more amazing that the story sometimes works out. It's interesting to follow the evolution of the storytelling style on the site, if that's the sort of thing you're into -- the first story, Jailbreak, barely exists at all; Problem Sleuth is a giant step above it, and Homestuck is a further giant step beyond that, both in art and writing. Homestuck in particular maintains a level of surreal hilarity, but at the same time it has genuinely appealing characters and a fascinating -- even, occasionally, touching -- storyline. It is also, from time to time, &lt;a href="http://www.mspaintadventures.com/?s=6&amp;amp;p=002771"&gt;incomprehensibly awesome&lt;/a&gt; (click on "Abscond," and believe it or not, everything in that animation actually makes sense in the context of the story.)&lt;br /&gt;&lt;br /&gt;So, yeah, I like it.&lt;br /&gt;&lt;br /&gt;While we're on this topic, whatever that is, I should also recommend &lt;a href="http://stuff.veekun.com/rubyquest/"&gt;Ruby Quest&lt;/a&gt;, which is rather astonishingly good considering that it came from a thread on 4chan.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:187186</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/187186.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=187186"/>
    <title>Afterlife Blues update.</title>
    <published>2009-12-11T07:10:23Z</published>
    <updated>2009-12-11T16:31:16Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <category term="neon galaxy"/>
    <lj:music>Final Fantasy X - Seymour Battle</lj:music>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Here.&lt;/a&gt; And, you know, whatnot.&lt;br /&gt;&lt;br /&gt;Though I haven't composed a post about it, I made some more progress with &lt;i&gt;Neon Galaxy&lt;/i&gt; last week, implementing a system for populating rooms with enemies: I can plant enemies either inside the room itself, or attach them to the walls, and in addition I can arrange for them to be placed in formation next to each other. The placement is determined in an XML file so it's super-easy to define for each map. I then went ahead to work on an AI idea I've always wanted to get working in this game, which is a system allowing the AI to meander randomly around the maze modulo certain desires. (For example, if the AI desired to choose a path that brought it closer to the player, then when it got close enough launched an attack, and then desired paths that take it away from the player, we'd have a hit-and-run attacker. Further development of that idea is left as an exercise for the reader.) This sort of thing should be easy in principle since I've had a navigation graph and A* pathfinding working for a long time, so I was able to quickly assemble a NodeWalk AI behavior that's supposed to do precisely that. However, at present the AI just helplessly wanders back and forth between the same few nodes. I hope I'll get a chance to look at it more over the next few days, although &lt;strike&gt;Champions Online&lt;/strike&gt; uh, real life... stuff... is going to keep me very busy.&lt;br /&gt;&lt;br /&gt;In conclusion, I give you &lt;i&gt;do a barrel roll!&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="42" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:186947</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/186947.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=186947"/>
    <title>Afterlife Blues update.</title>
    <published>2009-12-04T07:14:20Z</published>
    <updated>2009-12-04T07:14:20Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <category term="science"/>
    <lj:music>Elemental &amp; Tom Carauna - Cup of Brown Joy</lj:music>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;The usual place&lt;/a&gt; at the usual time. (2 AM!)&lt;br /&gt;&lt;br /&gt;In conclusion, I give you Robust Aerial Navigation in GPS-Denied Environments.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="41" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:186758</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/186758.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=186758"/>
    <title>Afterlife Blues update.</title>
    <published>2009-12-01T19:19:48Z</published>
    <updated>2009-12-01T19:19:48Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;The usual place.&lt;/a&gt; Nice Miles Edgeworth pose on Liraz in the last panel, there.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:186493</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/186493.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=186493"/>
    <title>Whoopee! Man, that may have been a small one for Neil, but it was a long one for me.</title>
    <published>2009-11-29T21:24:08Z</published>
    <updated>2009-11-29T21:25:32Z</updated>
    <category term="neon galaxy"/>
    <lj:music>Sidhe - Aurora</lj:music>
    <content type="html">Today on &lt;i&gt;Neon Galaxy&lt;/i&gt;, we bring you...&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;Curving corridors!&lt;br /&gt;&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;img src="http://project-apollo.net/pie/vector/vector36.png"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Formerly, I could only choose between corridors going left and right at 90-degree angles; a certain amount of fixed hackery was used to jam each new corridor segment in at the end of the old one. So with a certain amount of quiet determination, I worked out the geometry required and made it so that a corridor can hie off at an arbitrary angle (90 degrees or less; I'm not interested in supporting oblong angles). The above map is set so that once a left or right curve is chosen, the corridor will continue at that angle and direction. It's also possible to randomize those settings completely, like so:&lt;br /&gt;&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;img src="http://project-apollo.net/pie/vector/vector37.png"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;...for a much more jumbly and organic feel. I suppose it's not huge in the grand scheme of things, but I'm pretty pleased at getting this to work.&lt;br /&gt;&lt;br /&gt;I would probably have gotten a lot more done over this long holiday weekend if a co-worker hadn't gotten me hooked on &lt;i&gt;Champions Online&lt;/i&gt;. &lt;i&gt;Damn you, co-worker! Damn yoooooooooou!&lt;/i&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:186340</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/186340.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=186340"/>
    <title>Happy Thanksgiving!</title>
    <published>2009-11-26T04:59:59Z</published>
    <updated>2009-11-26T04:59:59Z</updated>
    <category term="pie"/>
    <lj:music>R.E.M. - Orange Crush</lj:music>
    <content type="html">&lt;lj-embed id="40" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:185929</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/185929.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=185929"/>
    <title>Afterlife Blues update.</title>
    <published>2009-11-24T16:56:40Z</published>
    <updated>2009-11-24T16:56:40Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;About where you'd expect&lt;/a&gt; (updated last night.)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:185691</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/185691.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=185691"/>
    <title>"Aha," I thought, "perhaps the contents of this chest will be of value in my adventures!"</title>
    <published>2009-11-23T04:58:34Z</published>
    <updated>2009-11-23T05:17:47Z</updated>
    <category term="neon galaxy"/>
    <lj:music>Jean Michel-Jarre - Les Chants Magnétiques Part 3</lj:music>
    <content type="html">So what did I do after finally bending the new polygon clipper to my will? That's right: I decided not to use it.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;See, here's the thing. I can now more or less clip any polygons I please, so I began the arduous task of integrating the new clipper into the map generation code. But then I had a thought. See, yeah, I can now clip all kinds of crazy non-convex shapes. But... do I actually &lt;i&gt;need&lt;/i&gt; to?&lt;br /&gt;&lt;br /&gt;...No. No, I do not. The ability to simply clip two polygons together, where one is known to overlap the other, is more than good enough for the actual task at hand. So instead of integrating the new clipper, I made some long-needed modifications to map generation, allowing it to mix and match different room and corridor types and read the whole mess from an XML file and thus making it hugely easier to create a variety of level types. For example:&lt;br /&gt;&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;img src="http://project-apollo.net/pie/vector/vector34.png"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's a map with fixed octagonal rooms and corridors of standard length. The result is quite regimented; this could be some sort of military base.&lt;br /&gt;&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;img src="http://project-apollo.net/pie/vector/vector35.png"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In contrast this map has large, irregular caverns and small square spaces, linked by short twisty corridors; it'd be a good mine, say.&lt;br /&gt;&lt;br /&gt;There are a number of additional options I should add at some point, such as allowing corridors to branch off at something besides a 90-degree angle. Stitching together several in a row would make a nicely curving corridor. I'd also like to try attaching together several irregular polygons in a row to make an elongated cavern, and there are also some concepts I'm batting around for transitioning between different room types in different sections of a level. But all that aside, this is enough to do all the map generation I need.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:185453</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/185453.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=185453"/>
    <title>Is contrarianism dead? The answer is not what you expect!</title>
    <published>2009-11-21T23:57:23Z</published>
    <updated>2009-11-21T23:59:29Z</updated>
    <category term="neon galaxy"/>
    <lj:music>Sasha - Piranha</lj:music>
    <content type="html">&lt;a href="http://ksleet.livejournal.com/183395.html"&gt;Last time&lt;/a&gt; I wrote about the many hassles of writing a polygon clipper for &lt;i&gt;Neon Galaxy&lt;/i&gt;, more than one person commented that, rather than bending over backwards to handle every possible pathological case that might enter the clipper, I should just meddle with the data before clipping to make sure it wouldn't be pathological to start with.&lt;br /&gt;&lt;br /&gt;So, after a few more days of bashing my head against the problem, I decided to go ahead and try that.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;img src="http://project-apollo.net/pie/vector/vector33.png"&gt;&lt;br /&gt;&lt;br /&gt;In the lower row of the above image, we have a bestiary of pathological cases for the polygon clipper. One thing I quickly learned back when I started digging into this is that every failure case has the common factor where one of the points on Polygon A is precisely on one of the edges of Polygon B. From this, all other problems follow. Therefore, the clipper now runs its target polygons through a preprocessing pass where it checks to see if any points are in such a location. If so, it moves the point outwards (technically, it calculates the direction to all other points on the polygon so it can safely make the adjustment without ruining the polygon's convexity) and then goes back to test again, just in case moving the point outwards created another intersection -- the chances of that are vanishingly small, but I'm a belt-and-suspenders sort of guy when I've been burned enough times. Other than that, I clip normally; in fact, I've deleted a fair amount of the special case code that used to be present.&lt;br /&gt;&lt;br /&gt;The results of this process appear in the upper row of the above image. All polygons are successfully clipped. Note that I've actually exaggerated the amount points are moved, just so the results would be more visible; in normal operation I'm moving the points only about a hundredth as far as in the image above, so practically speaking the change is invisible.&lt;br /&gt;&lt;br /&gt;The one downside of this process is that it ends up creating numerous additional very small edges (and entire polygons in some cases, such as the tip of #4.) My physics and detection systems should be able to handle these without trouble as they're not small enough to be vulnerable to floating point inaccuracy issues, but it will slow the whole system down just a hair. It might be worth running a post-processing pass to find and eliminate these edges and polygons once the entire map is finished. Alternatively, I could just do something &lt;i&gt;else&lt;/i&gt; now that this routine finally seems to work. There's a brand new design for the weapon system I had in mind...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:185246</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/185246.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=185246"/>
    <title>Afterlife Blues update.</title>
    <published>2009-11-20T07:03:10Z</published>
    <updated>2009-11-20T15:38:49Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;In the usual place&lt;/a&gt; and that is all.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Edit:&lt;/i&gt; Oh, and here's that video I linked to.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="39" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:184838</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/184838.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=184838"/>
    <title>Afterlife Blues update.</title>
    <published>2009-11-17T16:45:31Z</published>
    <updated>2009-11-17T16:47:13Z</updated>
    <category term="pie"/>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Same place&lt;/a&gt;, new time. Well, theoretically new.&lt;br /&gt;&lt;br /&gt;In conclusion, I give you the amazing planet Mars.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="38" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:184805</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/184805.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=184805"/>
    <title>Three Things I Learned From The Movie "2012"</title>
    <published>2009-11-15T04:09:51Z</published>
    <updated>2009-11-15T04:12:57Z</updated>
    <category term="pie"/>
    <category term="media"/>
    <content type="html">1. If you don't like Los Angeles, boy have I got a movie for you.&lt;br /&gt;2. Tie down your God damned airplanes after the Apocalypse.&lt;br /&gt;3. When selecting a religion, take into account how well its holy places are likely to roll.&lt;br /&gt;&lt;br /&gt;(&lt;a href="http://ksleet.livejournal.com/123040.html"&gt;Previously&lt;/a&gt;, &lt;a href="http://ksleet.livejournal.com/70776.html"&gt;previously&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;And now that I think about it, there should probably also be something about how the quickest way to become a Big Damn Hero is to cause the problem in the first place. Oh, and maybe also something about designing your evacuation arks so that the engines still work if the doors are open.&lt;br /&gt;&lt;br /&gt;To be clear, I liked the movie, but &lt;i&gt;boy howdy.&lt;/i&gt; I especially liked the part where, when it looks like our heroes will not have enough fuel in their plane to reach the arks, the Earth's crust rotates the precise amount needed to put their destination under them instead. Handy!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:184571</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/184571.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=184571"/>
    <title>Afterlife Blues update.</title>
    <published>2009-11-13T17:16:14Z</published>
    <updated>2009-11-13T17:16:14Z</updated>
    <category term="pie"/>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Here.&lt;/a&gt; (Updated last night.)&lt;br /&gt;&lt;br /&gt;In conclusion, I give you the Great Train Robbery.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="37" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:183828</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/183828.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=183828"/>
    <title>So, Modern Warfare 2.</title>
    <published>2009-11-11T20:49:16Z</published>
    <updated>2009-11-11T23:16:09Z</updated>
    <category term="games"/>
    <content type="html">What has happened in the story so far:&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;ol&gt;&lt;li&gt; The ultra-nationalist Russian nuke-selling (and nuke-launching, don't forget that!) villains of the first game are now folk heroes in their country of origin.&lt;br /&gt;&lt;li&gt; The CIA grotesquely flubs an undercover operation, playing right into the hands of a terrorist group (or the Russian government, it's not clear who's behind all this yet) and allowing them to portray a horrendous assault on Moscow's airport as an American-sponsored attack.&lt;br /&gt;&lt;li&gt; Despite the utter absurdity of the notion that the United States would deliberately sponsor a terrorist attack on Russia, everyone in the world, the United Nations especially included, immediately takes the Russians' side.&lt;br /&gt;&lt;li&gt; Days later the Russians launch a huge combined-arms invasion of the United States, thanks to having acquired a typical Hollywood computer macguffin that lets them slip past all early warning networks. Mounting such a colossal assault on the United States would require months if not years of obvious preparation -- look at how long it took to get Desert Storm II going -- which would surely also suggest that the "America is behind the terrorist attack" narrative is false, since the Russians just happened to be prepared to launch their retaliation on a moment's notice.&lt;br /&gt;&lt;li&gt; Despite his colossal incompetence leading straight to World War III, the guy who was in charge of the flubbed operation keeps his job and is in fact put in charge of finding the proof that America wasn't behind the attack. (Which, as a side note, seems like a pointless exercise at this stage. Anyone willing to buy the Russian narrative despite #3 and #4 is surely not going to let their mind be changed by something as trivial as mere &lt;i&gt;proof that it's not true.&lt;/i&gt;)&lt;br /&gt;&lt;li&gt; Even though Washington, D.C. is in flames and Russian paratroopers are literally marching through suburban Virginia streets massacring civilians with the U.S. armed forces powerless to hold them back, the United States does not resort to nuclear weapons.&lt;br /&gt;&lt;li&gt; In the process of trying to find the proof that America wasn't, etc., your commander -- again, the same guy whose dumbassery led to World War III -- has you go to enormous lengths to free enemy civilians who are being held hostage by enemy soldiers on an enemy anti-aircraft installation rather than just bombing the thing and moving on. I mean, I don't want to see hostages hurt any more than the next guy, but, uh, World War III, remember? Nonetheless you still have to go through with it. And that's where we stand at about halfway through the game.&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;So what do I think? My political views at this stage of my life could best be summed up as "bitter nationalist" so I'm finding most of those plot points depressingly plausible other than the magic turn-off-NORAD button. Aside from such quibbles, the storytelling is just as intense and over-the-top as the first game, though there hasn't quite been a twist like the nuclear bomb in COD4. At any rate, I'm definitely keen to see how it all turns out. The space mission from the launch trailer hasn't happened yet; my guess is that whoever's behind this whole scheme bought a ticket to hang out on the International Space Station and watch the world burn, and the final mission will take place there. But we'll see, I expect.&lt;br /&gt;&lt;br /&gt;Oh, right, and the best surprise: Captain Price is back! Yay! Actually, he's the only character I remember from the first game, and that's mostly because of his awesome moustache. Check that action out, dawg:&lt;br /&gt;&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;img src="http://media.giantbomb.com/uploads/2/21612/1098237-229185_captain_price_super_super.jpg"&gt;&lt;br /&gt;&lt;small&gt;&lt;i&gt;Fig. 1.&lt;/i&gt; Dang!&lt;/small&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As for the gameplay, it feels improved over COD4. Mainly, they've finally abandoned the clown-car spawning of the previous Call of Duty games where basically you were repeatedly throwing yourself at a wall of incoming lead fired by infinitely regenerating enemies until your bullet-riddled corpse managed to slide to rest far enough forward to advance the game. Instead, a limited number of guys will appear, and you can generally clear an area before proceeding. When it works out, you feel all satisfyingly tactical and badass. When it doesn't, it can admittedly be a bit frustrating, but at least retrying is quick.&lt;br /&gt;&lt;br /&gt;There are lots of unusual or gimmicky gameplay moments, like climbing ledges with an ice pick, breaching doors to rescue hostages, or operating a Predator UAV. These do add welcome variety, but I can't help but suspect that they took a lot of development time and as a result the single-player campaign is going to be pretty short.&lt;br /&gt;&lt;br /&gt;Once it's over with I suppose I'll try the multiplayer; I'll reluctantly admit to being curious about what this "Special Ops" co-op gameplay type is. But I fully expect that, since I didn't pick the game up at midnight and spent two days going through the single-player campaign, everyone else online will already be a million times better than me.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:183716</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/183716.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=183716"/>
    <title>Afterlife Blues update.</title>
    <published>2009-11-10T06:51:06Z</published>
    <updated>2009-11-10T06:51:34Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <category term="games"/>
    <lj:music>Sander Kleinenberg - Sacred</lj:music>
    <content type="html">&lt;a href="afterlifeblues.com"&gt;Right over here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So tomorrow &lt;i&gt;Modern Warfare 2&lt;/i&gt; comes out.&lt;a href="#*"&gt;*&lt;/a&gt; I'll be getting it, of course. Not for the multiplayer -- frankly, the online culture for most FPS games is my own vision of Hell -- but for the single player, because nobody does ridiculously over-the-top yet quote-unquote "realistic" like Infinity Ward and it looks like MW2 is taking that ball and not just carrying it down the field but putting it on a rocket and launching it out of the stratosphere. Seriously, look at 0:58 in the &lt;a href="http://www.youtube.com/watch?v=429l13dS6kQ"&gt;official launch trailer.&lt;/a&gt; I'm not just using those space-themed concepts as a &lt;i&gt;metaphor&lt;/i&gt; here, people.&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a name="*"&gt;* Technically it's already come out as of midnight tonight, but &lt;a href="http://www.penny-arcade.com/comic/2009/11/9/"&gt;Penny Arcade&lt;/a&gt; already said all that needs to be said about that kind of nonsense.&lt;/small&gt;&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:183395</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/183395.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=183395"/>
    <title>If the robots win, we'll have to listen to techno!</title>
    <published>2009-11-09T04:20:23Z</published>
    <updated>2009-11-09T04:21:50Z</updated>
    <category term="nerd"/>
    <category term="neon galaxy"/>
    <lj:music>Scissor Sisters - I Can't Decide</lj:music>
    <content type="html">As should surprise nobody whatsoever, I suddenly got bored with the galaxy/solar system rendering stuff in my game engine and so now it's back to &lt;i&gt;Neon Galaxy&lt;/i&gt; again. Specifically, the item I got stuck on before switching projects was polygon clipping. I'm now determined to fix that thing once and for all if it &lt;i&gt;kills&lt;/i&gt; me.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;2D polygon clipping is a deceptively simple concept. Let's say that in your 2D game engine, you want to represent the world as a series of &lt;a href="http://www.emanueleferonato.com/images/convex_concave.png"&gt;convex polygons&lt;/a&gt;. This is a great thing to do, as virtually all of the geometry involved in game programming -- telling if you're inside a particular polygon or not, for example -- is much easier when limited to convex polygons. Most of the concave algorithms can be summed up as "first break the concave polygons up into convex ones, then do it the &lt;i&gt;right&lt;/i&gt; way" anyway. In &lt;i&gt;Neon Galaxy&lt;/i&gt;, the asteroid mines are represented as a series of connected rooms and caverns, each of which is convex.&lt;br /&gt;&lt;br /&gt;But the alert among you may already have noticed the problem: that word "connected." Laying down corridors and caves as I do, they're going to tend to overlap each other if I'm not careful. And that's not always a bad thing -- if my program is smart enough to notice that a corridor overlapped a room and is able to turn that into a valid exit from the room, it'll be much easier to lay out the maps. But the thing is, if you take two convex polygons and just mindlessly overlap them, the result will almost always be concave. How can we overlap them intelligently instead, producing as output a list of convex polygons and a list of newly created edges between them?&lt;br /&gt;&lt;br /&gt;I came up with an algorithm that can briefly be summed up as: Start with any point on Polygon 1 that is not enclosed by Polygon 2. Start following the border of P1 until it interesects P2. Then, temporarily follow the border of P2 instead until you once more reach P1; the result of doing this is a new polygon, which is thrown on an output list. Continue on around P1, again temporarily following P2 when needed, until you return to your starting point; throw this last polygon, created from P1, on the list as well. So, how well does it work?&lt;br /&gt;&lt;br /&gt;&lt;img src="http://project-apollo.net/pie/vector/vector32.png" align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;Here we have a polygon menagerie. At the bottom are two randomly generated polygons, and at the top are the results of clipping them together using my algorithm. It does work quite nicely! However, the dirty little secret is that this is my &lt;i&gt;second&lt;/i&gt; attempt at implementing the algorithm. The first attempt was done several months ago, and is used to generate the maps seen in my previous &lt;i&gt;Neon Galaxy&lt;/i&gt; post. However, the code was extremely complex and difficult to debug, and as a result I was unable to get it working perfectly. This new version is rewritten from scratch with the express goal of being easy to debug. To that end, note the green and yellow dots on the image. The clipper actually maintains a list of all the points it examined around the perimeter of the polygons, and it can be commanded to animate that list over time. So, I can actually watch the clipper output replayed in this image. That was invaluable in tracking down miscellaneous bugs in the system.&lt;br /&gt;&lt;br /&gt;So is it perfect? No. Consider these two really aggravating edge cases:&lt;br /&gt;&lt;br /&gt;&lt;li&gt;What if one polygon touches the other &lt;i&gt;precisely at a single point&lt;/i&gt;?&lt;br /&gt;&lt;li&gt;What if the edge of one polygon &lt;i&gt;precisely overlays&lt;/i&gt; an edge on the other?&lt;br /&gt;&lt;br /&gt;Hah! Not so smart &lt;i&gt;now&lt;/i&gt;, are you? The previous implementation  fell apart in these cases, which is especially unfortunate as any method which deliberately overlays multiple polygons -- in order to create naturalistic-looking caverns, for example -- is going to generate them repeatedly. I am fully confident that the new implementation will also fail. My hope is that the simpler code, combined with the visual debugging, will allow me to deal with these edge cases and, in the end, freakin' &lt;i&gt;get on with this stupid game.&lt;/i&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:183137</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/183137.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=183137"/>
    <title>Afterlife Blues update.</title>
    <published>2009-11-08T00:19:46Z</published>
    <updated>2009-11-08T00:19:46Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <lj:music>Rob Dougan - Chateau</lj:music>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;It was actually uploaded a day or two ago&lt;/a&gt; but I just fixed a problem with the art and re-uploaded it.&lt;br /&gt;&lt;br /&gt;Looking back over the comic so far, I have to admit... while I'm usually pretty down on my art quality in this project it's actually been, you know, not really all that bad! At least from time to time!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:182802</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/182802.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=182802"/>
    <title>Afterlife Blues update.</title>
    <published>2009-11-03T16:07:33Z</published>
    <updated>2009-11-03T16:07:33Z</updated>
    <category term="pie"/>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Updated last night.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In conclusion, I give you the feel-good hit of the summer.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="36" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:182755</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/182755.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=182755"/>
    <title>Afterlife Blues update.</title>
    <published>2009-10-27T04:36:04Z</published>
    <updated>2009-10-27T17:31:27Z</updated>
    <category term="pie"/>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <lj:music>Miss Li - Bourgeois Shangri-La</lj:music>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Here.&lt;/a&gt; It includes trucks! You like those, right?&lt;br /&gt;&lt;br /&gt;In conclusion, I give you Biff's Question Song.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="35" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:182242</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/182242.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=182242"/>
    <title>Commute to work and home in your own private helicopter, miracle acrylic bubble makes it possible.</title>
    <published>2009-10-25T03:46:15Z</published>
    <updated>2009-10-25T03:46:15Z</updated>
    <category term="neon galaxy"/>
    <lj:music>Bladiator - The Golden Ivories of Gaia (FF7 OCREMIX)</lj:music>
    <content type="html">Surprisingly productive day, game-engine-wise.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;img src="http://project-apollo.net/pie/vector/galaxy6.png"&gt;&lt;br /&gt;&lt;br /&gt;Here, as promised, we can see a few neat things:&lt;br /&gt;&lt;br /&gt;1. The galaxy looks quite attractive from the inside. The only real change I've made, besides fixing a blending glitch, is to fade the nebulae out as the camera gets closer to them in order to prevent them from overwhelming the sky. (This is also scientifically accurate, as emissive nebulae far from the Earth only look bright because all their light emission is packed into a very tiny section of the sky. Yes, &lt;i&gt;Babylon 5&lt;/i&gt;'s effects guys lied to you -- those beautiful Hubble-photographed nebulae wouldn't even be visible to the naked eye if they were that close.) That said, since I always rebuild the galaxy geometry to look good from a new position, it wouldn't be hard to keep track of how densely packed the area around the view position is and do full-sky effects based on that.&lt;br /&gt;&lt;br /&gt;2. I've added the start of facilities to draw planets. Right now, there are no textures or effects -- the planet is a simple sphere, created by subdividing an icosahedron several times. I did come up with a satisfying way of building the subdivided sphere in a way that was able to use index buffers, though.&lt;br /&gt;&lt;br /&gt;3. I added a cLight class to the engine, to manage OpenGL's legacy lighting pipeline. I suppose these days you're supposed to do some awesomely clever thing with shaders or whatever instead of using said pipeline, but I just can't be bothered at the moment.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:181857</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/181857.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=181857"/>
    <title>Afterlife Blues update.</title>
    <published>2009-10-23T04:39:22Z</published>
    <updated>2009-10-23T04:39:22Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <lj:music>Paul van Dyk - Complicated (feat. Ashley Tomberlin)</lj:music>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Get your daily allowance of crinoline, stern looks, and weird jackets that zip up the wrong way here.&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ksleet:181586</id>
    <link rel="alternate" type="text/html" href="http://ksleet.livejournal.com/181586.html"/>
    <link rel="self" type="text/xml" href="http://ksleet.livejournal.com/data/atom/?itemid=181586"/>
    <title>Afterlife Blues update.</title>
    <published>2009-10-20T04:52:00Z</published>
    <updated>2009-10-20T04:52:00Z</updated>
    <category term="comics"/>
    <category term="afterlife blues"/>
    <content type="html">&lt;a href="http://afterlifeblues.com"&gt;Here&lt;/a&gt;, so... yeah!</content>
  </entry>
</feed>
