Latest Entries »

I’ve been playing video games for about 27 years now, starting with the NES, and I’ve never been less hyped about a Nintendo console or handheld.  I don’t think I’m alone here and my issue isn’t the price, it’s Nintendo’s track record.

Nintendo’s last handheld, the 3DS, is on its 3rd hardware revision.  The original 3DS was a beautiful system that I’ll miss owning, but holding it hurt my hands and it managed to scratch itself… so I upgraded to the XL.  I thought it was dumb that the XL didn’t include a 2nd analog stick, since at the time Nintendo was selling that idiotic Circle Pad Pro accessory, but whatever.  A little later and Nintendo released the New 3DS XL, which not only has a 2nd analog but superior guts which allows for SNES emulation and things like a Xenoblade port.  Having spent $250(?) on my launch 3DS and another $100 upgrading to the XL, I sat out the New – it just isn’t worth it.

Nintendo’s last home console, the Wii U, they supported for basically 4 years… the first and last of which were droughts.  3rd parties were repulsed by the comparatively weak hardware and while the 1st party games were excellent, they disappeared for the last year while Nintendo shifted all development to the Switch.

So the situation I’m looking at is Nintendo releasing a hybrid handheld/console, when they’re on the 3rd hardware revision of their last handheld and they supported their last console for just 4 years.  They’re launching in the middle of a generation with hardware that’s weak compared to the PS4 and Xbox One, to say nothing of the PS4 Pro and Project Scorpio.  Combine that with the poor localization coming from Nintendo of America and it’s just…  sad.

Sorry Nintendo.


My controversial ideas I should probably keep to myself: Diversity should be a natural side-effect of equality – when we treat each other as equals, everyone will be judged on merit and other things (race, sex, age) won’t be part of the equation.

We never quite managed to get equality as a society – we became obsessed with jumping straight to diversity. In order to achieve diversity without equality, we had to attach additional value based on the phenotype of an individual. Our society is unwittingly attempting to achieve diversity by sacrificing equality – we purposefully draw attention to the things that make us different.

To say that this is divisive is an understatement.

ie. Buying a game gets you a game, but buying a game made by a woman gets you a game and diversity. It doesn’t stop there – it extends to supporting publications based on the gender and orientation of journalists, watching streamers on Twitch, supporting creators on Patreon, funding KickStarters, etc. Any movement which supports one person over another based on phenotype is discriminatory – discrimination always invites blowback.

We’ve gone from embracing one divisive paradigm (the old boy network) to another (the diversity movement) and there is no end in sight – there is nothing unique about gaming, it is just another battleground.

If you identify as a feminist, SJW, MRA or anything else I think you’re going about things the wrong way… but I don’t blame you.

  1. It’s possible we’re living through a period, like when mascot platformers or World War 2 shooters reigned supreme, which will naturally decline.
  2. If someone feels their values/beliefs/gender/skin/sexuality/etc. aren’t represented in art they’re free to express themselves through creation (making games has never been easier!)
  3. Consumers will probably tire of any trend and begin seeking novelty – underrepresentation is opportunity.
  4. The only games which actually represent players feature character customization which usually allows for female characters to be created.
  5. If VR takes off and you look down and your boobs are gone then you’re probably not going to be immersed.

I made two games for Flappy JamSurvival of the Flappest and Unflappable Dev.

Unflappable Dev was the first thing I ever made with Construct 2, Survival of the Flappest was the second. You can read my impressions of this tool over on reddit.

So far I’m getting a really good response! Unflappable Dev was mentioned in articles on Touch Arcade and the Italian version of WIRED!

The response on Twitter has been swell:

Survival of the Flappest got a little praise, too!

Game jams are pretty great.

Screen Savior

A game consisting of discrete stages where you fight your way through the screensavers of Windows 3.1 and Windows 95.

Blast Windows logos, fly through the starfield, avoid scrolling volcano names, solve the maze, ride the pipes, etc.

Trollplaying Game

