Global Game Jam 2014 postmortem

The Global Game Jam 2014 site doesn’t seem to have a blog capability this year, or if it does I’m stupid and can’t find where I can blog about my progress. So I wrote this entry as the weekend unfolded.

The theme this year was: “We don’t see things as they are, we see things as we are.”

Interesting theme! I like it. A good idea came to mind almost immediately. I thought about a world that changes as the player changes. By picking up items, the player’s attributes change, and as the player’s attributes change, the world’s attributes change as well.

Then the idea came to me to have the player change by looking into mirrors that reflect a distorted view of the player. The more the player looks at the distorted reflection, the more they come to look like the reflection, giving them new powers… but, the world changes to match.

Teaming Up

At the Cleveland site, we had a mix of pre-established teams, pickup teams, and freelancers who contribute their specialized skills to various projects. After an initial period of brainstorming after the theme reveal, we assembled and everyone had an opportunity to pitch game concepts to the entire group, and then people who were interested in working on that concept came over and teams formed. I was happy to find that a few people approached me after the pitches to say they were interested in developing the project with me. I had never met or worked with any of them before, but a few of them knew me through the Cleveland Game Developers facebook page and/or my writings on this website. I think that’s the first time that’s happened for me.

In all the (two — I was sick last year) Global Game Jams I’ve participated in, I’ve never had a successful group project. I tried to fit in with a group in GGJ2012, but ended up going solo on an idea that turned into ASCIIboros, and everything I’ve done since then has been solo Ludum Dare compo projects. So I don’t have a lot of experience working with groups, other than in my career — and much of that experience has been frustrating. I’m an introvert and I don’t like to confront or argue with people, especially people who I don’t know well, in person. (On the web is a totally different story, though! Lol.) So I was a bit nervous about working with a bunch of people who I didn’t know. Who knew whether our tastes and interests and skills would mesh?

I found myself in the position of de facto project leader, since I had pitched the initial idea. I was also the oldest person in the group. I didn’t want to be domineering, so I gave everyone a lot of floor time to talk about ideas they had for what the game might be like. I was willing to be totally flexible about what tools we used, who did what, and what we did with the idea. I wanted everyone to have the chance to have the GGJ that they hoped for, not boss people around and use them to make a game idea that I had strong notions about. It’s my nature to have strong attachments to my ideas and to know what I want, and to be fairly stubborn about it. But for team projects it is more important to allow everyone on the team to contribute in their way, and sometimes better ideas come out of that than what you might have come up with all on your own. And, especially for weekend jams, it’s important to recognize that it’s the experience that matters, the result is secondary, and you can treat the project as something throwaway, an experiment — and if it doesn’t come out great, so what you’ve only invested a weekend in it, you can drop it and move on, yet still be enriched and grow from the experience.

The group we had consisted of three women and four men. One of the women, Hanna, described herself as a writer, who had experience writing text games. She mostly contributed ideas and conversation, a few level designs, and helped in other ways, since we didn’t end up needing a writer on the project, but she turned out to be very useful defusing potential conflicts when they arose. She ended up producing a hypertext game on her own in addition to sitting in on our group discussions. [Update: Hanna contacted me to let me know that she contributed more than I was aware; the level designs that Emilie presented to me were a collaboration that they worked on together.] The other two women, Emilie and Liz, were visual artists. Emilie did a most of the level design, and was pleasant to work with, and knew how to take direction and receive feedback, and ended up delivering a series of 10 or 12 levels that didn’t stretch or break the design of the game. Liz contributed the sprite animations of the running figure, and the “goal” object, and attempted some tile sprites for the platforms, although these didn’t make it into the deadline build of the game. This was her first time working in pixel art.

Of the men, there was Jonny, who seemed like an intellectual, creative type, who had some programming background as well, Sean, who exuded a sardonic kind of charm, and Ross, who was close to my age and seemed to have some electrical engineering background and an interest in hardware. Jonny was overflowing with ideas, and seemed drawn to deep, profound, symbolic things with meaning. I found him to be the most challenging to work with, due to his endless ideas, and in retrospect he probably would have been better off as a design lead on another project. He tried hard to contribute ideas to our project, but I kept having to shoot him down because the things he had in mind were too sophisticated and complicated for what I knew I could build in a weekend. I felt bad about it. Hanna was actually very helpful in talking to him until he accepted group consensus without me having to get into useless arguments with him, and I appreciated that quite a bit.

