Levels of failure:
5) I laugh at you.
4) Everyone laughs at you.
3) I make a joke about you.
2) I make a series of jokes about you.
1) You transcend joke made about your failure and become a joke yourself.
Levels of failure:
5) I laugh at you.
4) Everyone laughs at you.
3) I make a joke about you.
2) I make a series of jokes about you.
1) You transcend joke made about your failure and become a joke yourself.
In 1990 I was given my first IBM PC as a graduation gift. The machine came with a copy of Borland Turbo C, which was a programming environment. I didn’t know the C programming language at the time. Before then, I’d been using Basic. I realized that Basic wasn’t going to cut it in the professional world, and it was time for me to learn a grownup programming language.
The machine came with the Borland reference books. You could use these to look up individual functions and remember their syntax. And that’s all. They contained no real instruction on the structure and behavior of the language itself. Learning C with these books was like trying to learn English using only an English dictionary, or learning to drive using only the owner’s manual for your car.
This was also pre-internet (for me) so I couldn’t look up anything online. I didn’t even know any C programmers. I’d graduated and it was summer, so I no longer had any teachers to ask. Looking back, I suppose a trip to the library might have been worth a try, although that didn’t occur to me and I’m not sure if they would have kept any relevant books on hand.
So my only way forward was to sit in my bedroom and try to puzzle out the language based on my own guesses and whatever truths could be gleaned from the three-line code snippets scattered throughout the book.
So I wound up with some gaps in my knowledge. Specifically, I didn’t know you could make your own functions. This is a hilarious thing to not know. A C program might look like this:
void DoAwesomeThing ()
{
be awesome here;
}
void DoNeatThing ()
{
do some stuff;
DoAwesomeThing ();
}
void main ()
{
do some stuff;
DoNeatThing ()
do some more stuff;
DoNeatThing ()
do still more stuff;
DoNeatThing ()
}
But if you don’t use functions – if you can’t (or don’t know how to) make DoAwesomeThing or DoNeatThing – then the program will turn into this:
void main ()
{
do some stuff;
{
do some stuff;
{
be awesome here;
}
}
do some more stuff;
{
do some stuff;
{
be awesome here;
}
}
do still more stuff;
{
do some stuff;
{
be awesome here;
}
}
}
If you find a bug in awesome thing, then you need to fix it in three different places. Copy & paste errors will propagate and the code gradually becomes an unreadable mess. Doing things this way basically defeats the most important features of the language. (I did things this way because I was trying to map my knowledge to C to my knowledge of Basic.)
Most programmers will look at the above code and get all twitchy. It’s just so perfectly wrong.
Never one to settle for small, reasonable goals, I decided that the best project after Hello World was a full-featured graphical version of Tetris.
I wrote Tetris without a single function call. The entirety of the program was contained within main (). Start screen, the game loop, user input, line removal, scoring, increasing levels of difficulty, game over, high score list. Everything. All in main (). I cannot stress how convoluted this was. The code indenting was so deep that if you scrolled halfway down the (terrifyingly long) page, you would see nothing but blank space. The line indents were all the way off the right side of the screen. You had to scroll a full page width horizontally in order to see the code.
I finally got my hands on real C code and learned how things are supposed to work. I wrote and re-wrote Tetris a few times over the next few years. I had a friend who would put the new versions up on a BBS for me. When you exited the game, it printed out my real, actual home address and invited you to send a postcard. (I got three. Furthest away was from Japan. I was so excited. I communicated with someone in Japan! I’m sure I do that every single day now.)
The program and the source vanished ages ago in one of my early computer migrations. Shame. I would pay good money to see the no-function version of the Tetris source again, if only to gape at the horrifying awfulness of the thing.
On a whim, I Googled around to see if it had made the jump from BBS to internet. It did:
![]() |
That’s a 16 color graphics mode. I made it look like it had more colors by using dithering. (I was SO proud of figuring that out. Wrote a whole bunch of code to do smooth dithered fades. Spent ages on it, experimenting and looking for ways to make the blend as natural as possible. But the whole system was obsolete before I wrote the first line of code. 256 color mode was all the rage and 16 bit color mode was on the horizon.)
The program was more future proof than many. It still runs on my computer and is still playable. The only thing that breaks is that there was no CPU throttle on the PC speaker based sound effects, so the sounds are reduced to almost completely inaudible millisecond long blips. (Sounds work right under Dosbox, though.)
You can get it here.
Controls:
Arrow keys. And you use the < and > keys for rotate left and right. For some reason.
And the source is gone. If it doesn’t work for you, then there is nothing to be done. Good luck.
This is not a photoshop.
![]() |
I have issued a list of demands to the developers at Turbine. They must give my character exclusive access to a new “I fart in your general direction” emote, deliver me 100 bottles of black dye, rename Bree to Lulzytown, and let me use Gandalf as a ride-able mount. If they fail to meet these demands by midnight tonight, I will destroy the shire auction house.
Continue reading 〉〉 “Lord of the Demolitions Online”
As soon as I saw this on Monday, I knew it was going to be the Saturday morning video for this week.
Link (YouTube) |
(For context: These are the same guys who did the treadmills video that was such a huge sensation a couple of years back.)
I’ve mentioned before that I hate DIAS videogames where you have to overcome a series of obstacles and any failure whatsoever means you have to do the entire thing again. And again. I don’t feel excitement when I’m playing. I feel a mounting sense of stress. I don’t feel exhilaration when I win. Just a grudging sense of relief.
I actually get that same panicky feeling when watching this video. Look at how complex and destructive this mess is. And how many places it could go wrong. This would take ages to reset. They made things even harder on themselves by integrating the timing of the song into the sequence, so that the gap in the song needs to line up with the glass-of-water “chimes”. Any alteration in speed before that point would ruin the take, even if the chain reaction wasn’t broken. And then you have the camera work: I still can’t figure out how the camera operator did his job. Look at how often he has to step over rails and tracks and possible debris. In some places – like the transition from the second floor to the ground floor – it’s not at all clear how a human being is doing this unless it’s someone who can fly. Or at least hover. So while this entire contraption is playing out, it’s pitted against whatever convolutions they’re going through to move the camera around smoothly.
They leave so much to chance. At the 3:15 mark, it would be easy for one of those little yellow balls to be in the way of the basketball, which would foil the entire take. And this is just seconds from the end! I would want to make sure the chancy stuff was at the beginning. I wouldn’t want anything doubtful going on in the later bits. Particularly after those destructive later steps.
As the video plays, I can’t help trying to calculate the odds of failure and multiplying that with the odds of failure from all previous steps and trying to deduce how long they spent in this Rube Goldberg purgatory. According to this article, it was 60 takes. The entire project took months.
How many TV’s were smashed? Did they patch the same piano up for every take, or did they have to get a new piano at some point? How long would a reset take if it failed near the end?
Much love to OK Go for bringing us so much entertainment.
A bit about MMOG’s as they age.
If you follow my Twitter you probably saw my comment last night that I hated the column I’d written and was scrapping it. A few people expressed interest. In order to prevent you from being eaten alive by speculation and curiosity, it was a bit on the fact that the Game Developers Choice Awards would be giving id Software co-founder and technical director John Carmack a lifetime achievement award. I’d intended to do a sort of tribute to the guy. Sort of, “For you young people, here is who this guy is and why you should care.” But it ended up coming across as kind of creepy and fanboyish instead of informative.
Go read the comic, then come back if you like and read a bit about the humor in this strip.
Continue reading 〉〉 “Stolen Pixels #174: Better Than Aquaman”
A programming project where I set out to make a gigantic and complex world from simple data.
This is why shopping for graphics cards is so stupid and miserable.
A look back at Star Trek, from the Original Series to the Abrams Reboot.
Scenes from Half-Life 2:Episode 2, showing Gordon Freeman being a jerk.
I'm not surprised a fighting game has an absurd story. I just can't figure out why they bothered with the story at all.
This is a horrible narrative that undermines the hobby through crass stereotypes. The hobby is vast, gamers come from all walks of life, and you shouldn't judge ANY group by its worst members.
The true story of three strange days in 1989, when the last months of my adolescence ran out and the first few sparks of adulthood appeared.
The story of me. If you're looking for a picture of what it was like growing up in the seventies, then this is for you.
Everyone hates Black Friday sales. Even retailers! So why does it exist?
This is a massive step down in story, gameplay, and art design when compared to the 2014 soft reboot. Yet critics rated this one much higher. What's going on here?