Friday, December 28, 2012

The Turbine

I'm a bit upset at how little hardware stuff I'm doing these days.  When I was maybe eleven or twelve, I dreamed of being an inventor.  Not as a profession -- couldn't care less about that -- but as a hobby thing.  Still do, sometimes, but hardware is expensive: motors aren't cheap, and modern electronics are too proprietary that it's almost impossible to salvage parts from them.

Well, being eleven or twelve I was also deathly afraid of the dark (don't lie; you were too).  So before bed, instead of hitting the lights and running across the (EVIL DARK) room to the safety of my bed, I created a pulley system; I tied a chess piece to an ethernet cord running along the side of my door, and tied some string to the knob, looping it around the chess piece like a pulley and reaching my bed.  So I'd leave the door open to allow the hallway light in before shutting the light of my room, and then, safely in bed, I'd close the door by pulling the string.

But any real hardware was a bit on the expensive side, so I stuck with software.  Software's great; everything you'll ever need to create professional-grade anything is online for free.  Never need a tutor because every technical issue ever is online, at StackOverflow or what-have-you.

After middle-school, though, I was a bit upset at having left my dreams of engineering in the dust, so I tried something in freshman year of high school.  I tried to build a turbine.

So I found an old empty tissue box as the chassis.  There was an American flag in my closet (they would appear on our doorsteps on Independence Day, for some reason), and I stripped the flag off for the pole.  It was a small, wooden one; worked nice as an axle.  Took some paper and cut-taped it to make a little fan-blade thing, and attached it to the axle so it spun pretty nicely.  And then, a candle inside the tissue box.

The idea was simple; I'd light the candle, the fire would build steam inside the box and move up through the hole in the tissue box to spin the blades on the turbine.  So I lit the candle.

It set fire.  Really, really fast.

My backyard filled with the smell of burnt paper and it was all very funny and I never tried it again.  But it was all very nice and I wish I did.

Good times.

Monday, December 24, 2012

Being Asian

Need a break from writing college essays so maybe I'll write some blog essays.  Procrastination seems to be the trend-of-the-year.

I'm Asian.  Yes, I've got the whole squinty-eyed, good-at-math, bad-at-sports thing.  Imagine your stereotypical Asian and then put a windbreaker jacket on him; that's me.

So I always get reactions from peers in the same vein, something like "You're so lucky you're Asian because that means you're really good at math" or what-have-you, and truth be told, it's actually sort of painful being Asian.  Or rather, given accompanying circumstances.  My parents speak Chinese/Taiwanese in the house and are no good at English; likewise, I'm horrible at Chinese/Taiwanese.  So communication works out something like this.

Me: "Can you pass the salt?"
Parents: "What?  You want to buy a car?"
Me: "No can you pass the *points to* salt?"
Parents: "Oh here. *passes eggs*"


Parents: "Hey we're leaving the house, go lock the doors."
Me: "Okay. *does laundry instead*"

Parent-child talks are (thankfully) few and far between, and when they do happen it's a linguists nightmare because we're either A) asking what each and every word means or B) misinterpreting everything we're saying, so I've learned to just do my own thing and hope my parents don't mind because asking for permission is a game of charades every time.

Not complaining, though; mom and dad are fantastic people.  They're magnitudes more progressive than the typical "no food 'til you pray piano five hour!" Asian parent.  Likewise, they're a whole lot smarter and I always feel they were the sort of people overqualified for any position they were ever put in.  My dad's a cook at a sushi restaurant; he studies Chinese medicine and politics in his spare time, while my mom is a teacher and a lunch lady, even though she was a secretary in Taiwan.

Really though, I used to think it was a negative, being Asian.  And then, I noticed something that leverages any communication failures, any culture clashes, any negatives of my ancestral heritage.

We grow our own sponges.

I'm not sure that came across well, but here it is again:


There's a certain type of Taiwanese squash that grows very quickly.  It makes for a great stew and survives year-round.  It's also very soft, so you can knock your teeth out with a hammer and survive on it by swallowing it whole after cutting it up a bit.  Turns out, we use it for something different.  My dad converted the canopy in our backyard into a vineyard by stretching strings over the top.  In three weeks, the squash climbed up the supports and stretched itself over the top of the canopy, and grows by hanging itself from the strings.  After they fully mature, cut off a few for food and leave the rest to die.

When they do die, set the corpses out to dry in the sun for a week, and then cut them open.  Inside is an nifty system of fibers that resemble a soft coral.  It's completed the mighty transform from strange foodstuffs to ultimate dish-washing device.

It's by law the coolest thing ever, and I'm really happy that I'm Asian because it's this sort of cultural vitality that makes living a whole lot more interesting.  I don't even mind that I can't ask my parents where the remote is without making a huge ordeal over it.  Really glad to be a part of this all.

Meanwhile, merry Christmas, everyone, and happy holidays.

Saturday, December 22, 2012

GMC Secret Santa

The folks over at the GMC set up a secret santa thing; you get a guy to make your present for and someone makes a present for you in return.  It's really pretty awesome; I made my guy a little chaotic scrolling Santa-gone-rogue thing, and I thought it was an okay gift (wanted to do something fancier and more catered to my person, although I wasn't sure what to make).

I'm a bit ashamed to post it anywhere, though, especially after seeing the gift Fatih Gürdal made for me:

Cantilever Bridge fanart! :')

Thanks so much, Fatih, if you ever read this, and I'll probably never look at that game the same again.

Monday, December 17, 2012

Ludum Dare 25

Voyage of the Obsolete Goat is finished!

I claim no credit for it as it was essentially all Vincent's (Quantumvm on Ludum Dare) work (he did the coding).  I drew the graphics and attempted some bugfixes and that was about it.

This hands-off-the-code approach is really relaxing; takes the pain out of programming by not actually doing any programming.  Meanwhile I should mention that Vincent did a fantastic job with the code side of it.

If you're a programmer and you haven't worked on a team before, BUILD ONE NOW.  It's really a ton of fun and a whole lot less lonely than coding it yourself.

Sunday, December 16, 2012

7 years of gamedev!

The nice thing about college apps is that they force you to make silly videos like this.

Saturday, December 15, 2012

Ludum Dare 25 - Jammin'

Working with @QuantumNarwhal on a Death Worm spin-off for Ludum Dare 25.  This time it's me on graphics and him on code, which is an interesting twist; it's usually the opposite.

I really enjoy graphics design.  Should do this more often.

Friday, December 14, 2012

C++ : Sketcher - Fourier Transform

I'll make this quick.

Fourier transform is a neat trick used in signal analysis that allows you to isolate frequencies within data.  Look at that badly-scaled Audacity screenshot.  The top track shows a 1000 Hz sine wave added to a 2000 Hz sine wave.  The bottom track shows a spectrogram.  Notice the white bands around the 1000 Hz and 2000 Hz marks.

With the Sketcher project, I was trying to match blobs by partitioning the image into 16x16 px images and running a 2D Fourier transform on them, and hopefully similar textures would also have similar Fourier transforms.

It turns out there's no rotational invariance at all.

Copyright these people
Above are two sine waves and their corresponding Fourier transforms.  The top-left one is perfectly uniform, and the Fourier transform of it in the bottom-left reflects this.  Turn it 45 degrees and the transform is completely off and doesn't resemble the first at all.

So, texture segmentation this way is really awful and I'll have to try something else.

Monday, December 10, 2012

Website Launch

A wild website has appeared!


Organized portfolio for everything I've made.  Purposely left out a few that I hate.  Still under construction.
It's really nostalgic, going through these.  Even the terrible ones.