Jonny had a hard time accepting design constraints that I had to impose, based on my (in)ability to implement what he dreamed up, and would insist in a somewhat headstrong way that we could incorporate his ideas. The best idea he had was to add a secondary mechanic involving masks, but this idea functionally was not different from the mirrors — it was perhaps an interesting way to convey the change that happened to the character as a result of looking int the mirror, or a different way to implement the core mechanic of changing appearances.

I would have liked to attempt to include this, but only after delivering Minimum Viable Product, and I did not expect to have time for it. He also had a lot of ideas about story and setting which involved mysticism and religion and were wholly superfluous to the core gameplay concept. He offered to help out with development, but he didn’t have GameMaker Studio, and since he had a Mac and mentioned that he had experience in Multimedia Fusion, I suggested that he attempt to make a parallel implementation of the game in his development environment, and incorporate his ideas as he saw fit. I knew he could probably spend all weekend trying to run GM:S on a Mac and still not get it to work, and I thought it would be interesting to compare the two interpretations on the theme, and see him try to explore some of his ideas. I thought it would be more satisfying for him as well as less frustrating for both of us.

But rather than do that, he spent most of Saturday attempting to get GameMaker Studio running in Wine on an Ubuntu VM on his iMac, to no avail. Late Sunday he managed to use GoToMyPC to connect to Ross’s netbook, and got it running, but by that point it was far too late to contribute any programming.

As for Ross, he was interested in the “diversifier” having to do with inventing a new type of controller. I felt like this diversifier should have been called the “shrink your audience to zero” diversifier, since there’s no way anyone is going to have access to the controller you just invented, and in any case it’s really damned difficult to come up with a unique idea for a game controller that actually does something better than existing controllers, and build a working version of it in 48 hours, so I personally hated this idea. Ross had some kind of microcontroller on a breadboard which implemented the USB Human Interface Device, but essentially that just gave us a USB keyboard with no keys and a bunch of naked circuit terminals that you could connect together somehow. We did at least establish that with the breadboard plugged into the USB port of my laptop, it was possible to send input which GameMaker recognized and could do something with. But that’s as far as we got with that.

Ross also wanted to do something with QR codes, and had an idea to print up QR codes and post them around for people to scan. When they did, they would be taken to a web page that he had set up, which would reveal a cheat code that would allow the player to skip levels. He also had these ideas for QR codes that don’t actually look like QR codes, because they’re dressed up with graphics to give them more style, but are still functional as QR codes. I never scan QR codes because they’re not human readable, which makes me suspicious about what will happen if I do scan them — to me they’re like a bottle labeled “Drink me” that someone left sitting out at a bar. But the game did need a level skip cheat so I could quickly get to later levels in order to test them, so I said sure go for it, and implemented the cheat code part of it while he set up the QR code and the web site.

For most of Friday, Liz, Emilie, Ross, Sean, and Jonny talked a lot about game design ideas. Sean, Ross, and Jonny tried to get GameMaker Studio to run on the Macs that Sean and Jonny had brought with them. I worried that they wouldn’t be able to contribute much in terms of building the program since they didn’t have GameMaker, but they seemed content to talk about the game design. I offered that we didn’t *have* to do the game in GameMaker just because that’s the tool I was most comfortable with, and we were building a game concept that I had pitched, but everyone seemed to think GameMaker was a good tool for the project and were OK with me taking the lead programming job, and we’d figure out ways to involve everyone else.

Design Phase

After talking about ideas for the game concept in more detail, we retreated to a small office room to get to work. Lots of discussion ensued, many ideas brought up, most of them too elaborate and large to fit into a weekend.

Early on there was a lot of talk about story and motivation and reason and goals. This surprised me, and as well seemed kindof useless. I had pitched a puzzle platformer, not a story-driven game that needed a plot. To me it didn’t matter why you were solving puzzles. You solve the puzzle because it’s there. If you don’t, you just sit there and the game is boring. What need is there for a story to give it meaning? There was no meaning behind it, no goal at the end that you had to achieve other than to get through all the levels, and certainly no lesson to be learned.

