Excerpts from Imperium, by Ryszard Kapuscinski

Armenia, 1967

komitasWe also visited a young composer — Emin Aristakesyan. Vanik took me there so that I could hear the great Komitas sing. Komitas is to Armenians what Chopin is to Poles: their musical genius. His real name was Soomo Soomonyan, but as a monk he assumed the monastic name Komitas, and that is what they call him here. He was born in Turkey in 1869. At that time the majority of Armenians lived in Turkey. Estimates differ: two, three million. He studied composition in Berlin. He dedicated his entire life to Armenian music. He wandered around villages collecting songs. He established tens, others say hundreds, of Armenian choirs. He was a wandering balladeer; he improvised epics; he sang. He created hundreds of compositions, magnificent, great, known to all the Philharmonic orchestras of the world. He wrote masses, sung to this day in Armenian churches.

In 1915 the massacre of Armenians began in Turkey. Until the time of Hitler, it was the greatest massacre in world history: 1.5 million Armenians perished. Turkish soldiers dragged Komitas up on a cliff from which they were going to push him. At the last minute his pupil, the sultan of Istanbul’s daughter, saved him. But he had already seen the abyss, and this made him lose his mind.

He was forty-five years old then. Someone took him to Paris. He did not know that he was in Paris. He lived on for twenty more years. He did not make a sound. Twenty years in an institution for the mentally ill. He hardly walked, said nothing, but he watched. One can only assume that he could see; those who visited him say that he observed faces.

Questioned, he did not answer.

They tried various things. They sat him down at the organ. He got up and walked away. They played records for him. He gave the impression that he did not hear. Someone placed a folk instrument on his knees, the tar. He carefully laid it aside. No one knows for certain whether he was ill. What if he chose silence?

Perhaps that was his freedom.

He had not died, but he no longer lived.

He existed-did-not-exist in that limbo between life and death, the purgatory of the insane. Those who visited him say that he grew more and more tired. He became stooped, gaunt; his skin blackened. Sometimes he tapped his finger along the table, in silence, for the table emitted no sound. He was calm, always serious.

He died in 1935: and so only after twenty years did he fall into the abyss from which his pupil, the sultan of Istanbul’s daughter, had once saved him.

http://www.youtube.com/watch?v=FrZe9TZhJkM
http://www.youtube.com/watch?v=sQMeD4OpcMQ

Turkmenistan, 1967

Ashkhabad, a peaceful city. Now and then a Volga passes along the street. Now and then a donkey’s hooves tap against the asphalt. They are selling hot tea in the Russian market. One potful — twenty kopecks. But can the value of tea be measured that way?

Here, tea is life. An old Turkman takes the teapot and pours two small bowls — one for himself, the other he passes to the little yellow-haired boy. “Nu,” he says to the boy. “Oy, Diadia,” the little one answers, “I’m always telling you that you’re supposed to say na, not nu.” Diadia laughs, perhaps at the same thought that occurs to me: that he can no longer be taught anything. A Turkman that has lived long enough to have a gray beard knows everything. His head is full of wisdom; his eyes have read the book of life. When he got his first camel, he learned what wealth was. When a herd of his sheep died, he learned the unhappiness of poverty. He has seen dry wells, and so he knows what despair is, and he has seen wells full of water, and so he knows what joy is. He knows that the sun brings life, but he also knows that the sun brings death, which no European really understands.

He knows what thirst is and how it feels to have one’s thirst quenched.

He knows that when it is hot one must dress warmly, in smock and sheepskin, and not strip down to the bare skin, as some men do. A dressed man is thinking, an undressed one — no. A naked man is capable of committing every stupidity. Those who created great things were always dressed. In Sumeria and Mesopotamia, in Samarkand and Baghdad, despite the diabolical heat, people walked about dressed. Great civilizations arose there, which neither Australia nor the African equator, where people walked naked in the sun, can boast of. All you need to do is read the history of the world.

