Monday, April 30, 2012

Exploring Avaricia

So I've decided to abandon Legend - sort of, kind of, not exactly. Legend itself has outgrown itself, and thinking about it after far too long just leaves me feeling puzzled as to what my overall intentions had been. It's a project that's gone on for over three years, and while a lot of the code is there, it just doesn't seem to serve any purpose anymore. It's overdeveloped, full of feature creep, and poorly planned.

It doesn't help that this game ultimately does nothing for my portfolio. I've learned that people look at you funny when you say you developed a text-based online game. I can see why, it doesn't sound like any big achievement, and I suppose it isn't. But still, if for nothing else, I want to complete such a project, because I enjoyed playing and running Anathema Online, and I'd like to do it again.

So, I'm starting over, and shrinking the scale. With Ian and Luke's help, I hope to have something I can release by July 1st, though I'm still unsure of how doable that is. We'll see.

The world itself has shrunk considerably - instead of introducing a whole new world, the game will be focused on the events after the first era of AO, as the city of Avaricia deals with the traumatic war that despite a clear victory, left the town and its ruling body in shambles.

Long story short, when I set down my plans for the game itself, I tried to explore the city itself with a few sketches while working on my cityscapes and backdrops in the process.

Thursday, April 26, 2012

Wednesday, April 25, 2012

Tuesday, April 24, 2012

CHoW #286 - Doodling

I shouldn't be starting on this just yet, since my art history exam is tomorrow evening. But I couldn't help it. I was getting too stressed out from studying. It's the first CHoW I've participated in since October, so I'm a bit anxious. The brief is:

A Legend tells of a powerful enchantress who will tilt the fate of the world in either good or bad. Whichever side she chooses, will become the dominant force. However she is still young, and it yet to take one path or the other. As a completely neutral being, many have tried to sway her to their sides but have failed. Some have even tried to kill her, so that the legend never has the chance to come true for either good or evil. Because of this, she was given a mechanical guardian to protect her - a being that does not know good or evil itself, only that she must be protected at all costs.

Your challenge is to create a design for BOTH Aoife and her guardian. Remember, they are neither good or evil. Aoife does not have to be a child, but she should also not be an adult woman. The mechanical guardian cannot be a living thing, and can be powered by anything you like, magic, steam, electricity....

Saturday, April 21, 2012

Landscape Sketches

Used photographs as reference. A couple hours each.

The Peaceful Village of Doorcliff

It's been a while since I've been up this late just for the sake of painting. Unfortunately, tomorrow I have to start buckling down to study for my art history exam. ... We'll see if that actually happens. So today I was working on a vague concept I thought of while showering this morning - a giant door in a cliff, with a village built on top.

Friday, April 20, 2012

Study of Cynthia Sheppard's "Crossing the Gap"

Last night, I was snooping through Cynthia Sheppard's blog and found this absolutely gorgeous environment painting. The only way I can hope to describe the sensation of looking at this painting is to say that it fills up my soul.

So today I tried to study the painting - specifically Cynthia's use of colour. My palette still isn't nearly as vibrant and alive as hers, but I feel like the attempt was more than worth it in what I was able to absorb. Hopefully I will soon be able to apply what I've learned to a fantasy landscape of my own.

Tuesday, April 17, 2012

Vague Environment Sketches

Usually I find it difficult to explore ideas - or to really form ideas at all. Most of all I experience this with environments, because the complex shapes and forms that go into architecture seems to overwhelm me at times. Below is an interesting progression of thought and clarity - I had a very rough idea of an ancient circle-thing that borders a pane of glass, aligned with the sun at a particular moment of a particular day, such that it would focus the rays. Or something like that.

The first sketch is nigh impossible to discern, but it allowed me to straighten things out in my mind. The second involved placing those objects in world space, still unsure of exactly what I wanted. The third finally captures a collection of elements with clear relation to one another, and repeated motifs. I'm afraid of leaning too far on the side of simplicity, or teetering towards over-complicating a scene. For the moment, I feel comfortable with this concept.

Wednesday, April 11, 2012

Finally! A look at Carnival

So I'd been holding off on showing off screenshots of Carnival for a while. But now that the Senior Project Fair is over, I may as well show off where it stands. I was going to post a video as well, but I think I'll hold off on that for a bit. At least until I've got some rather major bugs sorted out and a few extra animations and particle effects thrown in.

Be sure to check out Marie's blog as well. She was responsible for all of the character, armour and weapon textures, and definitely bumped our overall visual quality up a couple notches.

 The two trainer screens - currently missing skill descriptions. The icon designs were done by Lee Pakkala, the UI elements and background by Marie Deslauriers, and the two trainers were illustrated by me. I also was responsible for adding the interactivity in Flash with Actionscript 2.0 and connecting it to the Unrealscript side of things.

The gear and abilities loadout screens, just before a player enters a server game. Currently missing weapon/armour descriptions, and more specific details. Icons are dragged across from the table on the right and dropped on slots on the left. Armour and weapons are equipped in real-time on the character preview. The player can also click and drag on the preview area to rotate the model. The armour and weapons were modeled by Lee Pakkala. The character mesh was modeled and textured by Marie Deslauriers, who was also responsible for painting the weapon and armour textures.

Some in-game screenshots. I tried taking these on my own, holding two controllers and hitting the screen capture button as quickly as I could. I would have liked to use our spectator camera to angle the shots more effectively, but unfortunately one of the major bugs we are currently experiencing made that impossible. The environment was modeled and textured by Nick Zou, although I retextured certain pieces (most notably the walls immediately surrounding the arena, and the structures into which the doors are set). Animations were posed by Hana Ameerah, Shahd AlFakhry and Nick Zou. I was responsible for taking those poses, tweaking them to ensure that they communicated their respective actions effectively enough, and also set their timings. Again, HUD UI was designed by Marie Deslauriers and the icons were the work of Lee Pakkala. All of the programming - game mechanics, HUD, networking, as well as the construction of levels, animation trees, particle effects, etc. were handled by me.

Hopefully if I am given the chance to work on a project like this again in the future, I will be able to disperse the programming and game-engine-related responsibilities across more team members, instead of taking them on myself. I would have also certainly liked to have worked on more of the art and asset creation, but unfortunately, I did not have the time.

Senior Project is Over - Sort of

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.

6:00AM, Today
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.