I only thought about the game in terms of mechanics, how it would play. It seemed like the rest of the room wanted to use dramatic elements to drive the mechanics, and infuse it all with profound meaning, and that a narrative framework for hanging mechanics off of would help them find inspiration. I just thought of it in terms of obstacles and solving problems through various controller gymnastics, and to try to keep it as simple as possible in order to be able to build it, and who cares about story. But I wasn’t opposed to integrating some lightweight dramatic elements if it made the game better. But to do them at all, they had to be simple, and couldn’t burden my workload

Because I’m an introvert, and because I didn’t want to dominate the group, I mostly shut up and let people brainstorm, and contributed to the discussion by answering questions about what I felt was achievable in GameMaker by me in a weekend. Team members kept asking if their ideas fit in with mine, and I didn’t yet have a solid concept for the game myself, so I gave maybe answers to most of those questions, and tried to steer the group in terms of “that might work!” and “I’m not sure, but probably not” and quite a bit of, “Good idea but not something I could do in a weekend.”

During the time people were talking about story and character motivation and meaning, I got the itch to see if I could build the mirrors. I had a semi-formed idea of how to do it, and I wanted to see if I could make it work. So I quietly began working on that while letting the rest of the group talk about the dramatic elements of the game, occasionally chiming in with a thought or a gentle nudge to bring us back into focus.

Around this time, Jonny and the team got into a discussion of adding a mask mechanic, whereby the player would wear different masks in order to change their appearance, in addition to the mirrors. But it seemed to me like it would either complicate the game design unnecessarily, or simply reinforce what we were already trying to achieve with the mirrors, so I suggested focusing on the mirror mechanic for now, and put masks on the back burner.

I managed to get a proof of concept of the graphical mirror effect, drawing a reflection of the player and background, working by around 11:30pm. This was a neat visual effect, but not exactly the core mechanic, since it was just the reflection in the mirror, not the color changing effect, but it felt good to accomplish something concrete by building that initial idea that I had been interested in. But really, it was probably not the thing that I should have been working on first. Settling on the core mechanic of the player and world changes would have been more productive, as having those details worked out would have enabled the team to start working on level designs.

For Saturday, I would need to figure out how to implement a flexible platformer engine, and build a few simple levels. Emilie expressed interest in taking the lead in doing the level design and backgrounds, and Liz wanted to do sprite art, animations. Hanna offered to write something for the game. I still didn’t have an idea for what it might be, or a strong feeling that it was needed, but I said to go ahead and try to come up with something.

Ross had a number of ideas for easter eggs, and decided he wanted to do something with a QR code that would take you to a web page where you could find a special code that you could enter into the game that would unlock a cheat. I realized that I’d want to implement the cheat anyway to make it easier to test the game, so I said OK to that, and he started to work with it. I still didn’t know what Jonny and Sean were going to do for the project — perhaps code, perhaps build levels — but we had the rest of the weekend to figure something out. I left to get home and sleep, and gave Jonny a ride.

After I dropped him off, on the drive home I had an idea for a better mirror mechanic than we’d settled on. The team had brought up many ideas for aspects of the character that could be changed by the mirror, but I realized while driving home that we hadn’t really talked at all about how the changes should affect the world. What we settled on was that one mirror would make you heavy, so you could fall faster or break through platforms, and your sprite would stretch wider. And another mirror would stretch you tall, so you could reach higher and jump higher. But that didn’t change the world, it just changed your ability to interact with the world. So it didn’t quite fit with the GGJ theme of “seeing things as we are.”

The idea that I came up with on the drive home felt better: the mirrors would apply a color tint to you as well as the world. Certain platforms would be more sensitive to one color, and other platforms would be more sensitive to some other color. By looking into the mirror long enough to become the right color, you could change the world by getting some platforms to disappear or become non-solid, or make other platforms become solid. And the puzzles would be based on trying to get the platforms to be the right color so you could get through the level by getting some platforms to disappear or appear where you needed them. I figured this would not be hard to implement, the visual appeal of the color changing would make the game more attractive, and I felt like the level design would be more interesting with this mechanic.

Then I came up with an idea for integrating music into this, so that there would be two simple melodies that could stand alone or be played together, each melody serving as a counter-melody to the other. I thought I’d ask Ian Faleer if he could pull something like that off, so I messaged him with my idea.

I guess I was going to domineer the team after all :) Well, I reasoned I would pitch the idea and see what the team said about it and hopefully they’d all agree that it was a good idea.

I started a draft of this post, to capture my thoughts while they were still fresh, and then I went to sleep around 2am.