It could be that this old man knows the answers to Shakespeare’s great question.

Shifting the burden of creating tile-based artwork to the renderer

I recently finished making a game for a contest. A lot of the other entrants used tools like Construct or Game Maker, but I decided to go with what I’m most familiar with — C++. I made use of Box2D for simple platformer physics, and I ventured into some new territory with OpenGL and OpenAL with mostly positive results. Long story short, spending two months developing with nothing but Visual Studio and tools of my own creation made me realize anew that I really enjoy coding. I’ll no doubt spend most of my time on school projects from now on, most of which will be level design or UnrealScript, but I’ve decided that I’d continue to make an active hobby out of creating small games from scratch. Since I’m necessarily moving at a more leisurely pace, I now have the opportunity to plan and document more carefully, so I figured I’d use this old, neglected blog to do that. Mind you, these aren’t tutorials and I’m by no means an authority — I’m more or less thinking out loud, except with laboriously constructed diagrams.

This last game was a platformer with tile-based graphics. The problem with tile-based graphics, if you’re doing them the old-fashioned way, is that you end up making a lot of redundant variations of the same tile if you want them to end up looking presentable. There are cases where it’s good to have direct, pixel-level control over how things look, but much of the tile work I was doing in Photoshop could have been handled procedurally, on the fly, in the game itself. Since I’m aiming to streamline the level creation process as much as possible, delegating to the computer the task of combining different sets of graphics in a way that looks pretty is one of my first goals.

Here is a sampling of the many individual tiles that were required to make a set that still had a lot of pieces missing. Your average tile consists of a base texture, which is the same across all tiles in the set, and an overlaid trim that’s edited to fit the shape or outline of a particular tile. All of the tan brick tiles could be boiled down to two textures if the base layer and the trim layer were rendered separately by the game, and the trim layer properly wrapped around the edges of the shapes in the level.

I’d like the game to be able to generate something like the above on its own, given those two textures and the user-defined shapes, in the form of a list of vertices.

Although you can easily get away with only having a certain set of predetermined ’slope’ tiles, I figure now is as good a time as any to start venturing beyond the SNES-era notion of tile-based levels on a clearly-defined grid. I decided to work on a way of rendering overlaid trims onto arbitrarily defined shapes. Here is that process:

A 2D shape comprising edges of arbitrary angles is drawn. This example uses a convex shape with vertices drawn only on gridlines, so that if the shape were to be divided into grid-spaced tiles, each tile would have no more than 4 vertices defining its shape. Whether a tile-based approach will be used, or whether more finely detailed shapes may be drawn, is yet to be determined.

A base texture is applied to the shape, in this case sourced from a single, tiled, 32×32 image. To go with the grid-spaced tile paradigm, each vertex is drawn translated outward from the center position of the tile. The UV coordinates for each vertex are determined simply by translating the relative vertex position into UV space.

A trim texture is selected, sourced from a 32×32 image in the same format as the base texture. Thanks to transparency, trims may be of any thickness up to 1.0x the height of the image, and the trim placement algorithm does not require (or allow, if you prefer) the user to explicitly specify a desired thickness. A starting location is chosen, and the process about to be described is repeated edge-by-edge until the shape is closed. In this example, we start at the uppermost and leftmost vertex, and work clockwise.

Note: These steps work through what should happen conceptually, or how a human would lay things out. An efficient, programmatic approach will be divined once the process is completely described in these terms.

First, the distance of the edge is measured. Distance((-0.5, 0.5), (0.5, 0.32)) is 1.016, which tells us how long our trim quad needs to be.

The top-left corner of the appropriately-sized trim quad is placed at the vertex in question, becoming the anchor point for rotation. The rotation of the trim is determined by finding the angle between the horizontal and the vector formed by the edge along which the trim is placed.

The preceding steps are repeated for the next edge:
From (-0.5, 0.32) to (0.26, -0.5), distance 1.118
Vector2D(0.76, -0.82), slope angle 47.17 degrees