F2P MMORPG where you’re always in a single player instance, chat is global and all gameplay is quick time events. All chat is voice chat and the volume of a user is determined by the pitch of their voice. You cannot fail events, though earnest success earns you more experience – the game has RPG elements like a tech tree and stats, though the stats raise automatically when you level and the tech tree is entirely linear. Equipment is purely aesthetic, though you’re only able to obtain wearable equipment from a global auction house (the only verb you’re afforded on found equipment is ‘list’.) You build a character by placing 2 of the abilities you’ve unlocked onto a hotbar, which is activated with the ESC and Pause/Break keys.

Site update!

Added summaries to Projects page so folks clicking the menu will get something for their time.

Added Publications page (I need to see if Dr. Karnick has a webpage!)

Added pages on CPPNs, Pokepikaso and Steamgifter to Projects.

Moved reddit profile link to About Me menu, added links to Twitter, facebook and Linked In.


Looks better in motion

Looks better in motion

Combining layers with designer specified functions to form a hierarchy.  The first function transforms the value in the first layer, the second function transforms the value in the second layer, the third function combines the two.  The input data to the functions pictured isn’t from a layer, this is just dummy data (the position on the X and Z axes.)  Spatial utility.

GL is nice.

GL is nice.

Unity Performance

This is rendering a bit too slowly, the FPS drops so low the Cubiquity terrain doesn’t finish rendering. Hmm.

Changed some stuff.  Still need to track down allocations.

Changed some stuff. Still need to track down allocations.

This is not a game.

In Progress

In Progress

Windows 8

Windows 8 is bland, ugly and confusing… but it’s optimized, it boots quickly and runs smoothly, meaning it isn’t altogether terrible. The developers did a good job. The designers inserted head in ass.

There is no conveyance, so for perhaps the first time I’m using an OS where operating the computer feels like magic. Not Apple it-just-works magic, mind you, I’m talking voodoo – you luck into a way of doing something, like turning off the computer from the settings menu, and you’re never sure if there’s another way (because goddamn that’s weird!) but you’ll do it that way from now on because it took forever to discover and it worked that one time.

The only truly baffling thing about a fresh install is having the Metro version of IE open while you’ve got the Desktop IE open, because you expect they’ll have access to the same tabs (and of course they don’t.) The gestures have zero discoverability, unless you’re the type who clicks and drags and pokes at screen edges, which is the type of user you’ll become after installing Windows 8.

Verdict: I don’t completely hate it.

I’m moving to wordpress from blogger, we’ll see how it goes.

I’ve lost some formatting in the import, apparently – if this impacts your enjoyment, feel free to check and  Looking at posts from 2003/2004 it appears I lost some images during one of many FTP transfers throughout the years – I’ll be attempting to recover everything, for posterity’s sake.

A note to friends, fellow developers and HR puff & stuffs: if you go back far enough on this blog, you’ll probably find something you don’t like.  I’ve got the same problem.  I don’t have the time (machine) to go back and self-censor and you shouldn’t have the time to read inane blog posts until you become offended, so let’s just pretend I’ve always been full of sunshine and happiness, as I am now, instead of spirits and vitriol, as I used to be.

I did a tiny writeup on my profile on, but I’m not sure what people want to know =]

The first thing I tried was a bot based on potential fields, because the map didn’t have obstacles and potential fields are easy… but I wasn’t getting good results – it was barely beating!  This bot was scrapped, never to be seen again.

Then I cobbled together a simple bot based on distance maps, which I’d intended to improve, but after watching it in a handful of practice rounds against other players I realized all of us had many areas on the map with more than 1 chicken.  Any chicken not working for a living had no place in my society.

So I started thinking A*, which might’ve looked like Brixican‘s bot (except I would’ve avoided the 2 chickens 1 farm scenario)…  and then I was thinking Dijkstra, because it would probably be ‘good enough’ to path to the nearest empty/enemy… but then I realized that was also overkill, because all the edge weights are 1, so I went with a simple breadth-first search.

So my BFS bot was humming along, expanding in a pyramid (turtle!), but since I could really only expand from a single space with multiple chickens in 4 directions at once, I added some logic that moved extra chickens… somewhere.  I tried moving them several different places, actually – some variations tried to expand towards money or food or the enemy’s money or food, but ultimately the version which expanded towards the enemy’s spawn beat the rest when I pitted them against each other.  There’s always room for chickens on the front lines.