Saturday

I tried to get up at 8am, but that wasn’t happening. 8:45 snooze alarm had me awake though. I showered and dressed, then I looked out the window to see heavy snowfall had accumulated overnight. After clearing the snow for almost an hour, I drove to a fast food place for breakfast, and drove back to the site, arriving by around 10:45.

With the snow and road conditions I worried that people who hadn’t stayed overnight might not be able to make it in, but the team gradually showed up one by one, and we were all here. I lead a quick meeting to assess how people felt about the project, about being on the team, and if they were having the GGJ experience that they wanted to have. Everyone said they were having a good experience and wanted to continue working together. Next I asked if anyone had come up with any big thoughts on the project overnight; no one had. I pitched my idea about the colors and the team agreed to it with no objections.

I wanted to get to work on building the program, but I kept having to break away from coding in order to coordinate with the team, answer questions, and give direction so the level designers could understand the feature set that I’d be able to deliver for them to work with. It was all very necessary but it seemed like it would never end.

Emilie had produced a drawing of a design for level 1, which to me was what I would call a drawing of a background for the level, so I explained what I really needed was layouts of platforms arranged to create puzzles, and a sequence that went from simple puzzles that would help introduce the player to the various play mechanics, to more challenging ones. Once she understood what I needed, Emilie and Hanna collaborated to come up with exactly what I needed.

I also got with Ian asked him if he could produce some music for the game, and spent some time with him going over guidelines for what I was looking for. Ian was working on music for several projects, as a freelancer, but said he was sure he could come up with something for me in a few hours.

It wasn’t until almost 2:30pm that I finally started looking at a Platformer engine that I had downloaded from the GameMaker Community forums a few weeks ago. This was a paramount concern for me, because I knew from previous experience that writing a bug-free platform engine for GameMaker is not simple, and I knew if I had to do it from scratch I would be lucky to have it done by Sunday. I quickly evaluated that it seemed to work well, that I could understand how it worked, and would serve as a solid base for our project. This was a very fortunate development.

I brought in the mirror reflction code I’d written last night, and started working on the color-changing platforms. By 4:30 I had them mostly working, but I was getting hungry and needed to take a break. Rather than the gradual color change that I had envisioned, at this point for simplicity’s sake I make the color change instantaneous. I wanted to come back and work out the gradual change code, but for now it was functional enough.

LaunchHouse, who generously provided the space for our GGJ site, had an important fund raising party in the evening, which ended up turning into a huge distraction. We had to move our cars out of the parking lot so the VIPs who were coming to donate money or invest or whatever would have primo parking spaces. This meant that we all had to get bundled up, go out and warm the cars up, and move them to an unused lot across the street. This ate up valuable time.

Soon, party attendees showed up. We had been instructed to make use of an upstairs office space, so as not to interfere with the fundraising event. But as it turned out, someone had the bright idea to bring the party attendees up to show young, vital Cleveland entrepreneurs working hard on a weekend, doing innovative things that would revitalize the local economy — so groups of VIPs kept wandering up in big groups, talking loudly, and asking lots of questions about what we were working on.

Our group was somewhat out of the way, the seven of us sequestered in a tiny, cramped office that was probably meant for one person, but there was still so much noise I couldn’t concentrate at all. I remarked that it was great that the funding people were so interested in our projects, but it would be great if they were interested enough in them to let us actually work on them. This went on for hours.

We eventually ordered food, and it finally arrived around 8pm. Party noise and interruptions continued until after well after, and I just wanted to throw a fit, but I kept it to myself and tried to put up with it as best I could. Nothing was getting done, and there wasn’t much I could do about it.

The team worked on art assets and level design, but kept going off on tangents, chitchatting with each other about unrelated stuff, and every so often, Jonny would take a break from trying to get GameMaker to work on his mac, to bring up more ideas to add to the game design. Since I was making no headway on what I already had on my plate, I couldn’t entertain any of them. Eventually he and Liz agreed to split up the art assets and work on them. Liz had never done pixel art before, and her first attempts at platform tiles weren’t usable, so I gave her some feedback and had her try again. She also produced a set of character sprites for the game — these turned out better than her platform tiles, so I used them.