The edges are joined properly, but with some overlap. In order to produce a seamless transition, the overlapping area needs to be clipped off.

The edge along which the clipping should occur extends from the vertex which adjoins the two edges, along the vector halfway between the two edges (the inverse 2D cross product of -A and B? You tell me). In this non-programmatic approach, we delete everything to the left of the clipping vector.

In the actual impelementation, this information will be used to modify the bottom-left vertex of the trim quad before it is drawn. Recall that a trim texture, transparency and all, is square. The orange rectangles below outline the actual quads to which the trim textures are applied. In local coordinates, their width is equal to the length of the edge, and their height is always 1.0.

Vector C is the line which runs from the edges’ adjoining vertex through the intersection of the two quads’ bottom edges. This intersection point becomes the new bottom-left vertex of the trim quad. The UV coordinate at this vertex is (u, 0.0), where u is the distance from the original (non-clipped) bottom-left vertex to the new bottom-left vertex.

The process is repeated yet again:
From (0.26, 0.5) to (0.5, -0.5), distance 1.028
Vector2D(0.24, -1.0), slope angle 76.50 degrees

This step identifies a flaw in the process: If the edge to which we’re adding trim forms an acute angle, the edge of the trim will extend beyond the bounds of the shape. One possible solution is to mask the trim to the underlying shape, but it’s probably computationally cheaper to alter the bottom-right vertex of the trim quad in the same way that we already alter the bottom-left.

As I mentioned earlier, the so-called clipping vector for the bottom-left vertex is based on the current edge and the previous edge. Similarly, the clipping vector for the bottom-right vertex will need knowledge of the next edge as well as the one currently being iterated over in the trim placement process.

This case is simpler, however. The clipping vector for the right side is simply the next edge in the chain. The new bottom-right vertex is the point at which the next edge intersects the bottom edge of the current quad, and its UV coordinate is (u, 0.0), where u is equal to the length of the edge minus the distance between the old bottom-right vertex and the new one.

Note: You will see momentarily that this is not the best way to solve this problem. However, this is not a tutorial, but a documentation of the design process (which often takes place very late at night, I might add). I prefer to leave such momentary lapses in judgement intact in order to demonstrate how poor design choices can be avoided by taking the time to plan things out before implementing them. You will make mistakes, so it’s best to make them all as early as possible, when they can still be easily corrected.

cur: (0.5, -0.5) to (-0.5, -0.5), d 1 | (-1.0, 0.0), angle 180
next: (0.5, -0.5) to (-0.5, -0.15), d 1.06 | (-1.0, 0.35), angle 160.71

In the case of an obtuse angle, the next edge never intersects the current quad, so the bottom-right vertex should only be clipped if the angle between the two edges is greater than 90 degrees.

Additionally, because the corner formed by this edge is acute, it is a triangle rather than a quad. This is a separate issue that will be addressed in the implementation.

The process is repeated for each edge until we return to where we started.

This last overlap is a bit of a special case. Since each edge covers up the previous edge, we normally don’t have to clip the right edge except in cases of acute angles. However, assuming we draw the edges in sequence, one on top of the other, there will be an unavoidable overlap wherever we start and end.

The quick solution is to add a special case that would clip the right edge of the last trim quad. However, adding such functionality to the normal trim placement process would solve this problem as well as the previous acute angle problem without the need for special case logic. Additionally, it would be essentially identical to the process used to clip the left edges. The performance difference is negligible, but it will result in much more elegant code.

A shape is a series of edges. In our shape creation process, of which trim placement is a part, the edges need to be in a doubly-linked list, so that any given edge is aware of the edges before and after it. Using this information, the trim placement algorithm will determine the proper vertex positions and UV coordinates for each quad/tri, and then apply the trim texture, requiring no additional data describing the thickness of the trim.