So that bot was pretty successful but then I suspected that other players would also devise this expand-as-fast-as-possible strategy, so I should prioritize expansion *and* food…  so I added some logic which caused any chicken not already issued an order to move onto an adjacent empty/enemy area, if that area offered additional food.  I thought this was good, and it beat the other variations… most of the time.

Sometimes, though, one of the other variants which just expanded would still win – sure, I’d have more food and chickens, but my chickens would be abandoning money in favor of food while my opponent would be occupying every space in his radius… leading to economic victory.

The first change I made was that the food seeking logic would only kick in if the enemy had more food than I did – this seemed to work well enough… and, indeed, this is the only behavior which kicks in during the tournament (sadly!)

The next thing I experimented with was prioritizing money instead of food – this is usually suicide, but if you wait until around the middle of the game… and you only attempt to beat your opponent by a narrow margin… you can sometimes snag a win from what otherwise would be certain defeat.  This behavior never showed up during the tournament, but I basically guessed that the average payout rate was 0.5 (I really should’ve tested this) and so if my enemy controlled half the map, they could expect to receive height*width*0.5*0.5 = 625 money per turn.  So, if at any point after turn 500 my bot doesn’t have more than 625 chicken dollars than my opponent, the chickens attempt to occupy wall street.

That’s basically how I arrived at the champion AI, I just kept writing bots and pitting them against each other while trying to think of both the optimal strategy for the game and anticipating that my enemies would be doing the same.  I really thought phoenix was going to win, because I’d watched a previous match and it looked like his strategy was similar to mine except he was seeking resources with pathing instead of hill climbing, though it appears that in our match he suffered from a lower population due to wasting multiple chickens on a single space.

While I’m glad that my bot never needed to prioritize money, I would have liked to have seen that happen – as-is all of my matches were pretty boring.  I’m still thrilled I won, though! =]

PS4 vs Xbox One

Anything you can do,
I can do better.
I can do anything
Better than you.

No, you can’t.
Yes, I can. No, you can’t.
Yes, I can. No, you can’t.
Yes, I can,
Yes, I can!

Anything you can be
I can be greater.
Sooner or later,
I’m greater than you.

No, you’re not. Yes, I am.
No, you’re not. Yes, I am.
No, you’re NOT!. Yes, I am.
Yes, I am!

I can get a Halo
from anyone that I know.
Enjoy your Metroid Prime clone
I’ve got another Killzone.

I can live on FPS.
And only on those?
So can the bros!

Any score you can get
I can get higher.
I can dev anything
better than you.

No, you can’t. (High)
Yes, I can. (Higher) No, you can’t. (Higher)
Yes, I can. (Higher) No, you can’t. (Higher)
Yes, I can. (Higher) No, you can’t. (Higher)
Yes, I can. (Higher) No, you can’t. (Higher)
Yes, I CAN! (Highest)

Anything you can sell
I can sell cheaper.
I can sell anything
Cheaper than you.

700 bucks?
600 bucks!  500 bucks?
400 bucks!  No, you can’t!
Yes, I can,
Yes, I can!

Any noise that you make
I can make lesser.
I can do anything
less loudly than you.

No, you can’t. (Softly)
Yes, I can. (Softer) No, you can’t. (Softer)
Yes, I can. (Softer) No, you can’t. (Softer)
Yes, I can. (Softer)
YES, I CAN! (Full volume)

I enlarge a buffer,
faster than a fluffer.
I compute things quicker
while uploading to Flickr.

I can rely on the cloud.
While always online?
That’s really not fine–
you crook!

Any buzz you can build
I can hold longer.
I can hype any fan
Up more than you.

No, you can’t.
Yes, I can No, you can’t.
Yes, I can No, you can’t.
Yes, I can
Yes, I-I-I-I-I-I-I-I-I No, you C-A-A-A-A-A-A-A-A-A-A-A-A-N’T–
CA-A-A-A-N! (Cough, cough!)
Yes, you ca-a-a-an!

Anything you can buy
I can use better.
In what you use
I’d run better than you.
In my RAM?
In your cloud! In my Glass?
In your case! No, you can’t!
Yes, I can
Yes, I CAN!