Jonny wanted to make a title screen and backgrounds for the levels, and began working on some elaborate compositions in photoshop that incorporated all of his ideas for the symbolic narrative elements that we’d discarded in the previous day’s discussion on the game design. The title screen looked really great, but had almost nothing at all to do with the puzzles, and looked nothing at all like the in-game artwork, so as far as I was concerned it wasn’t usable, either, but it was very nice to look at.

I didn’t have the heart to tell him I didn’t want to use it, and couldn’t spare more time to argue with him about aesthetics, and in any case I was willing to let him do whatever he wanted with the art assets, as long as we had a consistent look across the whole game — which meant he needed to work more closely with Liz in order to achieve that. But I think he ended up getting too engrossed in his work that he never bothered to coordinate with Liz to ensure that their styles matched. It seemed like he was blinded by his own vision of what he wanted the game to be, and had ignored the team when we decided not to go with a story-driven game. I felt like if he really wanted to work on these art assets, well he could, and I wasn’t going to try to stop him, but I couldn’t include the stuff in the game unless we had a complete set of working assets to make the game look like a unified hole, and watching the pace at which he worked on this stuff, I knew it wasn’t going to happen. That’s OK; that’s something you can learn when you’re working on a weekend project. Sometimes you have to fail in order to learn.

Still, I wanted to be able to include something from him in the finished game, so I asked if he could possibly come up with some sound effects for jumping and landing and reaching the goal of the level, and did end up delivering these.

Sean was working on something that looked interesting on his Macbook, and I watched on his screen as a little character in a block maze followed a path back and forth. I asked him if he’d gotten GameMaker working and if this was something he was working on for our game, and he said it was something else that he had built in javascript. Whatever it was, it looked interesting and I was glad that he was being productive working on something, and so I wished him well on his project.

Hanna had little to do for us during this time, so she worked on her own game idea, a hypertext based adventure she built in Twine.

I was glad they weren’t just sitting around with nothing to do, and were actively participating in getting the most that they could out of the jam.

By 10:30, I had managed to work out the code that I needed to get the colored platforms working, and I built a demo level with a single mirror, blocks and character that changed color, and the color-changing blocks became solid when they became saturated with color. This really should have taken me about 20-30 minutes, so I was rather frustrated by this point that it had taken about 8 hours to get to this point, and I had serious concerns about finishing the project.

We still had more features that I needed to build: color switches, which became active when your color matched them, and moving platforms.

I also needed the character sprites that Liz was working on so that we could upload the game using our own graphics, rather than the examples that came with the platforming engine. I had to keep asking her for this, because poor Liz was sitting right next to the door to our office, and every time someone came in they’d hit her with the door, and she’d get distracted and start talking to them.

I wanted to upload a playable demo level ASAP so that the team could see how it played, and try it out in order to create better level designs and a better understanding of the graphical requirements for the backgrounds and tiles.

I also wanted to get our project page up on the GGJ site so we could be assured that it existed well before deadline just in case the GGJ site went down, as often happens when everyone’s trying to upload their project at the last minute. In order to create the page, we needed to settle on a title, because that was a required field, and it wasn’t clear whether we would be able to edit it once we had set the title. In any case, I assumed that the project title would be part of the URL for the page, and if I tweeted or posted the link somewhere I didn’t want it to change later. Not knowing whether we could change titles once the page was created, we needed to pick a title that we could be satisfied with.

Title vote

Titles are hard. We brainstormed a lot and got sidetracked a lot more. Jonny had a lot of ideas, but I kept shooting most of them down because he kept wanting to do things that involved non-ASCII characters that required unicode that would cause people to not be able to find the game easily by searching or typing the URL — diacritical marks, cyrillic backwards R’s, etc. They were fine ideas for a logo version of the title, but I needed something that would be typeable. He was falling into the typical artist trap of trying to be too clever and creative. The others contributed a couple ideas as well. We kept wasting time shooting down each other’s ideas, and continually getting sidetracked by other distractions and banter. Rather than discuss the merits or faults of each and every suggestion, I just wanted to get as many of them up on the whiteboard as we could think of, then weed them out with a couple rounds of voting.

I pushed again to decide on a title, so we took a vote on the ideas we’d written up on our whiteboard, and then we eliminated all the titles that received no votes, and had a second round of voting on the survivors, at which point we had our winner, and I was happy with the title we picked.