Using A Small Orange for webhosting.  Great, fast service, and ridiculously cheap ($35 a year for 250 MB storage space and 5 GB monthly bandwidth, plus $10 for the domain and $7 for domain ID protection = $52 a year).

Should mention that I really hate web design but it's gotten a bit more bearable after having learned the ropes by building this.

Doesn't change the fact that it's still awful.

Sunday, November 25, 2012

Charity Game Jam : Gasoline Roulette

The game in ye old'e Funkytron
Made for Ludum Dare's 48 Hour Charity Game Jam.  The game itself is really awful, but you can play it in the Funkytron alongside all the other games that put mine to shame.

Mediafire Download

First time making a game in HTML5 though, and I'm really liking it.  Took about five hours without having learned any of it beforehand (aside from basic Javascript).  Uses LimeJS.

The original idea involved both players drinking a tank of gasoline, and then proceeding to fly into overly-dramatic Mortal Kombat poses while cutting off their own limbs, lighting them on fire, and using them as molotovs to chuck at the enemy player.

And then I remembered this charity was for Make-A-Wish, and that might not bode well with pretty much anyone.

The nice thing about HTML5 is that it's instantly iOS and Android compatible, and I could take this game to market immediately if I wanted to.  It's certainly a lot less painful than coding it up in Java or Objective-C.

Saturday, November 17, 2012

C++ : Sketcher - Oversegmentation

The original image ("MAIN IMAGE") is convoluted with a 3x3 Sobel filter to produce ("CONVOLVED IMAGE"), which is supposed to accentuate edges but it clearly isn't working.  The image is then lazily tacked with a thresholding value to produce individual "islands" of color ("BLOB IMAGE").

Tomorrow will be non-maximum suppression day and then hopefully it won't look so pitiful.

Tuesday, November 13, 2012

Be Nice To Programmers?

Stumbled upon this (or, rather, was shown it).  Read that before you continue.  Here's my take on it:

The difference between programming and, say, sports, is that programming tends to be an all or nothing plan.  You can't build half an algorithm and get half the satisfaction out of it; half an algorithm is, essentially, a broken algorithm.  Zero points.  And when you're dealing with programming, nine out of ten times, your algorithm will be broken.

The positive feedback only comes upon finishing the program, and then it has to be absolutely perfect.

Let me explain from my point of view.  If you've followed this blog at all, you'll know I do a ton of time-crunching game jams.  Imagine this: It's the last hour in what was just a 72 hour jam, where you sacrificed life and limb to finish your game.  You finally submit it within the last few minutes, breathe a sigh of relief, and go test it.

There's a game-breaking bug after the first level.

All of the feedback you get is generally positive, because the indie game community is generally awesome and supportive, but all you can think of is if I had not typed that one variable wrong I would've had a functional game.

The problem is even worse in the work force, because due to the flexibility of digital media/software in general, clients work closely with their programmers to make it worth the project cost.  Hence, every flaw is pointed out.  If the program is not 100% perfect then it's not worth their money.

Now, the absolute worst is when you're working for a large company.

On really large projects, administration tends to partition individual pieces of the issue to different programmers, so that your own job is fairly manageable.  However, it also means that your own job is fairly insignificant.  Imagine being the guy that optimizes shaders in Halo.  There really is no positive feedback, at all.  After slaving on pushing assembly code around for months, once the game's released, you can play it and say, "You see how the light refracts off of mossy rocks?  I made that twice as fast."

Not very satisfying.

Now, here's where I disagree with the original link.  I mentioned that nine times out of ten, your efforts result in absolute failure.  But that other ten percent is the greatest feeling in the world, when you've slaved a week, or two weeks, or even a few hours on a program, and it comes to life and it's brilliant, it's all really worth it.

Monday, November 12, 2012

C++ : Sketcher - Part One

New project!

"Given an image, design a program to draw out the image in sketch form similar to how a human would."

  1. Split "superpixels" of the image through edge detection and pattern recognition.
  2. Guess the subject of the image by finding the area with the highest density of "superpixels."
  3. Use machine learning techniques to sketch the image.
Split "superpixels" of the image through edge detection and pattern recognition.

Saxena, Sun, and Ng offers a super-basic rundown of this.  A guy from the IRC had the idea of running the pattern recognition engine alongside the first derivatives of the images instead of the raw image (via Prewitt or I guess perhaps Sobel too).

Imagine finding patterns in, i.e., a black/white checkerboard.  It'd be easier to detect the square pattern through an edge-detector (Roberts, Prewitt, Sobel) since you'd end with a grid of squares, with no distinguishing black or white, while with the raw image you'd have to convince your program that the color of the square is irrelevant.  Same goes for pattern recognition in a field of grass; the important factor isn't the color of the grass, it's the texture - the repetition of grass-shadow-grass-shadow all along the field.

I'm confident this part won't be too much of a problem.  That being said, I'll probably fail here anyways.

Guess the subject of the image by finding the area with the highest density of "superpixels."

The idea behind this is that areas with low density are either blurred (due to camera focus) or background (sky, etc.), and it'll all be grouped into one superpixel via Step 1.  Now, actually sifting the image for highest densities will be a pain.

The most straightforward way is to just split the image into arbitrary squares (say, 64x64) and the square with the highest number of superpixels wins.  Then, process smaller squares in the same fashion within the candidate square, until some threshold or another.  But this suffers from the fault that there's no stopping the subject from being split in half by the grid.  In fact, it's almost certain to happen.

Probably some way to do this via an undirected graph.

Use machine learning techniques to sketch the image.

Supervised learning and neural networks.  Other than that, no fcking clue.

...It'd be really nice to not have college apps/school.  That way I'd actually be able to work on this.

Saturday, November 10, 2012

VESPER.5 : The Journey

Alas, I have accepted the trials and tribulations of VESPER.5 .  Let's see how long I last.

The game is simple; move once every day.

The experiment is just as simple.  Ever wonder why people play MMORPGs so religiously?  Or why a game feels so much more meaningful when it's 40+ hours long?

There's only one real, reliable way to make players feel awful, and that's making them lose something.  Maybe you can only play the game once.  Maybe the game deletes a random file on your computer every time you get hit.  Or, maybe, make the game so impossibly long that any slip-up leading to death will cause the player to rage and cry.  (Read: roguelikes).

VESPER.5 does the latter.  The game itself is unimpressive.  All of the meaning is derived from one fact alone; you cannot move more than once per day.  Every day, you log on, knowing you have to be careful, taking deliberation over your course, but at the same time, it's zen.  A direct counter to the fast-paced, do-everything world of games and reality itself.

I've made my one move today.  Challenge accepted.

4 Hour Jam Revival

4 Hour Jam

Edit: Jam #4 a success!  Post-Mortem

Make an (anything) in 4 hours!

It's an extremely informal jam for developers of any kind.  Graphics artists, composers, storyboard writers, etc.

Come join us on the IRC!  November 10, 2 PM - 6 PM EST.

Thanks to CaptainLepidus for spawning the revivalist movement and everyone else for being fantastic people and making this happen again.

Abandonware has also volunteered to host a Minecraft server alongside the jam.  See his post for details!

Tuesday, November 6, 2012

Statistically speaking, your vote really doesn't matter

