After learning about Ludum Dare–somewhat ironically–48 hours before it began, I decided it was something that I just had to give a shot. It has easily been simultaneously one of the most fun and most stressful programming projects I have taken on in a while.
Before It Began
I don’t think I had any idea what I was truly getting myself into. I knew it was going to be a challenge. I knew it was going to be hell. But I didn’t quite understand the nature of the beast.
It was at this point, before the compo began, that I made the stupidest mistake of all. I decided to make a game using technologies that I had never even touched.
I had seen a few examples of WebGL online before and was blown away. Full 3D from a browser? This is the future of the internet.
The problem though is that I had never touched WebGL. I had never even successfully dabbled in OpenGL. Every time I tried to find a working tutorial, there was always some bullshit reason that the code would refuse to run. The closest thing I had to any sort of 3D graphics knowledge was the work I had done with Unity3D for college, and a few painfully simple Direct3D projects that really never got out of the “3D tech powering a 2D engine” sort of thing.
Deciding I was going to do this was the programming equivalent to deciding it was a brilliant idea to saw off one of my legs before participating in a race.
When the competition began, I–like many others, I’m sure–was completely caught off guard by the theme. Alone. Out of all the themes people could have voted for, Alone came out on top. I wasn’t exactly disappointed, but it was a theme I never expected to be selected. As such, the first two hours or so were spent pacing around the room–it helps me think, honestly–trying to ponder this strange theme.
First my mind went to shadows. Maybe you could be someone who wishes they had friends, and interacted with your shadow to complete puzzles in some sort of platformer? From there, my mind pondered more about the darkness of it all. Everything around you is dark… space? That’s kinda like space. So dark, mysterious, beautiful, empty.
I liked where this was going, but what occurred to me is that games have stolen space’s thunder. It’s still amazing, but there are so many games in space that it feels less like a statement of wondrous emptiness, and more just a thing you do when you can’t think up a legitimate theme for your sequel.
My first mental attempt at adding a feeling of loneliness was somehow make it multiplayer. But that didn’t capture the feeling of being alone; if anything, it was the opposite. No, to be alone meant being cut off from everyone around you, not interacting with them.
That’s about when inspiration hit. If you truly want someone to feel alone, remind them of everyone else who isn’t there. Give them something that they will be drawn to that will remind them that they are hopelessly disconnected.
The idea for my game–the story or plot, if you want to use that term–is that you enter an area of empty nothingness, with the only thing to be seen around you are a small collection of lonely sparks. They are quiet and unresponsive. You can not interact with them; you can only observe them.
Every one of these blips in this empty realm have been left here. Left behind. They are all that remains of those who have visited this place before. Memories, if you will. Nameless, wordless memories of those who are long gone.
But most important of all: Every one of these memories are left behind by actual people. People like you.
None of them have been hand crafted by a developer to represent “pretend” people. When someone visits the realm–when you visit the realm–your actions create a new memory, and when you leave, it is left behind, like a message in a bottle that will never be answered.
This is what it means to be alone.
So… Is This A Game? Or Art?
I still haven’t stopped asking myself that one, honestly.
I was trying to think outside the box. I didn’t want to just make a platformer, RPG, or something predictable. I wanted to make something memorable. Something that was different, inspiring, and unique. I would like to think I succeeded on that part.
The problem though is it’s hard to call this a game in the traditional sense. It’s not like you’re running around with a health bar, save files, a set goal, and a time limit. With so many traditional elements abandoned, can it still be called a game?
The mindset I have been in is that games are “Interactive Experiences.” Forgotten Memories has been designed with that idea in mind. In the end, it strikes me as being an attempt at “Games as Art.” if such creations are games, art, or both, well… I think that’s a debate that reaches far beyond my contribution.
It is pretty though, whatever it is. Yay shiny things!
The Technical Stuff
I should probably mention that depending on what you think about these sort of things, you might want to not read the rest of this journal. Why?
Well, for one, if you truly think this is something beautiful, and thing that knowing how it works would ruin it, the rest of this post is where I take this beautiful thing from you and dissect it, like an immature highschool-er violently stabbing the corpse of a once-beautiful bird, now bloody mess.
Also, it’s a bunch of technical boring shit.
Those, by the way, are known more formally in the math world as “Strange Attractors.” I REALLY wanted to add more variation to them, but not knowing a whole lot about the math behind it, I could only get one formula to work. Thankfully one of the interesting thing about strange attractors is that you can feed them various numbers to get visually different results, so it wasn’t too terrible. Maybe if I expand on the project sometime I’ll work on finding more.
PHP, Ajax, and MySQL handle the sending and receiving of data from people that connect. Yes, the memories ARE legitimately formed based on what people do. Sadly though, because of time restrictions, it’s not based as directly as I had envisioned. I wanted it to be meaningful: people who stay a long time make bigger memories, people who move around a lot make more chaotic ones. But even though I got code in that measures how much you rotate, how much you press buttons on the keyboard, how long you hold those buttons, and how long you stick around, the only data that gets plugged into the formula is how much you rotate the mouse.
Really though, that worked to my advantage, as apparently quite a few people don’t move with the keyboard anyway. Looking at my database shows that a third or so of the people who connect never touch the keyboard, which may be because you can move using the mouse buttons. I didn’t realize that was a feature of the library I was using, so the data-grabbing code doesn’t account for it.
Of course, the code is available at the link above, so if you really want to know the ins and outs, feel free to poke around!
Final Thoughts (And Some Advice)
Don’t ever try learning a new technology or language for one of these things unless absolutely necessary, let alone several. It’s suicide. I may have had success with it this time around, but I owe that in large part to having been exceptionally lucky. This should have never worked. That it does baffles me.
Likewise, prepare for these things. Consider everything that you might do, and have it ready to go. If you think you might use an art tool, download it ahead of time and learn it. If you’re going to make something multiplayer, make sure you have a server ready to go. I lost an hour or two in downloading, installing, and configuring Linux on a virtual box so that I would have somewhere to host this thing.
Finally, do something simple. If there is one thing that I can try to claim was a brilliant idea, it was that what I was trying to do–besides a lack of knowledge of the technologies–was ultimately rather simple. The more features you try to add, the better chance you have of running out of time. Think small, and build from there if you have more time left over.
In closing, I had a lot of fun, but ultimately was disappointed that I didn’t have time to add a kitten to my game.