Anything you can draw
I can draw faster.
I can draw everything
Faster than you.

No, you can’t. (Fast)
Yes, I can. (Faster) No, you can’t. (Faster)
Yes, I can. (Faster) Noyoucan’t. (Faster)
YesIcan! (Fastest)

I can help with fitness.
I can play The Witness.
I have Xbox Live Gold.
I give games that aren’t old.
I can do most anything!
Do you have backwards compat? No.
I guess we share that.

Anything you can say
I can say clearer.
I can say anything
Clearer than you.

No, you can’t. (Mumbles)
Yes, I can. (Clearer) No, you can’t. (Mumbles)
Yes, I can. (Clearer) No, you can’t. (Mumbles)
Yes, I can. (Clearer) No, you can’t, can’t, can’t (Guttural)
Yes, I can, can, can (Shakespearian)

Yes, I can! No, you can’t!

My cat is the best cat. She goes to the bathroom in the bathroom like a person. My other cat is also the best cat, she loves to eat and always sleeps where it is the warmest. My girlfriend is the best girlfriend, she buys me good food at the store and kisses me and says nice things a lot. I study computer stuff and how to make better bad guys in computer games, like how to make the bad guys do better stuff and act more like people. I have the best life and I never sleep.

If I ever hire an engineer…

We’re just trying to gauge your thinking process, so feel free to ask questions.

How many ounces of mood slime would it take to provide a coat 1″ thick covering the interior of the statue of liberty?

If you were attempting to interface this psychoreactive ooze with peripherals designed for a Nintendo Entertainment System, what steps would you take?


I was reading about some fearsome new variety of spider they found in Oregon and apparently this thing is related to goblin spiders.

Yes, according to Wikipedia there are around 1,000 species of goblin spiders – that’s a lot of goblins!

This evil little guy is a Silhouettella assumptia. Looks like a red Tektike. Neat!
And then, of course, there is the Goblin shark which is terrifyingly awesome.

Anna on the news!

The Paranormals

When I was really young I remember something inhuman saying my name.

When I was older I saw a ghost arm come through the wall – I was too young to freak out (until I walked into the other room trying to find the rest of the person and it was empty.)

When I was older my Mom and I thought we saw some UFOs while flying kites – neither of us can remember anything that happened after that.

At some point I saw Big in a Fox theater with my Dad – we got the mystery ending that everyone denies filming (the female love interest makes herself younger and shows up as a new student in the main character’s class.)

A few years later, I heard some clicking and visualized something I identified as an engine that was based around a toroidal magnetic field.  No idea where that came from.

At some point, I jokingly claimed to have caused an earthquake.  Mom told me to cause another, so I strained really hard.  Apparently at that moment there was a massive earthquake somewhere (we read about it the next day.)

In the field between my house and my grandparents house in Upperco, MD there was a spot in the field that was always noticeably cooler to stand in.  As a kid I figured something was buried there.

As a pre-teen there was a screaming sound coming from a nearby field – we called it ‘the creature.’  Dad and I went out to investigate and we’re 99% sure it flew, because the sound seemed to come from in front of us and then behind us.

In college I noticed street lights would wink a lot around me so I looked at one and thought “c’mon, wink out” – it did.

I don’t believe in the paranormal.

On Mass Effect 3

I think it’s worth appreciating that ME3 was created as a product first and foremost, that any artistic merit the game has was added for profitability.  This isn’t some indie passion project or an art installation – this is a mass-market product.

If we were talking about dissatisfaction with the graphics engine, the networking, the dialog trees – any of the technical parts of the game which had an equal amount of creativity poured into them – I doubt anyone would support a position of ‘Will Not Fix.’  As a developer, I find this insulting.

Game reviewers are writers – writers sticking together should not be surprising.  It should not surprise anyone that writers believe that their art is somehow sacred – that all things about a game should be malleable except the plot.  If software developers felt this way about their work, the entire industry would grind to a halt.

I haven’t played Mass Effect 3, so I can’t judge the ending, but it seems like this was the result of inadequate playtesting.