Round 1    
Title1st2nd3rdTotal
SpectrumFlection2 17
MiroriM 226
Bitonal11 5
Mirror Age 2 4
Rumination1  3
Miroractive1  3
MirrorCle1  3
Miro 1 2
Mirror Trek  11
Luum  11
     
 Round 2     
MiroriM4   
SpectrumFlection2   
Mirror Age1   
Bitonal0   

It was like pulling teeth. This title vote business took around an hour or more to resolve, and I had hoped we could have done it in about 10 minutes. I’d ask for people to suggest ideas, a few would get written up on the white board, then rather than get down to business and pick a title, someone would start talking about something off-topic, and we’d tangent for a while, and I’d give it time and then remind everyone that we really needed to get the title chosen, and we’d start over and repeat this process several times.

MiroriM had been one of the titles that I had suggested for the game, and was probably my favorite title, so I was happy that we ended up selecting it, but I felt a twinge of guilt because I was getting my way so much, and it made me feel like I was domineering the team, and I really didn’t want to be controlling every aspect of the game. I wanted to use the team and truly work with them.

Sunday

It was around midnight that I had the project page up on the GGJ site. I went right back to work on the game, and started building the first “real” level, but I had a lot of problems. First, I discovered that the platforming objects were very sensitive to order of creation. I had to place certain ones in the room in a precise order in order for their Create event code not to throw errors due to trying to access variables in other objects that hadn’t been created yet. It didn’t take long to realize that was the problem, and the easiest fix was to duplicate the demo room rather than create rooms from scratch.

I had the second room working, but found that for some reason the player jumped twice as high in the second room as it should have. There seemed to be no reason for it, and it puzzled me for several hours. I came close to giving up and calling it a night, but I kept trying and realized a few things: first, certain objects in the game are persistent, so they only needed to be created in the first room. Second, somehow or other a second player was created in the second room. I don’t recall adding the object, but it might have happened accidentally. Because of the way the platform engine was built, the controller object apparently applied the jump motion doubly to the player object because there were two of them present in the room. And it applied it doubly to both of them. And because the two objects were repositioned to a starting point when the second room is created, they were positioned exactly on top of each other, hiding their true number. It took me until almost 3:30am before I realized what was happening, and fixed it.

Once fixed, I was too tired to go on, but I knew that I now could quickly build a few working levels after sleeping. The only problem was that I had yet to produce the code for the switch objects and moving platforms, which limited us to being able to create only the first three levels that Emilie had designed. I hoped that I would have enough time to do at least the switches before deadline.

I went home to sleep, and didn’t get to bed until almost 5am. I woke up around 10:30, and didn’t get back to the site until almost noon.

Upon arrival, I found Jonny had been up almost all night working on the artwork that he wanted to put in the game. The title screen he had looked great. But it still didn’t work with the rest of the art assets that we had for the game.

He’d also got Ross to install GameMaker Studio on his netbook, and allowed Jonny to remote into it using GoToMyPC, so he was starting to play around with the project code from the source .gmz that I’d uploaded last night. He had some questions about working with GameMaker, which I tried to answer for him as best I could, and helped him with a few things so he could get started exploring the project. I don’t think he had any previous experience with GM:S, possibly he had some exposure to GameMaker for Mac, but however much it was, it was not going to be easy for him to become familiar enough with the project code to make any contributions to it before deadline. Hell, I had been struggling with getting the levels built and I’d had a whole day to familiarize myself with the platform engine code, and the parts that I’d written, and I was still surprised when something unexpected caused the game to screw up. But I was glad that he had a working environment to play in, and I suggested to him that if he wanted to, even after the deadline he could continue working on the project and see what he could do with it, and maybe fork his own version where he could build some of the ideas he’d wanted to include in it.

I went to find a place to sit where I could hopefully crank out code for the switches, but just a few minutes into working on it, someone from the Launch House came up stairs and told us that we all had to get out of the upstairs office area that a different someone from the Launch House had told us we had to go to the day before, in order to be out of the way of the fundraising party. Some C-level executive of the company that normally uses the upstairs offices was allegedly pissed off that we were allowed to go up there at all, and although the guy informing us of this wasn’t saying that anyone was at fault, we needed to get everything out of the upstairs and move back downstairs for the rest of the day. So this resulted in another hour or so of wasted time as everyone packed up and cleaned up and relocated.