No implementation has yet been written, and some details are still up in the air. However, we’ve come up with a decent procedure for adding trim to a shape. By articulating every step of the process as well as running through it by hand in Photoshop, I’ve been forced to critically evaluate every decision and to make sure that the code that will result from this plan will be thoroughly designed, free of hastily-made errors, and if nothing else, well-documented.

Chernobog, Week 9

I’ve made a lot of progress on this game since the last post, but most of my efforts at documentation have been directed toward unnecessarily detailed SVN comments and the project’s technical design document, which is in desperate need of an update.

cbog9

The last few features were implemented kind of hastily for the final submission of the class, but everything else is fairly flexible and as elegant as I know to make it.  Most everything external is loaded from XML and stored/accessed on demand via a ContentManager class, making updating graphics, sounds, tilesets, levels, etc. a breeze.  The basics of a platform game are in place, with Box2D-simulated physics, generation of physics bodies from the tile-based map, collision triggers, a traversable map with multiple rooms, some UI components, and a basic platforming mechanic that involves spawning red balls from thin air and using them to push the player and other sprites around.

Aside from cleaning up a few of the latest classes, I look forward to adding some kind of AI abstraction once I have the time, as well as whipping up a level editor, and I’ll be on track to making this more of a game.  The current exe is up here (WASD, Spacebar, LMB, RMB, 7).

The Heaviest Corner on Earth

A few screenshots from an environment art project I worked on a while ago:

wip_leerarch2wip_leerarch3wip_leerarch5ingame_bacon_2ingame_bacon_3

Chernobog, Week 2

rackham_valkyrie_smI made pretty good progress on my SDL project this second week. It’s approaching the point where I could start writing some game-centric stuff and have it reasonably integrated into a handsomely designed framework. There are definitely a lot of chunks missing, and a lot of what I have will inevitably need expansion, but it feels like it’s shaping up. Since last week, I’ve added timing functionality (for regulating framerate and animation speed), event handling for user input, and movable sprites which can display frame-by-frame animation.

Here’s a ghetto diagram of the important classes. (One of these days I need to learn how to make honest-to-god UML diagrams.)

classorg02

And here’s a video showing off keyboard/mouse input to move sprites, as well as sprite animation and the recently-hacked-together text display class. Jefferson animates when he moves — the screen recording skips too many frames for it to translate well to video.

I’m finding this all very fun, and I’m getting to the point where I’m comfortable enough with these things to fluidly express my ideas in code without excessive limitations. I owe a lot of that comfort to watching the lectures from Harvard’s Intro to Computer Science course over winter break. I doubt that ITGM415 will require me to deal directly with cryptography, or data forensics, or sorting algorithms, but being exposed to the implementations of these things has helped a lot. Especially with regard to memory, knowing how things work at a lower level than is traditionally taught in programming classes at art school leaves me with far fewer questions on how to efficiently solve problems.

There’s much more to do. For the immediate future, my sights are set on text display and some more advanced drawing functions. I also need to work on sealing and preventing memory leaks, and a big part of that will be writing an XNA-style ContentManager class that keeps track of external files to prevent redundancy, streamline cleanup, and confine the loading of files to predetermined times. Next week is also my target date for having a tile-based Level system in place, including reading from file, drawing, scrolling, etc.

Chernobog, Week 1

bilibinsmallI’m taking a class called C++ Programming II this quarter, and at the end of the quarter I will have an unfinished game that will be as close to presentable as I can make it in ten weeks.  I’m documenting it here to track my progress and see how far I can take it week-to-week.

“Unnamed Project for C++ II” doesn’t exactly roll off the tongue, so I gave it a working title.  It comes from a 12th-century Slavic god named Чернобог.  Whether the game will actually involve Slavic mythology is not clear.  I’m aiming to make a platformer in the vein of Super Metroid, for the specific reason that it’s more challenging to engineer than a strategy game or some out-of-the-box artsy thing.  The art will be placeholder city, the software architecture will be amateurish, and the whole thing will be woefully incomplete, but I’m putting as much time into it as I’m able.

