Today was the senior project fair. I'm having a bit of trouble looking at the screen right now, what with my eyes getting all squinty from exhaustion. But boy do I have a story, and it must be told. I warn you, it is as long as my day has been.
It seems that despite the fact that people have always seen me as an excellent programmer, so far neither of my game projects have been without an extremely bumpy submission day. Today's had the potential of turning out horribly, but we came out alright.
7:00PM, Last Night
I was in the lab, running some last minute testing. I was hoping to test our installer out on the lab PCs we were going to be using for the Senior Project Fair, but unfortunately the local admin account password the systems administrator left us was unreadable, and he had gone home. I still don't know what the second last character was. An h? Maybe an r. No matter. We ran some further tests between my laptop and a team member's, and then called it a night. Figured I'd spend that night at home fixing the bugs we did find (of which there were a handful), then come back bright and early the next morning.
Fixed the bugs on my PC at home (which is a significantly better environment for working than my tiny laptop), and fell asleep at 1:30AM.
I woke up. Several nights this past week, I was going to bed around this time. Despite the natural urge to go back to sleep, I didn't feel too tired. I think I've broken my internal clock so badly that it doesn't even understand when I should be awake or asleep.
Everything's going as planned. My bug fixes seemed to stick. A few new issues may have popped up, but they were easily dealt with. I also implemented a dodging mechanic, along with an animation that would flip to match your direction of movement! It was a quick affair, and certainly got me motivated to move further. Technically, though I should have been done all of the coding a long time ago, but being the only programmer on a fairly sizable game project definitely saw my time stretched beyond its limits.
The systems administrator (who is a significantly kinder fellow than I realized over the past five years) logged us into the local administrator, and so we nervously went on to test our packaged installer. We'd heard stories across the hallway that despite the admin access, some people still couldn't install their games. Thankfully, we were in the clear. It installed fine. Then I tried to run the game - opened, and crashed.
But it's okay. I anticipated this, based on an absolutely random hunch from having worked on XNA many months ago in a similar environment. Preparing for this random chance, I brought with me 6 pairs of headphones (half of which were broken) - one for each PC. Plugged one in, and the game opened just fine. Turns out it was crashing because it could not find an audio device. Come on guys, not everyone has speakers.
Of course, it can never be that easy, right? Things were going too well. I moved on to logging myself in, and then checking the server list to see what the situation was there. Slight problem. The game was built expecting every network to have a single external IP address, allowing me to filter the server list and show only hosted games within the network. This was all being pulled from a MySQL database, mind you. A strange set up - local game, but all the accounts and data was hosted on the internet. Fixed the problem by removing the filtering and clearing the server list. Okay, we're still good. Maybe we won't be able to connect to a hosted game?
Nope, that worked too.
Here came the whopper that made up for all of our pleasant sailing: on the client computer, the server (and I assume, every other player) was naked and bald. Furthermore, none of their attacks were animating, though running and dying was working fine. I flipped my shit. Something I had changed the previous night had caused this ridiculous problem.
Finding what the problem itself was proved simple enough, but not so for what was causing it. There is a single struct that contains all of the information regarding my player's loadout - all of the armour they equipped and the abilities they chose before joining the server. That one struct was not being replicated for new players, as they joined.
It seemed to me like every five minutes, I would have a "OH I KNOW WHAT THE PROBLEM IS" moment, and every time for two and a half hours I would be horribly wrong. I haven't yet figured out what the cause was, though I do intend to go back and fix the damn thing - and perhaps another handful of bugs.
It is a truly horrible feeling. I was the only programmer in the whole group - all of this was resting on my shoulders, and if I could not fix this, it seemed like we would make complete fools of ourselves. Not only did I desperately not want to let my team down, but it kept ringing in my head. I didn't even want to do the programming for this project - I wanted to create and texture 3D assets. Characters, armour, weapons - that was the direction in which I wanted to expand my portfolio, and I wanted to build myself a reputation as a 3D artist. Or the beginnings of one.
Unfortunately, I was the only one in my group with an aptitude for programming. Everyone else was in the art category, so I had to pick up the coding side of things. Or did I really? Maybe we would have managed just fine. Maybe it's all in my head. I don't know anymore.
So, 12:45- I was thinking there, thinking about the fact that not only would I not be noted for having skills as a 3D artist, but I'd instead be crowning my five years of university with a disaster. I wouldn't even be remembered as a good programmer. At best, I'd be "that kid who bit off way more than he could chew." And they'd be right.
At this point, I accepted the fact that I probably wouldn't be able to solve the problem - I packaged the game up and rushed my team members into installing it on all the machines. At least we'd have something multiplayer to show - it's better than nothing. But no, it seemed that nothing was, at least at the time, what we were destined to show.
We tried joining a hosted game with the lab PCs - something that had worked some two hours earlier. Nothing. No response whatsoever. I could feel my heart break. We had a mutliplayer game with no multiplayer. At best, we had a game with a simple character creator, a couple of trainer skill trees, a marketplace and an (admittedly pretty cool) loadout screen where users could drag and drop their equipment icons onto slots and see it update a 3D preview in realtime. Oh, and we could host a game and allow our visitors to run around alone in the arena. And yes, that's right. Visitors. They were coming in already, it was past 1:00PM.
This was around the time the judges were supposed to come and see our project, and we were supposed to present. The presentation itself would have been alright. Professor Arya or Professor Whitehead (I honestly can't remember who it was anymore, my memory is hazy) offered to bump us to the last group, giving us an hour at least to figure out what was going on and fix it. I told him flat out - I don't think extra time is going to help us. Thankfully, he didn't listen to my stupidity and bumped us to last. I may have plenty of sour things to say about my program's faculty in private, but today I really cannot swear to any of it. They weren't condescending or critical of my failures as a programmer at all - only encouraging and accommodating.
It wasn't too long after that Nick Zou (the team member who was helping me debug earlier) suggested that we try the game between our laptops. Just to get something going, if we could. I had virtually given up, but at this point I really had nothing to lose, so I gave it a shot, expecting to not even be able to join the game. I was wrong.
We were able to get into a game together, but the bug from earlier that morning that kept the client from seeing animations, weapons and armour was still happening. But the host could see everything perfectly... Then we had an idea. I can't remember if it was mine, or his, or if we came up with it together. But it resulted in Nick sitting in the far corner of the class, hidden by a sheet, and me setting my laptop out on the open table for people to see.
Nick played blind.
He couldn't see what anyone was doing. All he could see was people running around. Couldn't even see if his own attacks hit. But somehow, he managed to kick a lot of people's asses.
Interest in our project started to grow, and despite only having one functioning copy, people were crowding around to watch the fight. I'm sure other groups got much larger crowds, but considering the state of our game, we could do worse. What's more: people seemed to enjoy the game. It was difficult, it was unbalanced, and Nick was making mince meat of most contenders, but they were enjoying themselves. One guy kept coming back - although he was equally interested in the programming aspect of it, and had been trying to help me figure out what the problem was. I can't really remember his name now, but I wish I could thank him again.
Edit: His name was Harold Mintah
From here, the story's fairly linear. Presented to the judges, they seemed to like it well enough, but the game wasn't anything special. They did, however, like the art style, and I saw some employer-type fellow asking Marie (who did a lot of texturing) for a business card. I don't think anyone was particularly wowed by anything I did, though some of the judges did come to me afterward to make a few suggestions regarding the flow of animations and other such things. I guess they were mildly impressed by the fact that I coded it on my own, but really that just makes me look irresponsible, since the product itself was essentially broken. Another truth.
It definitely is disappointing that despite the countless hours I put into this project, I don't think I'll get much out of it. I do, however, intend to clean it up, and fix the bugs as well as I can, before putting it away. If anything, I will get some decent video footage for my portfolio.
My eyes are burning, I think I need sleep.