Now, I'm not going to discourage you from voting.  As long as you have an ounce of knowledge that comes from credible sources, it's in the advantage of the country for you to vote (and if you're voting based on campaign ads / what your friends are voting, SHAME ON YOU).

Statistically speaking, the chance that your vote will change the election is slim-to-nothing.  XKCD provides a nice run-down of the probabilities.  Knowing this, why do so many people vote?

The power in voting comes from the illusion that your vote matters.  If voter apathy prevents one person from voting, then there's virtually no harm done.

The damage happens when a large group of people suddenly decide (logically so) that the gas it takes to drive to the voting place and the hours of time wasted at the voting booth isn't worth the minuscule chance that their vote will be a determining factor.  It's then where you'll have some problems.  One vote will not make a difference, but ten thousand votes certainly will.

So the next time the election rolls around and people try to guilt you into voting, remember this: It's okay not to vote.  Just as long as you encourage everyone around you to vote.

And just as long as not too many people read this blog post.

Monday, October 29, 2012

Game : At The Corner of the Earth

Download (GMC Topic)

Why do I still make games?

Absolute failure made in 72 hours.  You might play it but you might as well just look at the screenshots and read the storyline because it's extremely broken.

And, following my usual habits, I have no intention of fixing it.

Overview below, but first I want to say a few things:
  •  Not to be arrogant but I never really realized how good I am at last-minute coding.  Almost 3/4ths of the game was programmed in the last 2-3 hours.  At one point I was exporting a sprite, then importing, coding, and loading it into the game one sprite per minute.
  • THIS IS BY FAR the most buggy game I have ever made, mostly on account of the point above.  I think I disappointed a ton of people because they seemed to be really interested in the screenshots and the game doesn't hold up at all.
  • Photoshop crashes are by far the worst.
  • Also, I hope people in general are smarter than me because I tried to make a story-based game with "no text" as the handicap.  It clearly didn't work well.
Video version of walkthrough coming soon.


Note: Greenland, whiteland, and yellowland are not the actual names for the places but rather their descriptions for the sake of.. descripting.

Talk to the cartographer at the bottom right of greenland. Press space and he will give you his pencil/paper and you will assist him on his map-drawing quests.

Go to the rock on the right and hit space to be magically teleported (??) to whiteland. Press space to jump and navigate your way up to the top of the level. Press space to pick up the caution sign on the way and use A/S to navigate to it in your inventory, then press Z to whack bears with it. Find the map in the upper right and go up to it until the screen craps out and open your pencil/paper with A/S and Z. You'll see that the character has drawn it on the page.

(If you want, go to the river and fish with your fishing rod. You'll need it later).

Navigate your way back down (or be cool, kill yourself, and bug-exploit your way to the bottom). Press space and revisit the cartographer, who will pay you for your sufferings. Use the money to go up to the innkeeper at the top of greenland, and pay to sleep in the "inn" (yes, that's a single pillow, shut up).

Go to yellowland and fight off the bears with your caution sign. You'll notice that the innkeeper is dead and now you get free rides to and from greenland/yellowland! Make your way to the lower right, down the rocks, and look at the drawings the children made/buy the TNT from the kid. The first drawing is a map of the yellowland, which you add to your drawing. The second drawing is that of the child's mother, the innkeeper, who just died. I hope you're happy.

Use the TNT to blow up the cave and the fence where the bears are. Try to not get brutally destroyed by the bears. You don't have to dodge the TNT because it magically doesn't kill you. Just talk to the farmer and trade in your fish for money, then go back to whiteland for more fish, then go back to farmer for more money, and eventually you'll have enough to pay the guard to step aside and visit the memorial. Alternatively, just walk around the guard. Bugs FTW.

After seeing all three memorial posters, go back to whiteland. On the way you'll notice the cartographer is gone and the globe is cracked. Going to whiteland will activate the credits scene and the end of the game.


I'm usually against outright explaining my storylines but this one is so poorly executed that I'll make an exception.

The game is the aftermath of an underground nuclear test gone completely wrong, blowing up the entire core of the Earth, leaving two groups of islands floating in the sky. All of the characters have incurred a personal loss of some kind: the innkeeper loses her life, the children lose their mother, and the farmer loses his crops. The cartographer loses his perception of the world, indicated by his disappearance and the shattered globe at the end of the game. The guard of the memorial dedicated to the post-apocalyptic event is the only person who hasn't lost anything. At the end of the game, the credits scene shows your character enjoying the only pastime discernable from his position in the game: ice-fishing. And the follow-up question is, what have you lost? Eventually, just like everyone else, you will lose everything. You will lose your fish.

The disaster in question isn't just on the global scope (nuclear suicide) but a personal one as well.

Thursday, October 25, 2012

H Game Engine : HGameSFML

Download | GitHub

Rewritten using SFML instead of SDL.  Runs much faster.

Making a game with it today and tomorrow to test it out.  Not quite Game-Maker-prototype speeds yet but I can make a platformer without too much heartache now.

Docs coming eventually but feel free to use it if you can figure it out on your own.

Saturday, October 13, 2012

A weekly dose of Internet

Wow, you know what college is killing me.

I have no time to anything ever anymore, and that includes blog posts, so here's a big list of things I think are interesting.

Good Music: Diablo Swing Orchestra - Honey Trap Aftermath (the entire Pandora's Pinata album, really)
Good Webcomic: Subnormality #200 - Anomalies
Good Documentary: Indie Game - The Movie
Good Sign of the Robo-Apocalypse: Evolving Robots Learn to Lie to Each Other
Good Game Jam: Ludum Dare's October Challenge 2012
..: Fuck This Jam
Good Person: Charles M. Schulz, cartoonist for Peanuts, who dedicated his life to his work for so very long before succumbing to health complications.  God bless.
Good Book: The Oatmeal - How to Tell if Your Cat is Plotting to Kill You, currently #8 on Amazon's Top Sellers list.  I haven't actually read it, I just want to do some advertising for The Oatmeal.  He'd be person-of-the-week if he weren't up against Schulz.

Good night.

Edit: Oh, forgot to mention I'm a writer now for the Game Maker Blog which is interesting because I don't even have time to post on my own blog, let alone another one, but it'll happen. 

Friday, September 28, 2012

Biggest Mess Ever

Hey, see these images?  They're supposed to resemble each other.

I've got just over 15 hours to get this damn program working and write a research report about this before I have to turn it over to UPS for overnight shipping.


Thursday, September 27, 2012


I'm building a shape analysis program and writing an 18-page research paper in one night.  So, before I go completely off the wall I need something to distract me.

Some of the more perceptive of you might have noticed I've switched to Linux.  Specifically, Ubuntu 12.04 LTS.  And it's absolutely beautiful.

A quick dry run:

  • XKCD jokes are a ton more enjoyable when you understand them.  This is by far the biggest pro.
  • No more linker errors.  Or at least, it's less of a problem.  Everything typically installs to your /usr/ folder so it's all system-wide.  (Although arguably the same can be done on Windows, it's more hassle-free on Linux).
  • Very flexible Terminal; more (useful) arguments available and it's almost possible to control your entire computer GUI-less if you know what you're doing.  (Windows' Command Prompt falls behind just a tiny bit).
  • Installing anything is a breeze.  Either find it in the Software Center (which has a slew of great programs, both free and paid) or find the package name and install it with:
 sudo apt-get install [package-name]
  • Super resilient to viruses.  Compared to Windows, very few people spend time making viruses for Linux systems considering they make up a minuscule portion of the market.
  • Workspaces let you essentially quadruple the size of your screen, allowing you to push groups of windows around very easily between the four quadrants.  (Same goes for Macs, I believe).
  • I hear it's fantastic for networking and server maintenance but I can't personally attest to that.
  •  Lack of Windows program support.  You'll be leaving all your favorite Windows programs behind.  There's WINE, of course, but it's fairly buggy.
  • As far as I know, there's no task manager.  Crashes for good, and the proper restart procedure is a really masochistic key combo: Alt-PrintScr + R E I S U B, in that order.  Seriously.  Why.
  • Not much point in using it if you're not a programmer.  It's clearly built around convenience to coders.  Stick with Windows if you're not having problems with static libraries or what-have-you.
  • Cross-compiling is kind of a pain.  It's also a necessity, since you're programs will likely be distributed to Windows users.
Overall I'm really glad I switched but I won't be getting rid of my Windows partition anytime soon.  If you're coding in any library-dependent languages then I highly suggest at least VM'ing it and testing it out.  Brilliant OS.

(I just wasted 20 minutes that could've gone to that research paper.  Go figure.)

Sunday, September 23, 2012

Loaf : Part One

This happens every time.

Jammed with Loaf today for four hours and ended up drawing that while everyone else was straddled down with Github errors and Borderlands 2.

Aaaahauauuuuuuu Githuuub.

Saturday, September 22, 2012

The Game-Design Normal Curve

A.K.A., a really self-centered timeline of my game-dev non-career.

My friend Exar sent me this video we made a while back with most of the games we made about 3 years into game development, and wow.  They're great.

Or no, they're not.  But they're actually playable.

I've been making games for (six? seven?) years now and here's how it's been.

Year One:
Ohmygosh gamedev!  Ohmygoshohmygosh this is so fun.  I can't draw but there's sprite libraries everywhere let me just borrow some here and there, and wow!  Dodge the ghosts!  Done!  I am so cool.

Year Two:
Game Maker is really super nice I don't know why people don't use it more, you can do anything in it ever.  But I guess I should try a little C++, I hear that's standard.  WOW nevermind this is impossible, sticking with GM.

I can draw a little now and I'm starting this great game called Blobworld which is really pretty good and I'm happy with it.

SEQUEL TIME, it doesn't matter that I never released the first one, 'Blobworld: The Ice Age' is coming soon!

Nevermind!  I'm going to work on it up to version 0.92 and then just completely stop.

(Turns out, this is typically what I always do).

Year Three:
YoYo Games is putting on this competition!  Wow!  I can totally win this, let me make this gizmo-based game called 'The Infinity Engine' and oh, wait.

It's literally impossible for anyone except me.  No, really.  I am the only person to have gotten past level 3, and there's 25 levels.

I should probably fix that.


(Plagued by this for the next four years, no one ever knows how to play my games).

Year Four:
Zerosoft Games is hosting a team competition, let me join.  Fuzion Creative and I spit out this rockin' Death Worm clone 'Tropically Correct', and we land second place.  We later start working on a long-term company called Fuzion Creative / Awoken Entertainment.

Everything goes straight down from here.

Year Five:
This is about the time I transfer out of a top-level private high school, even after getting a full ride there (a $20,000 scholarship).  The people were too college-oriented and lacked hobbies of any sort; I couldn't learn anything from them.  But it turns out, lo and behold, the people at the new school are exactly the same.

That was disappointing.

I kind of lose faith in game design and people in general.  Sort of slugged out Wrapple development for a really long time before Fuzion Creative picks up my slack and submits it anyways.  It nabs 'Staff Pick' on YoYo Games.

I then release 'Holiday Bombings' and 'Retroplat' later in the year, both for Zerosoft competitions.  Holiday Bombings wins 3rd and Retroplat get a runner-up award.  Retroplat turns out to be really successful; a certain Mr. Larson asks for an interview with me and Indie Game Comics features it in a webcomic.  All three sites, the interview, IG Comics, and Zerosoft, are now down, along with any proof of those occurences.  I submit it to a random side competition and it places a nice 4th.

Still not very happy with game design, or life in general.  I start realizing that there's no future in indie game design at all.

Year Six:
Total lack of attention span.  The GMC Jam starts running every few months, and I join the first four or so.  'Diagnosis' gets the closest to winning one (at 2nd place) and 'Pannenkoekenhuis' gets (12th?  I think?).  Pannenkoekenhuis later becomes my flagship game, which I remade in Flash and threw up on MochiAds, who later decided to spam it literally everywhere.  Google "pannenkoekenhuis game" and you'll see what I mean.  I'm still getting random hits on my blog from it.

The plan was this: Make a Flash game, post it on MochiAds or run it for sponsorships, use the money to start larger projects that recursively fund other projects and eventually make enough to start a full-fledged company, or at least to pay for college.

I make about two dollars with Pannenkoekenhuis.

Someone introduces me to a guy in Belgium who needs a Flash developer, and we work together on a few games which I'm not allowed to disclose because they're still being shown to potential sponsors.

'Cantilever Bridge' is born.  It's my ugly duckling.  It's a book disguised as a game, where one city decides to unite itself with another, of which it harbors heavy animosities toward.  The bridge is built, civilians kill each other over nothing and a war starts.  Your character is drafted in and you kill people along the bridge, but it's steady enough that you never realize until the very end that every single character has died, either by your hands or by circumstance, except for the Old Man.  He then decides to blow up the bridge while still on it, leaving you completely alone, in the wrong city, with no way to get back.

Only one person understood the story.  I was proud anyway.

Some people on YoYo Games start the Rapid Development Competition, in which you have 4 hours to make a game from scratch.  The people are generally nice and I actually manage to win one with 'Coma', which isn't particularly prestigious since there's about, on average, eight or nine entries.  But the competitions are cancelled, then revived, then cancelled, then revived, until somehow they end up in my hands as host.  I rebrand it as the 4 Hour Jam where it's all nice and cuddly before it dies out, once again.

Some time around here I somehow manage to not pass out for three days, and 'Fix It' is made for a GMC Jam.  raocow picks it up to review and it's all good fun, except for the fact that, once again, the game is impossible and no one but me can beat it.  But I'm proud of the concept; it's a simple room-based platformer where walls and objects exist on separate layers, which can be flipped back and forth like pages in a book.

And, by this point, I've completely dropped the idea of serious game design.  Just, why?  It's so much more fun making games that absolutely suck and watching people react to them.  One that I enjoyed making, called 'The Bleed Man', has a guy that you click on constantly to draw blood spots on him as he slowly shrinks away in pain.  (I didn't even bother to restrain the blood spots to his body; they appear across the screen in empty space just as much).  'You Broke The Big Thing!' involves a boss that doesn't attack you and a completely irrelevant story (irrelevant everything, really).  'This Town (ABEFTTOU)!' involves the ludicrous setting of two people on a tiny globe, trying to shoot each other in the back and somehow being completely unable to turn around.  They throw energy-harvesting balloons in the air to make them run faster and drop dead babies to slow down the other.  And in the informal RDC's I become known as "that guy that makes the really shitty games that are somewhat funny anyways."

Year Seven:

Sometimes I look back at my old games and think, hahahahah, hahahah, ahah, wow.  How did I have the attention span to make that.

There is no reason I should've spent time on all of that.

No reason.

Just wow.

The Game-Design Normal Curve:
  1. Learn how to make games.
  2. Make good games.
  3. Forget how to make games.
  4. Make complete shit.

Thursday, September 20, 2012

Local Gamedev Group!

There's game designers at my school.

I don't think you understand the weight of this.  There are game designers at my school.  They must've been hiding in rocks and bushes because I've been looking for people to jam with for four years.  And these people are great.  Graphics designers/programmers/composers, the whole package.

I talked to them and they were cool with me joining them for a gamedev session this Sunday.  Will update with what we end up making when it happens, but this is good news.


Other news, I'm doing this essay thing about religion, so while I tend to stay relatively agnostic about religion, expect some more polarized posts one way or the other in the future.

Wednesday, September 19, 2012

C++ : Symbolic Regression - Part 2

Hey, remember that post I made forever ago about making some symbolic regression via genetic programming?  You probably thought I completely gave up on that, right?

Well I have a surprise for you, sillies.  I did.

But then with this new Auto-Generated Music project, I rewrote it from scratch and it actually works.

(Note: The final equation is written in Reverse Polish Notation, which is just a whole lot easier to work with).

But we're not done yet.  For one, the equations tend to converge to local maxima.  In simplespeak, they tend to mutate towards an optimal state, but occasionally the best equation will actually have a radically different structure.  Then, the equation will have to mutate to a state that's actually undesirable, before being able to adjust into the best possible equation.

Another thing you might notice is that it's unreadable as f-ck.  Part of it is because of reverse Polish, but really it's because of redundancy in the code.  The screenshot above doesn't show it, but often you'll get large sections of just adding 0 or multiplying 1.  These options are completely unnecessary, and bog down the code.  Therefore, optimally we'd simplify equations before storing or processing them.

A possible solution to this problem is to hardcode redundant node properties in, which works for very basic redundancies but not much else.  It's easy to do, say, 0 + x = x, or 1 * x = x and call it a day.  But what about sqr(sqrt(x)) = x?  Or i + i + x = x + 2i?  It's not trivial to cover all possible redundancies (although you'd certainly get a good chunk of them).

Another is to do it dynamically, with a second genetic algorithm beneath that takes into account the complexity of the equation.  Say you have x + x + 0 * 1 + x * 1.  Use that as a grading criteria, and mutate it constantly for a certain amount of time.  Then, the equation that matches the initial state exactly (graded by iterating over all possible values) with the fewest nodes replaces the initial.  Problem here is that it's computationally-expensive and also not completely guaranteed to work.

Something to look into is the MOSES algorithm.  Essentially, equations use a set of parameters called knobs, useful for tweaking the equation in mutations (think constants, or what-have-you).

But uh.  Bedtime for me.  'Night.

Sunday, September 9, 2012

Auto-generated Music : Time-Frequency Analysis

New side project!  Time to add it to my list of 20 other side projects.

Goal: Generate some nice instrument samples that don't just sound like A. waves, or B. random noise.

Big-Fish Goal: Use these instrument samples to generate music.

Partially because I'm lazy and can't make my own music.
Partially because it'd be pretty fucking cool.

The first arm of this project lies in something called time-frequency analysis.  Essentially, you're looking at the dominance of sound (time) and the dominance of pitch (frequency) throughout a sample.

The interesting thing is, "good" sounds tend to have something in common.  Look at the following frequencies of a sine wave at 440 Hz:

Sine Wave
 You can see it peaking at 440 Hz first of all (not surprising), but more important is that it slopes downwards in general.  Being a sine wave (and having a parallel frequency graph) makes it not-so-intuitive to see, but here's one of white noise:
It spikes up at random and stays uniform throughout every frequency.  It also sounds like murder to the ears.

Meanwhile, here's one of pink noise, which is a little more tolerable to listen to:
See the difference?  "Good" sounds tend to have dominance in the lower frequencies, and then pan out.

(If you're interested, brown noise does the same.  Didn't post a screenshot but it's very similar to that of pink noise).

Now, the problem I'm having is that frequencies are discrete here.  If I were to, say, average out the frequencies of 20 different sine waves, then I won't converge to a "good" frequency graph.  I'll just get random peaks everywhere.  Sine waves with different frequencies will have their peaks a bit over to the left or right of the others.

Same problem happens in the time (amplitude) domain.  A drum sound, for example, has a small attack phase, where the sound gets very loud, and then a long tail afterwards.  Snare sample:
Someone tell me how to crop images in Ubuntu :(
This goes for pretty much every basic drum.  But say the sample wasn't properly made, and it has a long piece of silence at the beginning that moves everything over a few 0.1 seconds or so.  When you average the sounds out, you'd get something fairly uniform rather than a straight downwards slope.

... I'm not sure how I'd remedy this but averaging out the derivatives between values rather than discrete points might work out?  Who knows.

Will keep you updated.

Tuesday, August 28, 2012

Apple sues Samsung for making their phones equally as intuitive as their own

Except this time, they won.

'Jury Finds Largely in Favor of Apple in Apple vs. Samsung Trial, Awards More than $1 Billion in Damages'

Companies have patent-wars all the time.  They'll take someone's product and go, "OH MY GOSH they arranged their icons in vaguely the same way" or "WHAT MULTI-TOUCH I own the patent for that!" and then they'll sue the living guts out of them.

It's a business thing.

Long story short, Apple sued Samsung some time ago for infringing upon Apple-held patents for things like "pinch and zoom" and "double-tap to zoom" features on smartphones.  And they won.  In fact, they won hands-down.

I hope you're not planning on designing sensible UI anytime soon because you'll probably be sued for it.

Monday, August 27, 2012

C++ : H2 Gamedev Library (Pre-Alpha)


Clean-package super pre-alpha version, MSVC++10 EE.  I could make some docs to explain how to use it but that'd be pointless since it's going to undergo major changes in the future.  If you're interested, contact me.

The previously mentioned H Game Library will no longer be supported (that was fast!)

Sunday, August 26, 2012

Game : The Liver Trial

EDIT: Timelapse is up!

So I have some good news and some bad news.  And, dear reader, screw you; I'm picking the order.

Good news:
Ludum Dare 24 rolled along and I made a game ( The Liver Trial ) in C++ and SDL.  It's my first ever C++ game and I ended up building an entire development package for it that can be used for future projects (which I'll clean up and GitHub in the future).

The puzzle element is pretty nice; every time you die, you adapt to the cause of your death.  Killing yourself on spikes gives you iron boots that let you walk on said spikes, as well as break fragile bridges and depress heavy buttons, with the tradeoff of agility.  It's easily expandable and very simple at its core.

All of the graphics scanned well and integrating it with the game was not as bad as I thought it'd be.

And, to top it off, I made a game for a Rapid Development Competition / 4 hour game jam that won 1st place.  I'm not going to post it because it's honestly awful, but snails circled around in a distorted spiral and you had to dodge and shoot them through your super-fish-eye lens.

I finished the LD game with just a few minutes to spare, having crunched in some intro text, graphical fixes, and an ending that simply puts you back to the beginning.

Bad news:
I didn't include one of the DLLs.  The game is unplayable.


Ludum Dare Link
Source Code

Wednesday, August 22, 2012

Fight Intolerance, Not Free Speech

'Selma City Council: No more monuments to KKK hate!'

This showed up in my email today and I'm kind of miffed.

If you're too lazy to click on the link, Selma City (a grounds for Martin Luther King's speeches and marches back in the Civil Rights Movement) is building a monument to the leader of the infamous Ku Klux Klan, Nathan Bedford Forrest.  And everyone's pissed.

I concede a little here; they sort of have a right to be pissed.  Selma was a big target of the KKK back when they were still highly active and violent.

But I'm sick and tired of people going oh no Nazis horrible, should die and KKK super racist should burn in hell because you're missing the point entirely.

Both groups are known for, what exactly?  Violent intolerance.  But the statue they're building is just that, a statue.  They're not burning houses down anymore.  They're simply another group with another set of (albeit slightly twisted) beliefs.

In fact, I'm seeing a lot more intolerance from those against the statue than from the KKK themselves.  Disallowing the erection of the statue implies intolerance against free speech, if anything.

Now I'm not saying you shouldn't be pissed.  You should be.  I would be pretty mad if my city decided to drop a statue of, say, Romney, in my backyard.  But stop calling it a "heinous crime" or what-have-you.  You should be mad because you don't want your city being represented a certain way.  You should be mad because of funding, or because the statue is in a bad spot.  But stop calling it a crime against humanity when groups you don't believe in make monuments to themselves.  The enemy is not intolerant groups, but intolerance itself.
He who fights with monsters might take care lest he thereby become a monster. And if you gaze for long into an abyss, the abyss gazes also into you.
-Friedrich Nietzsche

Tuesday, August 21, 2012

C++ : H Gamedev Library (Alpha 0.1)

Good news!  Ever since my high school completely bagged its scheduling system, I come home early now and have a bunch of time to work on some nice computer-y things.

I'm rushing this engine right now for the next Ludum Dare and hopefully it'll be eventually useful to anyone coming from a Game Maker background.  It's super-basic and uses the same terminology as GM, with the same variable system.  Graphics are handled under-the-hood in SDL and room-editing uses Ogmo Editor for now.

Note it isn't actually useable yet but here's the GitHub link.  I'll repost once it hits a stable working version.


(The name is GameFear because I made it for the GameJolt competition themed around Fear.  Temporary).

Stanford EPGY

Hi, I'm not dead.  Thought I should let you know.

I've been in Taiwan, and then I've been here at Stanford's EPGY high school program, which was a truly eye-opening experience in more ways than anything.  It'd be by all means wrong if I didn't give them a quick thank-you, at least in blog post form.

Hey, Stanford:

Thank you.

THERE I SAID IT.  I miss you all.

Now, a quick run-down:

This is embarrassing to admit but this is the first time I've taken an airplane by myself.  I met some interesting people on the plane (one really cool guy named Eric that did frontend development for Amazon / eBay - type websites).  Planes are probably the best place to meet people; you're stuck sitting next to the same guy for 4+ hours and you're so bored that you don't care that your neighbor is a boring prick (read: that's me) so people talk.  Additionally, the people who regularly take planes also tend to have a ton to offer (I met a chemist on the flight back and we talked about gas efficiency.  Super cool.)  If it wasn't for the high price tag, I think I'd fly around just to get to know people on the planes.

So I finally landed in San Francisco after a fairly smooth flight (contrary to the flight back three weeks later) and immediately struck up a conversation with another program participant about Sid Meier's Civilization series.  That's when I learned the first thing here; unlike Florida, people are generally very sociable and eager to talk about things that interest them.

(Alright, that wasn't too fair of me.  Florida has that.  Sometimes).

I shared a dorm with this guy named Chang (who flew here from China -- that's maybe a 14+ hour flight).  He was alright and we both spent the first day walking around the place, and my first impression of him was of a typical conservative Asian who's great at studying and other Asian-type things.  Note, I was wrong.  This perception was turned on its head later in the course, and I found him to be a really cool guy.

I met this one guy named Eric (a different one) who had won a Google competition for something crazy-science-y.  Awesome person to talk to, because unlike other people, he never got tired of talking about science.  I'm a fellow geek, I had no problems with that.  He taught me more about quantum physics and relativity than I could've learned in any ordinary classroom.

This was also the first sign of what I had expected all along.  When your school isn't bogged down in its bureaucracy (cough, Florida schools), you can actually offer things that are good for the students.  He had advanced robotics clubs and science programs behind him.  I was extremely jealous.

The counselors scheduled a nice meeting for us all and unimportant things happened.  They did mention the possibility of "hiking the dish," getting up early in the morning and running to and from this big satellite dish they have some distance away.  I promised myself I'd set my alarm early for that before I left.  Early being, 6-in-the-morning early.

Giving credit where it's due, I wouldn't have survived the class if it weren't for this small café in the electrical engineering building called Bytes (oh, clever!) where I'd go almost every morning for a cappuccino.  Not saying the class was boring or anything (it wasn't at all; the teacher was a fellow indie gamer and total bro on the side) but I'm borderline narcoleptic and sacrifices must be made in accordance to the rules of the Illuminati.

Normally, I wouldn't care about falling asleep in class but this one actually had some good info on the line.  It was absolutely worth staying awake for every minute of it.  I spent a lot of time and effort saving money for small things, like avoiding field trips when I can, etc. in previous years of schooling and all of that is a huge mistake; the thing is, the information industry is insanely lucrative.  Experience is infinitely more valuable than money and you'll easily earn it back with what you learn.  Spend money if you need to.  You won't believe me but you will regret it just like I do and then you will hate your life and die.

I met this one guy named Soumya who's this awesome Indian guy and we talked a lot about just about everything.  For one, Indian politics are super corrupt.  The caste system is still unofficially active there that completely blew my mind.  He knew a lot about pretty much everything and won the international Intel Science and Engineering Fair last year for doing something about RSA encryption, where he then went to Taiwan (!) for a bunch of things.  A bunch of things, including getting drunk, getting lost on a train, and trapping himself in a fire escape.  Super awesome.

Throughout the time there, the counselors (I'm saying it like they're a mafia group or something, not at all, really! They're great people) have a really scary thing they call Spotlight where you go up and talk about yourself for 10 minutes or so in front of a big scary crowd of 40 people and then they pummel you with questions that you have to answer on the spot or else they punch you to death and burn your house down.  I spent way too much time thinking of what to say for that.  Eric did it, and then Soumya did it, and they all did fairly well.  My roommate told some stories of how he'd prank his friends by pretending to take drugs, or by writing letters to their girlfriends addressed by them, and they were clearly the best stories as no one expected him to be that interesting.  We all gave him a standing ovation after he finished.  I was one proud roommate.

I'll go and say it now; I nuked mine.  I'm the worst public speaker you'll ever hear.  Managed to talk about my total lack of athletic ability and my gamedev hobby but other than that I totally blanked out.  It was awful.

The class I took was in Artificial Intelligence (maybe I should've mentioned that earlier? Heh...) and we were all given a choice on final projects.  After playing a game of Risk with some people there, I jokingly said I'd try my hand at a Risk AI.  To my surprise, two other people (a certain Michael and Ben) decided to join me.  I didn't want to do it mainly because I knew I couldn't do it, but there was no turning back.  Obligation to the team.  No regrets though; it ended up being a really interesting project.

I met this one guy named Vanya who had roots in Russia and hosted servers through Amazon Web Services.  He did networking professionally and was generally super-awesome.  When I was working on a Connect Four AI as a side-project, he helped by making a suggestion about dynamic priority spaces -- that is, a space adjacent to an enemy/friendly piece would be either less important or more important than other spaces.  I responded that a minimax implementation would be more stable, and he replied (something along these lines):
"Discoveries aren't made because of the methodology that 'this is how you do things.'  You just try things.  But there's no point going into something, knowing how to do it already."
Words to live by.

A bit later, my dad's boss's son invited me to go out to dinner with him at an Asian night market.  I set up all the paperwork on my end and we did that.  The guy works in the hardware-y sector of Apple and was generally a nice guy to be with.  The "Asian night market" ended up being a circle of food trucks instead, but no regrets.

One of the counselors, a certain Art Wangperawong ("You say it like a sentence: 'Wang per a wong' ") was kind enough to show us his lab.  He was a graduate student looking for more efficient materials for solar cells and showed us the process they used to inspect the material.
"Already I can see the material is not that good.  The metal is very reflective, so most of the light is being reflected away from the panel.  If the material is very good, it should be almost black."
By the way, there shouldn't be any misconception from when I say "lab."  It was a legit lab.  Huge million dollar electron microscopes that allowed you to see pretty much anything you wanted in the material.

Up to now, I haven't paid attention to college admissions as much as I should've.  I used to think, "give me a laptop and an internet connection and I'll do all the research I want."  That attitude declined throughout the year, and seeing this lab was the final nail in the coffin for that idea.  I want to go to college.  I want to go to a good college.  It'd be an absolute dream to have, say, a supercomputer to run instant neural networks on, or a particle accelerator to study quantum behavior.  Lots of regret for not getting involved in things early on.  Pursue your passions, but just as importantly, make use of your skills.  Join competitions, travel places.  It'll probably be a ton better for you, even disregarding the bonus in college admissions.

Michael, Ben and I presented our Risk AI on the last day of the program.  We had a fairly interesting setup; using GitHub, we were able to develop separate AIs using the same framework.  Ben and Michael worked on a more logical, strategic AI while I worked on an experimental heuristic-based one.  We ended up with the same results; the AI's generally sucked.  But it was a good run anyhow; there's no sane way I'd be able to understand GitHub without that experience.

Our house had a neat game of capture the flag on the last day (I'll mention that capture the flag and ultimate frisbee were pretty much all I did at the program) and on the way back, Soumya lost his room key.  So we walked back to the field, found it, then walked back to the dorms before realizing we were completely lost.  By "completely lost," I mean we were seeing people's apartments.  There were signs advertising things like bands playing nearby, etc.  But we found our way back and I got to know him a lot better through that.

So the last day was incredibly somber (at least for me, anyways) and we were all sort of sitting around and playing cards.  Vanya had to leave earlier than the others, so I helped him pack a bit.  Before he left, he told me that of all the really interesting people he met during the program, I was "near the top of the list."  Incredibly sad.  I don't want to say I broke down and started tearing up like crazy but I did.

We all ended up pulling an all-nighter before one-by-one people left for the airport.  Some girls were doing their nails last-minute, and the counselors were finishing up their (much shorter) Spotlight presentations.  Fifteen minutes before my shuttle was due to arrive, Soumya turned to me and said, "I'll paint my nails if you do it too."  I agreed.  I had mine painted a really reflective silver that I'm sure was noticeable from a quarter mile away, but that was fine -- I got Soumya to paint his in hot pink.

And then I noticed something that really upset me:

I never did get to hike the dish.

The flight back was uneventful; the plane got stuck taking circles in Illinois, waiting for a storm to clear up in O'Hare and then rerouted to St. Louis to refuel.  Then the crew was delayed in traffic for the flight back to Florida.  I ended up getting back at 3 AM.  No one was at fault.  Circumstances.

And really I'm absolutely 100% sorry that I couldn't express my appreciation for everyone there at Stanford for being some of the best people I've ever met.  I have huge problems expressing emotions but you guys are the greatest and please believe it because it's true.  The thing that inspired me to finally write up this post was a dream where I flew back to Stanford to visit after the program had ended.  The rooms were completely empty.  The dream was definitely lucid, so I could've changed the dream to anything I wanted but I didn't.  I just sat in the lounge.  It was fantastic.

Thanks again, everyone.  Best of luck.  Live long and prosper.

Friday, July 6, 2012

C++ : ChatMarkov

Source (GitHub, MSVC++ 2010 EE)

Made a program to generate new chatlogs based off of old ones.  It uses a system known as Markov chains to build each sentence.

In simplespeak, the program goes through your chatlog and builds a dictionary of all unique words, as well as the probabilities that each word will follow another.  The program then uses these probability tables to ekk out a fake conversation.

Currently in early alpha.  Feel free to fork the project and add your own modifications.

Friday, June 29, 2012

You Broke The Big Thing! : Finished

Quick game for NeoTalon's RGB Comp 2012 .  Instructions are in F1.


Extremely short game with the premise that you broke the thing and now you're out to fix the thing.

Critiques so far run from " ...What the heck did I just play?" to "That was... a thing."

The timelapse is really awkward.  Features a strange image that my friend sent, and me Skyping with my shirtless dad.

Saturday, June 2, 2012

Saturday, May 19, 2012

Music : Message Intercepted

Website -
SoundCloud -
YouTube -

Was introduced to breakcore today by a digital composer whose been making music for some years now; I had heard of music from the genre but could never pair a name to it apart from "industrial glitch maybe perhaps?" which was always frustrating to type.  Ended up listening to a lot of songs by said composer.  They're pretty great.

Most of them feature a fairly kick-heavy drumline and abrupt transitions, but the really distinguishing plus is his use of samples in a way that's varied and innovative without clashing.  The track above, Transforming Robot, showcases a glitchy drumtrack with an ambient section stuck in the middle.  Surprisingly, it blends very, very well.
Would encourage you to listen to more of the tracks because I'm having a hard time describing it.  Definitely one of the better hobbyist techno composers I've heard of.

Tuesday, May 8, 2012

What is so good about The Scream?

If you're unfamiliar, "The Scream" is a painting made by Edvard Munch around 1893-1910.  It recently sold for ~$119 million dollars.

Seriously, what's so good about this?

Yes, it's a historical piece of art.  Yes, its fame derives a lot from its age and influence.  And I've been staring at it while writing this post, and yes, I guess I kind of like the colors of the water and the sky.  They look deep and bold.

But what the heck is with the focus of the picture: the actual scream?  People seem to say that the scene looks and feels like "a thriller," or they can feel the darkness and anxiety of the subject.  How?  I certainly don't.

Of course, this is probably a matter of tastes.  I've always been a fan of, in the words of a show my sister was showing me yesterday, the "double-layer trap" in creative works.  If you're writing a sad book, you shouldn't use the words "sad," "depressed," "gloomy," etc.  Likewise, if you're directing a sad movie, you shouldn't pepper it with excessive crying and slow-mo.  And if you're painting a sad painting, you shouldn't have to pour a gallon of gray paint all over your work and say, "aha!  My colors are dark!  My painting is now officially saddening!"

If your work is good, it should lend itself to the emotion you're targetting.  And if it's not, slapping a crying man in the picture isn't going to help you.

I'm not criticizing Munch.  Wait, yes I am.  Not that I have the authority or qualifications to (I'm an awful artist), but in my extremely unprofessional opinion, "the scream" takes a whole lot of potential out of "The Scream."

Saturday, May 5, 2012

C++ : Symbolic Regression - Part 1

I'm not dead.  Just working on something that's taking an awful long amount of time.  That's my excuse for my recent post-truancy.

'Wired: Computer Self Discovers Laws of Physics'

See that article up there?  Click on it.  No?  Fine, here's what it says in a nutshell.  Some people over at Cornell University stuck a bunch of LED lights onto a chaotic pendulum, hooked up an LED detector onto a computer, and fed the data through some fancy algorithms based on symbolic regression that calculated the gravity equation from scratch.

Sounds complicated?  It's not.  It's actually extremely simple.  Here's the generalized workflow:
  1. Feed some data into the computer, like the positions of the LED lights.  These are your state variables.
  2. Use some fancy maths to find the partial derivatives between the state variables.  Partial derivatives are used to calculate relations between variables.
  3. Generate thousands of equations randomly, and use genetic algorithms for mutation (value mutation, crossover, etc.).  The equations that match the data the closest (via plugging in values) have the highest priority in mutation.  This is the symbolic regression step.
  4. Repeat step 3 a hundred thousand gazillion times and after an infinite number of iterations you should converge to the exact equation that fits the data.
That's all.  It's very simple.

Programming Symbolic Regression

The main programming obstacles here are as follows:
  1. Building equations in program-my form.  There's a predetermined set of operators made into functions and stored as function pointers (add(a,b), sub(a,b), mul(a,b), div(a,b), sin(a), cos(b), among others).
  2. Solving partial derivatives symbolically.  I have no idea how to do this yet but I'm sure it's not that hard?
  3. Optimizing it so it doesn't take a hundred thousand years to calculate something nice.
 That's the gist of it.  If I make any progress I'll mention it on the blog.

If you're interested in your own research, here's the material for the Cornell project.  It's a little intimidating to read but isn't all that bad; most of the unfamiliar terms can be figured out in context.

Overview: Distilling Free-Form Natural Laws from Experimental Data
Supporting Online Material

Thursday, April 26, 2012

This Town (ABEFTTOU) : Ludum Dare Entry

This Town (ABEFTTOU) made for Ludum Dare 23 in 48 hours.  Runs on XNA, so the download leads to an installer.  If anyone knows how to compile standalone XNA executables please tell me kthnx.



The Good:
  1. GitHub is so beautiful! I cloned my half-finished OOP engine and worked on the engine alongside the game.  The cool thing is, the engine code remains separate from the game.  If I wanted to add, say, animated sprites to the game, I'd set it up in the engine, merge them, and have GitHub resolve the conflicts.  Ended up with not only a finished game but a patched up engine as well.
  2. Small, concise idea that could actually be finished.
  3. Having drafted the idea for the game before starting.
The Bad:
  1.  Use something you're familiar with, dangit!  Should've used Game Maker or Flash, both way easier and faster to dev in than C#/XNA.
  2. Figure out how to compile the game before submitting.  No one who didn't previously have XNA already could play the game at first because it wasn't packaged with the framework.  Stupid me.  And an addendum, people with weak graphics cards still couldn't play because I compiled it in HiDef mode unnecessarily and accidentally.  Stupid me.
  3. Leave an hour or so for balancing and bugfixes.  Pretty much crippled the game.

Tuesday, April 10, 2012

Gamedev Meetup

First time at a gamedev meetup.  Interesting experience overall and definitely going to attend the next one.

Event was hosted by a Microsoft developer named Joe Healy on developing for the Windows Phone-- marketing and all. 

Confirmed a lot of what I already knew, but some alright new things.

The easy stuff:
-The best apps are non-shitware, but a heavy side of it comes from raw marketing.
-Marketing marketing marketing marketing.  Marketing!
-Windows Phone programming is a helluvafscking lot easier and cleaner than Android programming.

The not-so-well-known stuff:
-The market is very much alive, even with only 70k apps.
-Startup fees (licensing etc) are few.
-One app a month is a decent rate of release.
-Advertisements = top money.
-XNA is 100% portable from PC to phone.  Design a game on PC and move it over to Phone, hassle-free.

Definitely a market to look at if iOS dev doesn't go down as well as I'd expected.

Now for the social aspects:

Despite being several decades younger than the majority of participants (I was the youngest there, hands-down), I didn't really feel out-of-place at all.  The people were all very interesting to talk to.  Even got a conversation going with a guy about different types of trash cans.

My big mistake here?  Not claiming a computer already set-up with the Windows Phone 8 SDK, and having to download and install it myself.  Oh, cool, can't connect to wifi.  Good thing they have an instructions sheet for it.  Oh, cool, popup bubble asking for credentials not appearing.  Good thing I spent half an hour searching to find it.  Oh, cool, the Microsoft website is down and I can't download the SDK.

Good thing I refreshed my HOSTS file, flushed my DNS, disabled/re-enabled all the wireless adapters, manually updated IP and DNS addresses, pinged several times, IP-tracked the DNS via Whois and Google, and finally got around the DNS block before realizing the link I had was for the patch and not the original package.

By then, the meeting had ended.

Also, for any hobbyists of any creed:

I highly recommend attending one of these.  Look online at for those in your area or something.  This was excellent, and the people were excellent, and I regret not finding these meetups earlier.

Monday, April 9, 2012

A Programmer's View on Justice

(By "justice," I mean the Hammurabian "eye-for-an-eye" justice.  Thought I'd clarify.)

The common line of moral doctrine seems to be "treat unto others as thoust wish to be treated," maybe without so much of the Old English.  Seems fair enough, right?

I think that in a lot of cases it's complete bull, and here's why.

Let's redefine morality, for a second.  Morality, or how "good" a person is, we'll define as "how much they contribute to the world after subtracting how much they take from the world."  A simple profit-minus-expenses situation.  Makes sense, right?  After all, a "good" person would optimally have given more than they've taken.  The world would be better off having had a "good" person and worse off having had a "bad" person.

Now, for the sake of argument, let's quantify the world's resources.  Imagine the world is a room, and inside the room there are corn crops and humans.  These are the sole resources of the "world," and therefore the most "good" person will try to maximize the world's resources by growing crops.  Our world is therefore split up into environmental resources (food) and human resources (human labor, to grow the food).

A Scenario
We'll say we start out with 5 "food" and 5 "human."

Food: 5
Human: 5
Total: 10
We will assume that all humans grow food at the same rate and consume food at the same rate, and that they grow food faster than they consume it (so that they are always a positive resource).  Our total "world resources" is then 10 (combining food and human resources).  Of course, this number is arbitrary, and doesn't account for priority weights of "food" and "human" (a human might be five times as useful as a food, for example), but the number is going to be used relatively and therefore the technicalities don't matter.

So one day, Abert is a total jerk and burns Bartholomew's crop (-1 food).

Food: 4
Human: 5
Total: 9

Notice that our total "world resources" is now a little less.

So, what's the "fair" thing to do?

Wednesday, April 4, 2012

Stanford Summer Program Get!

 Accepted into Stanford's 2012 summer class on Artificial Intelligence.  Good news and bad news.

The good news: Stanford!  And artificial intelligence!  And hopefully, for once, some interesting people who do things!

The bad news: Going to have to dedicate my time to a job now.  There is simply no way I'll be able to pay for this without some freelance work.  Which means...

I'm sorry, I'm not sure how much time I can spend on the Brighton RTS, or the One Second Roguelike, or the secret four-letter project, or the C++ 3D physics engine.  Gamedev might have to slow down for a while.  Hopefully still going to learn some cool stuff from freelancing though, but that's how it goes I guess.

Not that I regret getting accepted at all, this is fantastic.

Thanks a ton, Stanford, and sorry for pestering you so much with fax problems.

Tuesday, April 3, 2012

Minor update for minor people.

  •  4 Hour Jam is this Saturday, remember this.
  •  Werewolf is coming to a close.  Good show!
  • molyjam was amazing and I regret not being able to finish anything really on time.
  • C++ physics engine in the works!  In excruciatingly depth-stretching 3D.
  • Super secret gamedev project among super secret friends.  That's all you're getting.  (It's also four letters).
  • South Florida iOS Meetup postponed for the first time in 6 years.  Has to be postponed the first day I go, of course.
  • The Game of Life engine I made a while back has been updated to run over 8x faster.  Might turn it into a screensaver, maybe.
  • Noticed this blog stretches horizontally on smaller screens.  Y NO 1 TELL ME?!
  • And lastly, some web design.
Don't worry, do your best! Jujuju-jujuju jujuju-jujuju jujujuju....