One restriction is that I use SDL, which is written in C, so the first order of business is wrapping it into an object-oriented framework that will be easier to use as a client.  I got some first-hand knowledge of C from CS50, but I can’t fathom how people managed to organize complicated things like games and multimedia libraries before C++.

I learned some rudimentary XNA over the break, and that’s paying off now because I’m ripping off its basic architecture like nobody’s business.  So far, I have the Game object in place, with various graphics classes simplifying the process of loading and displaying images, as well as a couple of helpful utility classes.  I’ve got plenty of steam left; this is just an arbitrary end-of-week update.

Here’s a fake diagram of the class organization:

classorg01

And what it does, which is pretty boring as yet:

To do in the immediate future: Sprite class, Keyboard input, Animation class, SpriteManager

Things that are important in Source mapping

These are but a few things I’ve learned through the mistakes I’ve made in a few weeks of mapping in Hammer with custom props.

1. Grid size of interior spaces

ldimportant1

I don’t just mean building on a grid so that all your brushes fit into a grid of 8/16/32/64 units.  Equally important is making the exact size of the interior space of your rooms a multiple of a standard prop length.  If you intend to use static props to decorate a room as shown above, the size of the room needs to be very particular.  In the example shown above, the wall section in which I want to fit this row of props is 1344 inches long.  That fits the grid fine as it’s 64*21, but the prop I’m trying to use is 256 inches, which doesn’t divide evenly into 1344.  The props could be extended past the wall, but that’s a sloppy solution that doesn’t always work.

2. Relative scale of objects within a scene

ldimportant2

This is pretty fundamental.  You can see a very noticeable difference in texture scale (and polygon density) between the arch and the corner column.  In my mind as I was working on the column and roof elements, the room seemed a lot smaller than it actually is.  Once I got everything together ingame, the jump in quality was very jarring.  This definitely needs to be changed, probably by separating the whole column shape into smaller pieces, and using BSP for the body of the column with static prop decorations on the bottom.

ldimportant3

Here you can see another example.  The onion dome is a lot large than I was imagining it, and I think it ended up looking so comically large as to be structurally unbelievable.  The windows at the base are large enough for the player to fit through.  Additionally, the sparsely detailed areas seem even more bland when enlarged, which brings me to another point.

3. Reference material and concept art

Also very fundamental.  The design for the arches was more-or-less lifted from arches in the Mezquita de Cordoba in Spain.  I don’t have any qualms about this thievery, because I’m no concept artist.  That’s exactly why I should lean much more heavily on reference than I did for the corner supports, roof, and dome, which were more or less pulled from nowhere.  I think the difference in quality, especially in the half-assed textures, really shows.

In addition to making custom props detailed and fundamentally appealing to the eye, it’s good to have a general sketch of the level from an aesthetic point of view.  I can come up with passable props if I am inspired by (i.e. steal from) enough reference material, but more complicated tasks like putting it all together with a coherent color scheme are more difficult.  I’d like to blame that on my school’s foundation design courses for their lack of practical, commercially-oriented instruction.  But boo-hooing aside, I need to do more to hammer those things out ahead of time and make sure they look good before moving on.

4. Modularity

ldimportant4

Aside from this roof’s aesthetic issues, the biggest problem is that it’s made of two giant chunks.  It would have been four, but lamentably, the Source engine is apparently unable to mirror static props and can only rotate them.  I realized after putting this roof together that it doesn’t do much that BSP couldn’t do, it doesn’t use texture space efficiently, and most criminally, there’s absolutely no context other than this particular building in which it can be used.  It needs to be broken up into smaller chunks, and it would probably be better to use BSP for the top of the plateau so that it can take advantage of lightmapping.

A Summary of My Career Interests Thus Far