So I’m taking CS500 this semester with Dr. Gary Herron and he mentioned one of the sample images we work with reminded his daughter of fractals.  Well, back in the 90’s I remember fractals being super cool, so of course I instantly decided I should learn how to raytrace them!  Raytrace is probably the wrong word – although I’m working with my raytracer, these shapes are using raymarching and some of the coolest things ever, distance estimators!

Anyhow, just in case anyone else is as interested in this as I am, I recommend starting here.
Here are some pictures I’ve generated so far:

More Dreaming

Thought up a new way to handle cube-based construction in a game – potentially really cool, hopefully I’ll either have time to try it someday, document it or someone else will beat me to the punch.  It isn’t voxel based (unless your voxels are teeny-tiny.)  Just posting here so I won’t forget, chonestly.

Dream Game

I just had a dream I was working on the following game:

It’s like Pokemon, where you train monsters to fight other trainers, except instead of a turn-based battle the combat takes place in real time in an arena.  The monsters are controlled by AI, leaving you to control your trainer – who actually fights (with boxing gloves.)  Other trainers are typically horrified to see you fighting their monsters.

The story is that you were a master of these battles back when the monsters made sense and there was a human component, but many years have passed since then and you think the new monsters the kids have found are dumb and this makes you very angry.  So you’re basically one of those 151-elitists…

Oh, and the first monster you start with is Meat Boy.

Then I woke up, I think Ivy jumped on me.

Invent words

Words which mean opposite things should have the first letters reflected across the center of the alphabet with the bigger/better version being on the right side…  so instead of min and max, you’d have min and nax.  Endothermic and exothermic?  Which is which, I can’t tell, but call them endothermic and vxothermic and all is clear.  Good and bad?  Yood and bad (or vood and evil, ymmv.)  This is a treat idea.


GDC is quickly approaching and Voxel Chronicles isn’t yet where I want it to be.

Here is the roadmap, though – in case you’re curious as to what I’m working on or how long something took.

His bed.

An integral part of the very short plot/tutorial level. Obviously our hero would have a Dwarf Fortress themed bedroom, pfft.

Link to video
Link to code

Weapons point in (0,0,-1) in model space with the tip of the handle located at (0,0,0). startingOffset and endingOffset are two vectors controlling the direction of the swing – for the mace above, they’re set to (0,1,-1) and (0,-1,-1) and then normalized (before we hit the code below.) The code is longer than it needs to be mainly for debugging/clarity, as I’m trying to isolate the problem. Any help is much appreciated!

The code looks like:

// this will be the player's transform
Transform* parentTransform = (Transform*)parent->GetComponent( CT_Transform );

if( parentTransform )
Body* weaponBody = (Body*)owner->GetComponent( CT_Body );

// The location of the wielder
btVector3 parentPosition = btVector3( parentTransform->position.x, parentTransform->position.y, parentTransform->position.z );

// The rotation of the wielder
btQuaternion parentRotation = btQuaternion( parentTransform->rotation.x, parentTransform->rotation.y, parentTransform->rotation.z, parentTransform->rotation.w );

// The weapon is offset from the parent position (to a point corresponding to the player's hand)
// TODO: Pass this in from the character controller
btVector3 handOffset = btVector3( -4, 1, -4 );

// this was to handle weapons with widths that are even
if( weaponBody && weaponBody->offset.x > 0 )
handOffset.setX( handOffset.getX() + weaponBody->offset.x );

// currentVector is some portion of the way between starting and ending offset
float progress = currentSwingDuration / totalSwingDuration;

btVector3 parentAxis = parentRotation.getAxis();
float parentAngle = parentRotation.getAngle();

// Rotate starting/ending to align with player, interpolate based on progress to get current
btVector3 rotatedStart = startingOffset.rotate( parentAxis, parentAngle );
btVector3 rotatedEnd = endingOffset.rotate( parentAxis, parentAngle );
btVector3 currentVector = rotatedStart.lerp( rotatedEnd, progress );

// get axis/angle to rotate starting vector to current
btVector3 planeThatRotatesStartToCurrent = rotatedStart.cross( currentVector );
float angleThatRotatesStartToCurrent = rotatedStart.angle( currentVector );

// get axis/angle to rotate weapon to start
btVector3 planeThatRotatesWepToStart = btVector3( 0, 0, -1 ).cross( rotatedStart );
float angleThatRotatesWepToStart = btVector3( 0, 0, -1 ).angle( rotatedStart );

