Further update: Here's another bit of code I built this evening to reproduce a QBert-style board and movement. It is a bit tricky, and uses a few strategies that a probably very clunky. For example, I store the board in a two-dimensional array,
pyramid. It is built like this:
pyramid[row][col]. That makes finding legal moves super-easy: if you are adding or subtracting 1 from the current row, then you have to either add or subtract 1 from the current column, too. To find out if I have run out of room, I check first to see that there is a key (an index) at
pyramid[row]. If there is, then I check if there is a key at
pyramid[row][col]. If yes, then there is a block there. If there was no key in either case, then a block was never built there. It is a bit complicated, but perhaps it'll make sense when you see it. I have to get up in... 2 hours (sigh) otherwise I'd add a few comments to the code. Maybe I can do it later Saturday night.
The code: qbert_pyramid.p8
Update: I've been putting together a few examples and stepping through the code with explanations, based on a few student requests. Here's one that may have some useful stuff in it: A simplified platformer that features running, jumping, wrap-around, and dynamic animations. It isn't a full game, obviously, and it is NOT a demake, as it is not based on any historically-specific game. But there may be some explanations in the video that are useful to some of you.
Platformer code: oh_gravity.p8
Update: Here's the game controller configuration reader: It works on Mac, Windows, and Linux.
Note that your MacOS won't want to open it. You need to download it, put it into your applications folder, and then right-click on it. Choose OPEN. It will give you a terrible warning. Tell it to open the program anyway (it is perfectly safe).
Update: I've added a demake I wrote while traveling this weekend. It makes use of the original sprites from Super Mario Brothers (howbeit with altered palettes to accomodate PICO-8). It reduces platformers to their barest element: Just the hero running back and forth. I'll add commentary to this code as soon as I can.
Here's the (uncommented) .p8 file. Save it as a text file, rename it to mario_demake.p8, and drop it into your
The forthcoming assignment -- now due on Monday, 19 October -- is your first real "stand-alone" assignment. It is the most ambitious project you've tackled here, both conceptually and computationally.
The assignment revolves around creating something called a "demake." My definition of a demake is a bit different than others: A demake in this class is a "critical deconstruction of a classical video game that makes use of that game's original assets, wherever possible." For others, a demake is just a backwards port: E.g., "Minecraft" for the Atari 2600. That's a fine project, but it lacks one of the things we prize most: Critical engagement. Demaking, in this class, gives you a chance to do a couple of things:
- Reflect on how procedural concepts we're covering in this course are not just means for writing programs and applications, but are also ways of thinking-things-through;
- Experiment with early NES, Atari, and arcade-based gameplay (typically 4-bit or 8-bit) as sites of procedural thinking and inquiry.
Good candidates for demaking are just about any game from the 1970's or early 1980's you can think of, including (e.g.) Taito's Space Invaders, Donkey Kong, Centipede; Vic20's Lunar Lander; Atari's Adventure! and Tank Battle; and so on.
Unlike conventional "demakes", our goal is not to recreate these games from the ground up. Instead, the goal is to create a radically simplified version of some specific aspect of the game -- making use of bit-perfect original assets wherever possible -- in order to encourage viewers and players to think about the game differently.
One of the best analogs to my version of a videogame "demake" is the movie GIF. Sometimes they're just meme trash, or promotional filler. But sometimes, they can be genuinely interesting, taking a few strategic seconds from a film that we all know well and then looping the hell out of it. It usually forces you to view the film differently than you did before -- at least for a moment.
And it makes sense: GIFs are not a medium that is well-suited to fostering sophisticated critique of government policy. And they can't actually interact with a viewer at all. But they can take a few frames from a movie and -- unlike still photography -- ask you to pay attention to the sometimes surprising or even silly patterns that only become clear once you really look.
Here are two examples: The first is the renowned 20th Century Spanish actor Jose Ferrer, as the Emperor of the Universe, handing a blade to the Baron Harkonnen's nephew, Feyd, played by Sting. It is meant to be a moment of grave significance. But the effect of the GIF is to draw our attention to a lot of weird things: The way their bodies are barely swaying back and forth; the severely diminished role of the Emperor (Feyd doesn't even acknowledge him); the almost comic way the Emperor places the blade in Sting's hand. And so on.
The second example: In my head, Harrison Ford is an acting icon from my childhood. But in this GIF (and in more than a few others) he's a goof.
These "demakes" of movies offer us a chance to see movies in a different way.
Why make a broken version of a game?
One of the ideas that is central to a liberal education is the role of critical thought. It isn't always clear how critical thinking applies to games in a way that is consistent with the way video games work. You can talk apply critical thought to, say, the story a game tells, but that is mostly just critical thought imported from the English Dept. As a medium, video games need to be seen as more than just interactive novels or movies.
A demake is an opportunity to think about how a video game from the 20th Century presented information to us; or how we controlled characters in-game; or how the game relied exclusively and effectively on specific game mechanics; or how (innovative, lame, repetitive) that game really was.
Again: Our demakes are a bit different than conventional demakes that emphasize re-creating an entire game in a retro medium. That's not us. We are not building an entire game. We are deconstructing an old game: Taking it apart and thinking about some aspect of it that interests us. Our demakes will include a tiny bit of interactivity, but they will not be playable games.
Here are your requirements:
- Use at least 1 bit-perfect asset that you've found online. Example, use part of an original sprite sheet; snippets of the original score or sound effects; the original background image; etc.
- Using that asset (and others you've found, or created yourself), re-create some aspect of that game that interests you;
- Make some (modest) use of player input. We'll cover this on 12 October.
Sites like spritedatabase.net are useful, but there are many others.
Document the materials you use, and their sources, scrupulously.