Ominous prologue, the early 1990s: My grandfather, Herbert L. Forsythe, Sr., had an Atari 2600.  From as early as I can remember, I was at his house watching and playing Kaboom! and River Raid in what were to become some of my earliest, fondest memories.

riverraid

My senior year in high school, I had to decide which colleges I wanted to apply to.  The one self-evident rule in this process was to first decide what job I’d like to have, and figure out a good school from there.  I decided I would become a Graphic Design major, because there was money in it and I liked making websites.  Looking back, these decisions weren’t entirely solid, but I’ve always believed in having a concrete career goal despite any doubts, knowing that there’s still time to change paths.

That year, Senior Theology Teacher Mike Bouton invited John Coburn to speak to a few students.  John was an alumnus of my high school and had majored in ITGM at SCAD. (He currently teaches at ITT Tech in Bessemer.)  He talked to us about SCAD and about the game design program, and while I still wasn’t seriously considering ITGM at that point, it’s probably because of Mike Bouton and John Coburn that I’m at SCAD now.  My plan, anyway, was to go to SCAD and major in Graphic Design.

ie5p5At some point that summer, I realized that graphic design made me want to kill myself.  When I got to Savannah, this revelation was reinforced by completely substanceless foundation design courses.  So I decided I’d major in Animation instead.  After all, I really enjoyed making dumb flash movies as a kid.

Still in my first year, probably sobered by drawing classes and the realization that animation involved a lot of drawing, I figured I probably wouldn’t enjoy it very much.  I had two other options that appealed to me more than Animation: Visual Effects and Interactive Design and Game Development.

VSFX, to me, was all the fun of Animation without the drawing.  I considered going into ITGM, but that wasn’t a real major.  Most of the ITGM freshmen I met chose their major based on the conclusion, “I like to play games, therefore I should make games.”  It was a Collins College major, and I had no interest in tightening up the graphics on level three.  Briefly, I decided on VSFX.

devry

But a short while later, conveniently right before I had to declare a major, I came to a conclusion: There are people who make games.  It is a job that people do. And besides that, pretenses about game development programs don’t mean anything at hiring time.  Bottom line, I had enough self-confidence and enough faith in SCAD to commit myself to ITGM as a major.  Over the course of a year, I had gradually moved toward less established, less respectable disciplines.  But ITGM definitely felt like the right choice, and I don’t regret it.

I still lie when the lady giving me a $10 haircut asks what I’m majoring in, and I don’t like the non-academic “hooray let’s play carcassonne” attitude of the department, but in general my experiences in a year of ITGM classes have surpassed my expectations.  Game development education is still very young, and it will probably be exponentially better 10 years from now (though if trends continue, no one will be able to afford it then anyway).  In any case, I’ve no doubt learned a lot.  One key lesson is that as far as art school majors go, Game Development is no less legitimate than any other.  What matters is what you put into it as a student, and ulimately how good you are at the job you want to do by the time you graduate.

Within the discipline of game development, I decided that I wanted to become an environment artist.  I enjoy 3D modeling, and I’ve always been inspired and impressed by the things I see at sites like polycount.  I was also considering level design.  The distinction between the two is that environment art involves designing and creating the 3D art assets to be used in a game, whereas level design is the process of creating the space in which gameplay occurs, placing and scripting obstacles which make use of the game’s mechanics in order to challenge the player in fun and interesting ways.  In a way they’re closely related, but they require very different skill sets.

What drew me to environment art is that it requires a lot of technical skill and artistic ability, and those are things that you can easily see.  If you want to demonstrate to someone that you’re a good artist, you show them your portfolio and they can instantly determine whether you’re good at what you do.  In level design, there is no such convenient metric.  Fun is a more abstract concept, and you have to actually play through a level to know if it’s worth anything.  Also, any idiot can figure out how to put boxes together to make a game map, but proper modeling/texturing/sculpting has a steep learning curve, and it seemed like a good idea to have successfully breached that barrier to entry as proof of my ability.