I managed to build the first three levels, that did not require switches or moving platforms, and realized that I still didn’t have a title screen that I could use. I never did receive the one that Jonny was working on, but even if I had, it would have looked completely unlike anything else in the game. So at the last minute I built a title room out of wall blocks and made it essentially a playable start room that introduced in the simplest way possible the core color change mechanic. I was very pleased with it for something that I whipped up in five minutes.

Around 2:30, Jonny was asking if I could add his drawings to the game project, and asking me how he could get them to me. I told him that at this point I didn’t think I could incorporate his work into the game. I was a bit annoyed that he didn’t know how to get them to me, since I’d provided the entire team with an invite to the dropbox url where I wanted to put the files, along with my email, but I didn’t mention it, and just said that with 30 minutes to go, I didn’t think I had enough time to bring his files into the project, re-build it, re-test, and re-upload everything by deadline. He was upset about his work not getting into the project, which was understandable, and started protesting about how he’d been up all night working on it, slept only one hour, and that the art was “what I’d asked him for” — which it really wasn’t — but I guess we just had problems hearing each other that weekend. The level background art he had produced was much too large to work in the levels I had built, and didn’t at all match with the positioning of the blocks that Emilie had come up with. Instead he came up with some strange looking collections of pentagons arranged in clusters, spiraling off into the background.

Jonny's level design art for MiroriM

I offered that while the artwork didn’t fit in the project as game assets, and wasn’t usable as-is, I was totally fine with putting the images up on the project web page to show it off, and we’d call it “conceptual art”.

At this point I was still running through final testing and debugging, and was absolutely crunched for time, and couldn’t afford any distractions, so Hanna awesomely stepped in between us and worked it out with him. He uploaded one of the images he had created, his level design, but for some reason the title screen never made it up. Jonny tried to explain how the level was supposed to work, and described the layout of the different colored blocks as a “tesselation”. I wasn’t at all clear about what he was trying to explain to me about the tesselation, but it sounded something like a geometrical fractal level that you could zoom into infinitely, which would give the player terrain that could be used as platforming. Or something. It was an absolutely fantastic and ambitious idea, but there’s no way I could have incorporated it with the project code as it was written, and since the tessellation was a static image that he drew up in Illustrator, there wasn’t really any way to turn it into the level he envisioned it to be, without somehow being able to place hundreds of invisible platform objects into the room, and somehow create features to enable zooming into the deeper levels of the Illustrator drawing.

I hadn’t even been able to incorporate Ian’s music in to the game at the end, and had to leave it out.

With about 20 minutes to go before deadline, I had just finished up the project and was in the process of final testing before uploading it to the project page, and made final edits to the page.

Glitch Mode!

During the frenzy of level building, I had tested a HTML5 build of the game and found that it worked. Thrilled, I uploaded it to the site so that anyone with a web browser could try it out, not just people who downloaded the Windows build.

As I messed with the final game, I re-uploaded the files to the server. Somehow or other, apparently files from the older build and the latest conflicted in my browser cache, resulting in this oddity:

I thought it looked really cool, but was also briefly panicked until we confirmed that it was only happening in my browser. After flushing the cache and refreshing the page, it went back to normal. I would have liked to know how to build these effects deliberately into the GameMaker project, because it would have been really cool to be able to switch Glitch Mode on and off at will, and use it as an intentional design element of the game. All that exists of Glitch Mode now is the video that I captured of it.

After we gave our presentation to our fellows at the local site, Jonny graciously thanked me for the help and technical answers I’d given him while he was working in GameMaker. I was touched by that gesture, especially in light of how little of his work had made it into the project, and how disappointed I knew he must have felt about that. I’d been worried that he might have taken it harder than he did, and perhaps been upset with me over it, and the last thing I wanted was there to be a falling out at the end of a stressful weekend of working hard on a project when we hadn’t even met less than 48 hours prior.

What went well

  • The core concept for the game was good.
  • The mirror effect was done in a way that looked cool.
  • The level designs that Emilie created were really great.
  • I really liked the title screen that I threw together at the last minute.
  • It was really cool to pitch an idea to a room and have 6 people I didn’t know validate that my idea was interesting enough that they wanted to work on it.
  • Allowing the team members room to try things, experiment on things that interested them, and learn from failures while coaching on how to address deficiencies felt like it was much better than trying to pre-empt failures by being overtly negative about their ideas, and trying to tell people to do things “my way” and being a micromanaging jerk.