// Rotate the handOffset
handOffset = handOffset.rotate( parentRotation.getAxis(), parentRotation.getAngle() );

//DebugDraw::instance.drawLine( parentPosition + handOffset, parentPosition + handOffset + ( currentVector * 30.0f ), btVector3( 0, 1, 0 ) );

// get a quaternion to rotate the weapon from it's default direction (0, 0, -1) to current...
btQuaternion weaponRotation = btQuaternion( planeThatRotatesStartToCurrent, angleThatRotatesStartToCurrent ) * btQuaternion( planeThatRotatesWepToStart, angleThatRotatesWepToStart );

// Push currentVector out based on the length of the weapon (we want the handle of the weapon located at the origin)
if( weaponBody )
currentVector *= abs( weaponBody->offset.z );

currentVector = currentVector + handOffset + parentPosition;

// Communicate the new position + rotation to our parent composition
owner->ReceiveMessage( &DataMessage( MSG_SetRotation, XMFLOAT4( weaponRotation.getX(), weaponRotation.getY(), weaponRotation.getZ(), weaponRotation.getW() ) ) );
owner->ReceiveMessage( &DataMessage( MSG_SetPosition, XMFLOAT3( currentVector.getX(), currentVector.getY(), currentVector.getZ() ) ) );

In mathematics, the quaternions are a number system that extend complex numbers.  A complex number is a number which can be put in the form a+bi, where a and b are real numbers and i is called the imaginary horror, a source of constant anxiety for mathematicians at a subconscious level, which when squared equals -1.

In January of 1843 the Irish explorer Sir William Rowan Hamilton discovered the tomb of Euler and, within it, a mural depicting the deceased mathematician crying a mixture of alphanumeric characters while vomiting into a four-dimensional box.  Slumped in front of this mural was the corpse of Euler himself.  As Hamilton would later write:

“I did not expect to find Leonhard Euler in Peru – his death in Russia a century ago is common knowledge.  If this was truly his final opus, perhaps his countrymen banished him for madness and then claimed him dead to save face?  My peers in academia refute my findings and my guides in the jungle refused transport for the corpse.  I’ve been dreaming of that day ever since – the smell, the heat, the symbols.  My dreams are becoming stranger still – last night Fourier was there with us, furiously peddling a child’s tricycle in tight circles, mumbling rhythmically in cacophonous tones while Euler stalked the four corners of the room.”

Later that year, while walking along the towpath of the Royal Canal with his wife, Hamilton began muttering and carving into the stone of Brougham Bridge.  His wife, concerned he was becoming unstable, transcribed his muttering as “Iejays’k jaykays’i  kayeye’sjay Cthulhu R’lyeh wgah’nagl fhtagn.”  His carving simply read: i2=j2=k2=ijk=-1.

On the following day, Hamilton wrote a letter to his friend and mathematician, John T. Graves.

“And here there dawned on me the notion that we must admit, in some sense, a fourth dimension of reality for the purpose of communing with triples… An electric circuit seemed to close, and a spark flashed forth in the darkness.”

Hamilton called a quadruple with these rules of multiplication a quaternion, and he devoted most of the remainder of his life to studying and teaching them. He founded a cult of “quaternionists” and authored several grimoires, the last and most powerful of which was titled Elements of Quaternions.

Although incomprehensible, Hamilton’s followers digitized and distributed his work in the late 20th Century, where it was rapidly adapted due to a preternatural ability to compactly describe spatial rotations without being susceptible to gimbal lock.  As of 2012, quaternionists have successfully infiltrated the following fields: computer graphics, computer vision, robotics, control theory, signal processing, altitude control, physics, bioinformatics, molecular dynamics, computer simulations and orbital mechanics.

Surviving quaternionists conduct an annual pilgrimage from Dunsink Observatory to the Royal Canal bridge where, fortunately, no trace of Hamilton’s carving remains.

It’s training, dummy!

A* + JPS

Finally got my A*+JPS implementation from last semester’s AI course into the game! Agents aren’t following the generated waypoints yet but the paths are coming in quickly and optimally, just the way we like them.