After a couple of quarters in ITGM, though, it didn’t take me long to realize that it wouldn’t pay to base long-term career goals on frivolous assumptions like those.  I’ve been trying to feel out level design and environment without too many preconceptions.  Lately, one thing has really tipped the scales toward level design.  I’ve been working on a single-player map for Half-Life 2.  It’s been a whole lot of fun to create a world and come up with inventive challenges.  Last night, after spending all day working in Hammer, I realized that it was 4am and I hadn’t eaten in 10 hours.  I haven’t experienced that feeling in years, and I think it’s a true indicator of where your passions lie to see what completely absorbs you and makes you lose all track of time.

at-hl2blockout

I still really enjoy environment art.  If I hadn’t taken such a circuitous route in deciding on a major, and if it hadn’t been for excellent foundation drawing classes, I probably wouldn’t be anywhere near as competent an artist as I am.  There’s still plenty of room for improvement, and I plan to continue.  But as of right now, with another quarter or two left to change my mind, I can’t help but see level design as the most appealing career goal.

Maybe the very reason I’ve been so easily drawn to level design is that any idiot can put boxes together and make a map.  There’s no massive barrier to entry, but that’s an altogether good thing because it allows a level designer to block his ideas out quickly.  There’s a level of challenge and complexity far beyond blocking out a space and throwing in NPCs.  Creating a convincing world that supports gameplay systems, scripting events and NPC behaviors, optimizing levels to run efficiently, and making levels fun are all things that I can get behind and that I enjoy immensely.  I’ve come to realize that there are plenty of things that separate good levels from bad, even if, unlike an environment art portfolio, you can’t tell just by looking at them.

Real-world applications of fifth grade math

psyc101spreadsheet

I love end-of-quarter spreadsheets.  The fun thing about the F/D/C/B/A system is that if you’re sitting at a low B and it’s impossible for you to get an A, you only need to maintain your low B.  If 40 points out of 100 will maintain that B, anything more than 40 points will, gradewise, be wasted.  In my first year I needed a 42 on my final project in Drawing For Storyboarding to maintain a B (an A was impossible).  Realizing this, I lowered my standard of quality and just focused on getting the project done passably, but I ended up getting a 92, which was my highest grade in that class.  It kind of pissed me off that I got an A.

Of course, now that I’m in classes that are both enjoyable and extremely relevant to professional growth, I still put forth 110% in my major classes even when I can afford to do less.  But for work-intensive liberal arts classes like Psychology, it’s a nice relief to find that you can safely neglect a 9-page writing assignment in order to focus more energy toward those important major classes.

Spreadsheets are fun.

The blood of patriots and tyrants: It’s a natural manure!

Very recently I’ve started keeping a bookmark folder on my favorites bar for random notes.  The idea is that when I find something interesting online, I add it to this folder instead of letting it sit in my short-term memory for three minutes before it decides to leave forever. (I’m not sure why it’s never dawned on me to use bookmarks.)  From the 50 or so sites I’ve collected, here are the few that I think are worth sharing.

 

Games

Deus Ex – The Nameless Mod (SA) – On the plus side, this mod is based on one of the best games ever made and is apparently pretty good.  On the down side, it has a ridiculous plot based on a Deus Ex fan forum.

Valve Publications – I cited one of these papers for an essay in Survey of Interactive Entertainment.  I love Valve for their in-game developer commentary, and for generally advancing the medium by realizing it’s OK to talk in detail about games that have been released.

Warren Spector Master Class – An absolutely brilliant educational resource.  I’ve only seen a few of these lectures due to lack of time, but I’ve learned a ton from Warren Spector and the professionals he invited to speak at his UT class.

LoZ Parallel Worlds Let’s Play - These massive romhack projects always amaze me because of the amount of work from one or two people that goes into squeezing more content out of beloved childhood classics.  Unfortunately, all that work doesn’t guarantee a fun game.  I haven’t played parallel worlds, but from the LP it looks like one of those masochistic games where you have no idea where to go 90% of the time.

