Work on The Adventures of Chris continues! Currently, I have a working demo containing:
The Los Angeles level is the newest completed, and may still need a little bit of tweaking difficulty-wise. But I do like Kyle's new design for Smog Monster.
One of my favorite things to do when working on the game is to watch lead artist/animator Kyle rough out new character concepts. As someone with little artistic talent, it feels a lot like magic to me. Smog Monster has been a villain in my game since very early days, so I was excited to see him get a "real" design.
For some reason, as we were sitting down to sketch out Smog Monster, we gave him a baseball cap and a cigar. The idea that a monster made completely out of pollution would also smoke a cigar cracked me up. I also loved that the details immediately raised questions about this guy - is he a Dodgers fan? Why? Why does he smoke? Does he need to or just like to? Did he used to be human? What if he didn't? What if LA smog just pulls for LA teams?
So Kyle did the rough animation above, and Smog Monster mostly looked like that for a while, until I realized that he needed a new personality in his dialog to match his new look. In the OUYA version of the game, Smog Monster was basically an excuse for dumb jokes that, unfortunately, never got laughs. He needed to be more than dumb. So I worked out a new character description for him.
As I was telling Kyle about the new direction for the character, he apparently got inspired to redesign his appearance to match the personality that I had changed to match his appearance! So he sent me a new sketch - this time with a huge, puffed-up chest and a facial expression to match his new role as the kingpin of Southern California emissions. So the final design was more a bit iterative than I originally intended.
I don't know about you, but I like Smog Monster's new shape and expression. I hope you'll enjoy his new dialog and personality as well in the new Los Angeles level!
When converting the game to HD, one of my initial decisions was to go ahead and port the whole thing to Unity. I love Flash (the former game engine), but it felt like it was on the way out - if not already out. Unity had better support, a larger community, and most importantly, made it easy to port to a large number of platforms. This has already proven useful, as I recently tested the game on my Steambox and it worked flawlessly. All I had to do was check the "Linux" checkbox on the Unity Build menu and it... just worked. That doesn't happen terribly often, so I'm counting my blessings.
But Unity has other advantages - a lot of built-in tools to play around with! One idea I had was to try to mess around a bit with the physics engine. I figured I could do something neat like give Chris and the various helium balloons in the game ribbons and tie them down to things. It could make for a few fun interactive components, or be useful to the story in a few places.
I'd seen enough chains and ropes in modern games that I felt like this should have been a solved problem by that point. I figured there was probably a module in Unity called "chain physics" or "rope physics" or something and I could watch a tutorial or two and be done in an afternoon.
Boy was I wrong.
It turns out that Unity does have built-in support for this kind of physics, but it was surprisingly tricky to get working right. Unity does support something called "joints," which come in different types, and attach objects to each other in different ways. Checking out various tutorials and articles, it looked like you could make a chain fairly easily by taking a number of chain links and linking them together with "hinge joints." If you make sure all the objects have the proper weight and gravity, it seemed like the chain should "just work." Since a ribbon or string could be thought of as a chain with lots of tiny little pieces, I figured I was golden.
Except I wasn't. The chain links kept stretching past where they should physically be able to, or rotating in funny ways, or breaking apart. I tweaked settings over and over again, and occasionally I would get something that looked about right, but then it would do something else funky. I was starting to get frustrated. The fact that the chain pieces weighed downward but balloons float upward appeared to throw all kinds of monkey wrenches into the physics engine (or else I just had something very wrong in the setup that I never diagnosed).
But then I had a realization. Strings and ribbons don't really weigh that much. In fact, shouldn't their weight be essentially negligible? Maybe I was going about this entirely the wrong way.
Maybe, instead of thinking of a ribbon as a series of hinge joints, I should think of it as exactly one "distance joint" - a type of joint in Unity that prevents two objects from separating too far from each other. This joint seemed much simpler and worked much more reliably. The ribbon then, instead of being actual physics objects with mass and joints and so forth, would just be a simple colored line, drawn using Unity's 2D line drawer.
This worked much, much better. However, there was still a problem, and it involved math. Drawing a ribbon when it's stretched tight is easy - that's just a straight line. But what if there's some slack? The ribbon has to hang down in a curve. At first I thought I would break out my old high school Algebra II and try to figure out how to draw a parabola. I had two points it had to go through, and a maximum length. Surely I could do some algebra, solve a few equations, and math magic would ensue.
Well, it turns out my Algebra II was a bit rusty. Also, I wasn't even sure that the parabola was the right shape. I struggled to find out even how to look up the problem online, not knowing the right names of things, until I finally found the word I was looking for:
You ever heard of a catenary? I hadn't. It turns out it's a term used a lot in architecture for things like suspension bridges -- it's the name of the curve that's formed by a rope or chain that's held slack. It was exactly what I was looking for, and there was a whole equation for it, already there on the internet for my convenience. I didn't have to derive anything myself.
I found some pseudocode for it on the internet, ported it to C# in Unity, and lo and behold, I had reasonably convincing looking ribbons! Woo hoo!
Once I had the ability, I came up with a few other ways to use it - including in a brand, new level you'll get to see in the demo.
Not that I necessarily want you really scrutinizing the curve of hanging strings, but I do think it turned out pretty well in the final product. Let me know what you think!
So I've been observing people play through the Adventures of Chris demo, taking notes, making adjustments, recording feedback, and it's been an incredibly useful process. I suspect this is one of those lessons that should be obvious, but that I nonetheless have had to learn the hard way - if I tune the difficulty to be a fun and engaging challenge for MYSELF (the programmer), it's likely to be WAY too hard for anybody else. Sometimes this is a function of making assumptions on my part - I know what I expect the player to do, what the enemy patterns are, etc. - but there's no guarantee other players will understand the intent.
In a way, it's kind of embarrassing. Watching players struggle against early bosses that are supposed to be a cakewalk, it's easy to feel like a failure as a designer. Fortunately, I've discovered that I'm in good company when it comes to this sort of thing.
Consider this interview with the creators of Chrono Trigger, one of my favorite games of all time:
Sakaguchi: At first, getting through the game was tough. The testers were saying "You guys are being cruel. Whose idea was this?" It was mine! *laughter* Harsh, right?
(This is actually a big comfort to me. If the expert, professional designers of some of the most beloved games in history had trouble tuning the difficulty at first, then I think maybe it's ok that the Adventures of Chris demo started out too intense. I'm in good company!
It also reemphasizes the importance of iteration. It's still early enough in the process to where I can make changes to smooth out the difficulty curve. I can try to make things more clear and better paced, without breaking the game. So I'm optimistic that eventually... EVENTUALLY... I'll get it right! (I think my more recent builds have already helped out a lot in this respect.)
In other news, people have been responding very positively so far to the art and dialog, as well as the music.
I'm excited to make more progress!
(And if you want to playtest the demo for me, shoot me an email at firstname.lastname@example.org! All feedback is welcome!)
So I've got the demo ready to go now! I've sent it off to the first wave of people - hoping to get some good feedback from everybody. If you're interested in playing it, feel free to drop me a line at email@example.com and I'll be sure to send it your way!
Over the last couple weeks, I've been trying to add some bonus content to The Adventures of Chris - filling out the Kingdom of Lost Balloons, the game's central "town" area. I've even added a mini-game!
You see, in the original, pixel-art version of the game, I had a level very early in the game that people called the "bird level." It was remarkably challenging for what was essentially the third level in the game, and a lot of people got frustrated to the point where they quit playing at that level - before they'd even reached the World Map! I smoothed it out significantly with later builds, but it still felt like a lot to put players through that early on.
Well, I aim to fix that in the new version. I've greatly shortened and simplified the first several levels of the game, trying to streamline the difficulty curve a bit. So the "bird level" is radically shortened. Unfortunately, I kind of like the bird level. I liked the challenge of it. So I'm bringing the bird level back, but as a completely optional mini-game.
"But Chris," you might be saying. "Don't you hate mini-games?"
"Not all of them!" I might reply. I do enjoy complaining about certain mini-games, that's for sure. Final Fantasy VII and Final Fantasy VIII both had mini-games that drove me crazy, for example. I don't like a game that I enjoy telling me that I have to play a game that I don't enjoy to continue. Zelda mini-games are better, but occasionally the challenge level gets too frustrating. Right now, Mario Odyssey's jump rope and beach volleyball mini-games are driving me crazy.
But mini-games don't have to be random or overly difficult. They can fit in with a world well. And they have advantages! Mini-games provide additional variety of experience. They can reward exploration. They can add optional challenge for players that like that kind of thing. They help flesh out a game's world. (Final Fantasy XIII really could've used some.)
So adding mini-games is a risk, but they have potential rewards.
So we'll see how the demo players react! Hopefully it enriches the world, and adds some additional fun for players that want it.
Hi, everybody! I've been thinking about keeping a developer's log on the site so that anybody interested in the game can get a sense of how things are coming along from time to time.
Since The Adventures of Chris doesn't have a gigantic budget, I'm mostly able to get the quality level I want by finding freelance artists who can work on my game along with other projects - but this does mean things take more time! That said, I'm pretty happy with the quality level I've been able to achieve so far. My game has progressed from my own neophyte attempts at retro pixel-art to a fully traditionally hand-animated cartoon.
I'm hoping to have a demo of the first several levels ready to go in the next month or so. Production has necessarily slowed down over the holidays, but we've got the entire introductory sequence, Mexico, Malaysia, and most of Transylvania and the Kingdom of Lost Balloons ready to play test! I'm most curious to find out how people fare against the new, more elaborate boss mechanics for Buzzkill and Woe (Count Junior's ghost butler)!
If you have any interest in helping me play test when the time comes, any and all feedback is appreciated!
You can subscribe to this blog using any RSS reader with the URL http://adventuresofchris.com/devlog/feed, or you can follow me on Twitter at @chris_guin.