Old Firebalton

This is not my happy place.

Fixed a bug with the lighting = can zoom closer now (for now.)

Genesis does what Nintendon’t!

Still nothing to marvel at, but I’ve got some material properties in my alpha channel now – a 9-bit glow color and 2-bit shininess. Wikipedia tells me 9-bit color was used by the Sega Genesis (SNES used 15-bit) – neat, eh?

SOPA? Nopa!

If anyone missed my SOPA blackout yesterday, click this.

Also, snow – there is a lot of it.  I think that wraps up yesterday’s news.

A triumph!

You’d never know, but that represents several hours of research into alpha blending and blend states and whatnot – eventually it dawned on me that CEGUI was changing my blend state and, yeah, I can write the alpha channel into my render targets (again?) – HOORAY!

I’m protesting SOPA on, btw.


Anna’s Private Practice

Anna has a new site for her private practice over at so if you’re having mental problems don’t hesitate – seek professional help.  From her.

12 cubes and suddenly…

I’m in Duckburg, woohoo!

Particles + Equippables

I couldn’t resist posting another video…

Missing in Action?

End of the semester means three things:

  1. Deadlines
  2. Finals
  3. Christmas
Don’t despair!  I doubt I’ll be able to resist procrastinating by updating the game (and this blog) but just in case you’re reading this at the end of December and there haven’t been any updates, here’s the todo list as of 11/30/2011:
  • Weapon models
  • Equippable weapons
  • Player stat increases -> in-game effects
  • Enemy/item ‘lock-on’ (mouse over, then hold mouse button -> move to range, interact)
  • Shift + click -> attack in direction
  • Level transitions
  • Knockback
  • Item stats UI
  • Glow
  • The Altar of Sacrifice
  • Drop-at-location
  • Fix item-in-world Physics (centers of gravity are wrong)
  • Limit picking up (LOS + distance)
  • Fix UI alignment issues
  • Refactor AI System
  • Add projectile enemy AI
  • Projectile weapons
  • Auto-detect screen resolution
  • Options menu
  • Battery acid secret level (thanks John Y!)
And a list of possible features:
  • Elemental damage/resist
  • Light-color-based Invisibility (thanks John Y!)
  • Potato-on-attack (thanks Portnow)
And a list of potential enemies:
  • Headless
  • Minotaur (thanks John S!)
  • Cyclops
  • Medusa
  • Basilisk (thanks John S!)
  • Animated Statues (of all other monsters, thanks John S!)
  • Wild Things (thanks Anna D!)
See?  All that stuff is so exciting, but I’ve got to get back to working on other things.  Like, right now!

GPGPU Particles in Action

This won’t be in the final game, but I’m working on GPU particle systems and cranked the number of particles to 100k.  I thought it looked cool enough to share.  It runs at 60fps up to about 250k particles, drops to 30fps at 500k and 20fps at 1 million.  I don’t expect to be rendering more than ~1250 (using this code.)

Still Kicking

Tanooki Zombie

  • helmet
  • torso
  • pants
  • left arm
  • right arm
  • left boot
  • right boot
And here’s a Skeleton wearing a subset of the above (and a glove on it’s left hand.)

Also, a zombie!

Finally, I got this guy wearing some pants!



Working on equipment means I’ve been spending a fair amount of time with the editor today.  Couldn’t resist!

Reworked Weapon Collision

Did some work on the weapon controller so I’ll be able to detect discrete hits and execute suitable gameplay logic. Currently planned stats include:

  • Strength – hit harder, wear heavier equipment without slowing down
  • Dexterity – hit faster, run faster, melee crits
  • Constitution – live longer
  • Intelligence – magic harder
  • Wit – cast faster, magic crits
  • Wisdom – more magic
  • Luck – more/better loot, melee/magic crits

Weapon Swinging + Explosions

Need to change the weapon from being a kinematic body that collides with enemies to being a combination of a ghost body that collides with enemies and a kinematic body that collides with particles… The current approach isn’t going to work when enemies take more than 1 hit to kill, though batting them across the level is fun. Even more fun? At the beginning of a swing, the weapon might come into existence inside the enemy’s body – resolving this collision results in a wealth of hijinks.