IGDA – GDC Student Scholarships - Attending GDC is the holy grail of the aspiring game industry professional, but it’s expensive as hell.  A free pass is an opportunity that can’t be passed up.  If that fails, I hear volunteer applications open up around November.

SCAD TV – A few of the lectures from GDX were posted here.  I’ve been meaning to get around to watching the ones I missed in person.

Elitist Jerks Forums – Many of the blogs I read cite EJ as an important resource for understanding game design.  I’m afraid that if I keep up with WoW, I won’t be able to resist reactivating my account.

Belan the looter’s episodes – Reading this site briefly made me want to play UO again.  UO was wonderful fun back in the day for the freedom it offered.  Unfortunately, it was fun, just like the radio was a genuine home theater experience.  MMOs having come as far as they have, you just can’t go back.  Even with all the flowery nostalgia that tricks me into thinking that being murdered and looted on Ethics’s doorstep was the most fun I’d ever had, I just can’t find it that fun anymore.

 

Educational

Academic Earth – This site is basically hulu for online video lectures from various universities.  If I had all the time in the world…

Free Foreign Language Lessons – If you think of life like Metroid, knowing only one language is like getting the charge beam and calling it quits.  You can go to Brinstar, but you won’t get much out of it without the Varia suit.  Learning a living language “unlocks” a huge part of the world to you.  Nota a mi mismo: Retén español.

Environmentoring (ConceptArt.org) – A series of tutorials in a free, forum-based class structure.

Middle English: Languages of the World – These videos are a pretty interesting look at the evolution of the English language.  Watching some of this guy’s videos also provokes mild Alabama rage at his fancy book-learnin academic attitude.  A lot of people write the way they speak, and the result is a mess of unclear writing.  On the flipside, I don’t understand people like this, who speak the way they write.  It makes you come off as stiff and condescending when you have to pause and let the person you’re speaking to look up a word in his pocket dictionary.

cannedmushrooms’s Video Lessons in Zbrush – Some charitable fellow has made a series of free video tutorials for ZBrush.  ZBrush is very important to have a grasp of, and it’s also a complete mystery to me, so I’ll have to check these out over the summer.

Student Illusions About Being a Game Designer – I wish to God that SCAD would hand a hard copy of this article to every entering student who’s considering ITGM as a major.

 

Random

White movement (Wikipedia) – Everybody loves the Soviets (except those oppressed or executed by the Soviets), but the Tsarist White Army never gets any love.  I guess the Bolsheviks did a good job of taking it to an undisclosed location, shooting it in the back of the head, and shoving it down a well with a hand grenade chaser.  The Russian Civil War is an interesting bit of history, and it’d be cool to see a work of art where Tsarists soldiers do something other than shoot civilian infants on a giant staircase.

Requiem for a Harlequin (Wikipedia) – I’ve always known David Allan Coe as the guy who wrote all those racist country songs, but apparently he’s deeper than that.  This is a rock album about growing up on the streets that he did before he starting playing country music.

A Night on the Town – I heard this show on 90.1 WABE Atlanta heading back from Birmingham to Savannah, and I made a note to look it up online.  It’s nice when public radio offers something other than classical and space music.

Tsar Cannon – The largest and most ridiculous cannon ever built.  Might be a fun ZBrush project.

Living in Three Centuries: The Face of Age – A collection of portraits of people over the age of 100.

Hank Williams III – Ramblin Man – I never knew that there was a grandson of Hank Williams running around and performing music, but here he is.  His act is one of those genre mashups.  They call it cowpunk.

House (Hulu) – The last few episodes of House have been fantastic.  I really enjoyed the Mos Def episodes, and the plot twist federally mandated by Barack Obama was handled very well.  It’s just gotten better from there.  I love the surreal stuff, like the season 2 finale.

WordPress Themes