What didn’t

  • Didn’t get to complete all the features that we had planned. This is often the case, but in this instance I think what I was shooting for was totally achievable. The project scope wasn’t too big — the distractions that killed productivity were the reason they didn’t get done.
  • Noise. The biggest productivity killer was the fundraiser on Saturday.
  • Ideal team size is probably 2-3 people, and no more than 3-4 people. If you have more than that, you really need one team member to dedicate themselves to being a project coordinator, who can effectively communicate needs and filter feedback between the rest of the team, and make sure that all the pieces are able to come together into a unified whole. With 7 team members, I felt like much of the time they were distracting each other just talking and not really being productive, and it was hard to provide them with requirements and feedback they needed to be able to deliver what the project needed.
  • I probably could do a better job as a project coordinator than I did, but considering I was also the lead programmer, it was impossible for me to do both adequately. If I do try to program and coordinate a project, the programming had better not be anything I haven’t already done before. Figuring out new things requires even more concentration and focus than routine stuff, and to coordinate effectively means constantly communicating with the rest of your team.
  • The extraneous things. I wanted to let everyone on the team have a chance to do things that they wanted to do with their jam, but when those things just didn’t fit in with the project, I probably should have been more firm about directing those people to go ahead and work on the ideas that interested them, but make their own project out of it. This would have been better than trying to somehow mash it all together at the end, resulting in a disjointed project with pieces that just didn’t fit together well. Sean, Jonny, and Ross really could have collaborated together on their own thing and possibly gotten more out of it, while Emilie and Liz cranked on MiroriM with me. At least Hanna got to finish her solo Twine game — I wish that Sean had completed his side project too.

6 Comments

Add a Comment
  1. Great article Chris! I really like your game and I thought the concept was very interesting from the start. Also, from a music standpoint, yours was the fastest and smoothest track to create. I’m sorry to hear about the frustrations throughout the weekend, and yeah looking back at the fundraiser thing, there were some obnoxious personalities wandering through there. I guess for me that wasn’t as much of an issue since I could put on tune it out with headphones and do my own thing, but having to coordinate with others I can totally see where the the noise would be a pain in the ass. Perhaps we could work on developing this game further without time constraints. I think that would be fun.

      

  2. Thanks for sharing Chris! I’d like to keep working on this great game also. I’d just like to add that the pre-customized QR code did work, as did my custom controller prototype, styled like a QR code. Future codes will have a bit of text that will briefly that it leads to a cheatcode. It’s possible to encode the cheatcode text into the QR code directly, but I’m not sure it could then also as a link path to a the game without people having to type in the URL into their browser manually. I’m sure we can get a more completed game on a short URL that people could just type in, or a tinyurl. Also, Gmail went down worldwide that weekend and I had trouble getting game resources as attachments and had my own troubles with Dropbox. It was great working with everybody, and Jonny and I still want to incorporate his artwork into a first-person or over-the-shoulder POV game in MultiMedia Fusion.

      

    1. I’d like to see what you guys can come up with if you do continue the project. Everyone on the team co-equally owns everything that went into the project, so feel free to take it in whatever direction you like. I’d love to see you guys breathe some life into the ideas that couldn’t fit into the version we finished.

        

  3. I’d love to continue to help you make the game and make more art assets if needed. I completely understand that it was a trying weekend, I noticed at certain times and all. I wish I hadn’t sat right in front of the door but as you noted the office was tiny. I hope you’ll be there next year and work with you again.

      

    1. I’m working on a few things with the code, with a goal in mind of trying to complete the levels that the team designed, and maybe go a little further with some logical extensions of the play mechanics. Not sure yet how far I’ll take it. If I see you at an upcoming CGD Excuse to Code, we could probably work together on it.

      It was a difficult weekend in a lot of ways, and I appreciated everyone’s efforts on the project. I think there were a lot of lessons — if I had to do it over again, I probably would have tried to keep the size of the team down to 2-3 people, 4 max. I just found it really hard to turn anyone away, and had no real basis to pick one person over another, so to be as fair as possible I let the team select itself. But for a team of 7-8 people, you really need one person to coordinate and lead the team full-time, and it wasn’t possible for me to do that AND do the programming. I look at the positives that came out of the weekend, though, and don’t dwell on the failures (and certainly don’t feel bad about them, there’s no point at all in that), other than to learn from the experience.

        

Leave a Reply to Chris SanykCancel reply