Brian Crick

Reinventing Wheels

I really dislike most color pickers in games. You’re usually presented with a dizzying grid of color swatches, or some sliders that aren’t the most intuitive things to use, even for someone who spends a lot of time in graphics programs.

So I wanted to design something a little different for the character & costume creation in Tinselfly, something that lets you easily drill down to the color you want and go.

At first, you’ll be presented with a simple menu of things to choose from.

You can click on one of the primary colors, or one of the three shades of grey in the center.

If you click on a primary color, you’ll get some different variations of that color, so the color picker would look like one of the six variations below:

The new colors shown are further categorized by hue, and within each triangle of similarly-hued colors, you can pick a lightness and saturation that you like.

Similarly, if you click on one of the greys, you’ll get some variations that let you refine your color.

And that’s the basic idea.

I think this interface does a reasonable job of looking uncomplicated, even though there are still a couple hundred things to choose from. However, I don’t think it’s obvious how you’re supposed to interact with this thing. Some labels, bevels or general instructional text is probably needed.

Make a Difference

I have high hopes for the game developer’s group I’ve joined. Not just in terms of getting along with the group; sure, I was worried about that, but I’m talking about, like, the group being this positive force or something. I’ve always been hesitant to look for communities of people with similar interests — I’m worried about things getting a bit insular — but I get this feeling like, I’m watching something really wonderful take shape here.

I want to do whatever I can to help this along. To that end, I’ve volunteered to give a talk to the group — maybe with some other people — about music composition.

I don’t know where or when this will take place, but it scares me a bit . Then again, this whole joining-a-developer-group thing has been all about getting out of my comfort zone from the beginning. I’m excited to continue that trend. It’s been a while since I actively looked for things I was uncomfortable with, since I looked for more opportunities to fail and learn from those failures.

* * *

Been stressing out a bit about my Robin character model — and character models in general — for Tinselfly.

To recap, here’s what she looks like:

The odd thing about this is, in my head — if this were live action or something — I’d want the actress playing Robin to be a bit chunky. In my head, that’s how she is. She also has shoulder-length, unmanageable, curly hair, but I wasn’t sure how to model that.

But despite all that, as a stylized character in this stylized world, she’s absurdly elongated and has a simple bob.

I want the characters to look fragile. It just seemed like the right stylistic choice, the way the angular features of the characters in Samurai Jack complement the spare, action-based storytelling, or the way tile-based video game characters are frequently short and square, so the player can more easily tell what tile they’re in.

There are supposed to be elements in Tinselfly about larger-than-life people being all vulnerable, and given the 1920s aesthetic, I wanted my characters to look a little like those elongated, bronze art deco statues you see here and there.

* * *

Whatever I do, I don’t just want to make good products. I want to make good projects that feature made-up worlds that are the sort of egalitarian place I want the real world to be. That’s why Celestial Stick People has some male Lovers.

Getting some strong, layered female characters out there in the video game world is a major force driving the development of Tinselfly. I won’t argue that I don’t have an agenda here.

However, if I want that agenda to succeed, it’s imperative that I’m not preachy about it. Otherwise, the people I want to reach the most — the people who aren’t so obsessed with this whole egalitarianism thing — will simply tune me out.

* * *

So back to the skinniness.

Body image is also a hot topic in feminist discussions, and for good reason. And while I’m trying to move forward on the empowered-female-character thing, I’m kind of moving backward on the whole healthy-body-image thing.

For the most part, however, I’m comfortable with this design decision. Now, I may be completely wrong, but here’s how I’m currently rationalizing it:

  • It makes sense for the story, as mentioned above. If 100% of my design decisions are based on my agenda, I’m afraid I’m getting into preaching territory. I’d still argue that there’s nothing intrinsically wrong with super-skinny stylized characters in a work of fiction; it’s when it’s ubiquitous that it becomes an issue. If my next project has super-skinny characters and thee’s no real point to it, then I’ve got a problem.
  • Everyone and everything — men and women, dogs, cats, spaceships — will be just as long and skinny as Robin here. There’s not going to be a lot in the way of gender dimorphism, either, and I think that that will drive home the idea that this is a stylistic choice, not a normative statement on women in particular. (Sure, Barbie is scary looking. But compare her to the average Ken doll, and you’ll see how the dimorphism makes her so much creepier. In contrast, I like how male and female Bratz characters are similarly oddly proportioned.)
  • This isn’t targeted at adolescents. I’d love to produce something fun and positive for my 10 year old sister in law; I’d love to live in a world where there were lots of products with strong, positive, non disney-princess characters that adolescents could look up to… but this just isn’t one of those products. If I were targeting that sort of age range, I’d be way more particular about what I’m including and what I’m unintentionally saying about things.

Like I said, I’m open to the idea that I’m making the wrong call here. We’ll see how this universe feels when it’s more fully fleshed out, I guess.

Variations on a Theme

Well, that was a nearly perfect weekend. They’re so much better when I actually follow my own rules for managing them. 🙂

In addition to visiting the wonderful new Greater Cleveland Aquarium , visiting friends, exercising and going out with Marie, I managed to get through a full cycle and a half of pet-project work. There are six things on my plate at the moment; here are the weekend’s highlights.

* * *

Made a King of Swords for the Scopa deck. I was really happy with the medal salad going on there, though it got lost when I applied all my Photoshop filters. I’ll have to up the contrast on that a bit.

* * *

Am continuing work on my generic procedural NPC costume thing for Tinselfly. So what you’re seeing below is my test character, wearing a pair of boots whose thickness and length can be set to arbitrary values by the game at runtime.

It’s a bit sluggish, but you can watch this stuff animate in the game. It’s kinda spiffy. Need to work on adding procedural seams and details to things next.

* * *

My new font is starting to look like ya know, a font family. Whee! I’m really happy with how this is turning out.

Keys and Locks

It’s a little late, but I have a new Tinselfly build up.

(As much as I like being able to embed the player directly in blog posts, I realized it would make the home page on my site here load horribly slowly after a while, so I’m gonna just link to them from now on.)

So anyway, there’s a more structured map now. Whee! Though, sadly, it’s somewhat difficult to talk about at this point, since the structure doesn’t really mean anything yet.

The basic idea is that the map is divided into these different areas. Which are different colors right now just for debugging.

You start in the red area. Somewhere in the red area, you’ll find a yellow key (not in this build, but later on). The key could be a plain old key that opens a door, or it could be a new equippable item that lets you cross rivers, or a map that helps you through a maze… it’s a very metaphorical sort of key, and the point is, the yellow key will let you into the yellow area. So somewhere on the boundaries of the red area, there will be a metaphorical locked door, an obstacle of some sort, that once unlocked lets you into to the yellow area.

Somewhere in either the red area or the yellow area, there will be a green key. And somewhere on the perimeter of the combined red and yellow areas, there will be a locked door leading to the green area.

And it goes on like that.

So right now you can’t see the keys or locks, but you can see the boundaries of the areas.

And that’s the basic idea behind the map generation I’ve been working on here. Which I’m sure will be much more exciting once, say, you can’t just move through the area walls. 😉

Zombie Game Trailer, Part 2

Here’s some more babbling about that Dead Island Trailer; I realized last night I missed a few things. (And, same warning as before: it’s very gory, and, I forgot to mention last time, possibly quite unsettling in other ways, especially if you have kids.)

Inevitable Doom: Zombieland

I find myself comparing the music in the trailer to Estasi Dell Anima, the big climactic battle cue from Zombieland. Maybe just because they’re both about zombies, but they’re also sort of communicating similar emotions in similar ways. And hey, if you’re going to score something about the inevitable destruction of the good guys, chances are good that you’re doing it for a zombie-themed something or other.

So… inevitability. First off, both pieces are very repetitive. They’re not about a changing, dynamic scene so much as a single moment, stretched out to the length of a song. They also have very simple beats: the relentless quarter notes in Dead Island; the whole notes in Zombieland that give way to some 3/4 violin wailing. Nothing says endless like a waltz. Worked so well for Gladiator. 🙂

From what I can recall, this sort of incessant, repetitive drum-beating is pretty common to slow-motion scenes of death and destruction.

(Incidentally, it occurs to me that Zombieland, structurally, is very similar to what I’d like to do with Tinselfly. Simple coming-of age story wrapped in an end-of-the-world scenario. I may have to watch that again.)

Shortcuts: Star Trek

It’s not like I was invested in the characters in the Dead Island trailer. It’s not like we get to know them real well. They’re an archetypal happy family who thought they were going on vacation. There’s a rugged dad, a panicking mom, an innocent little girl. By the time the trailer was over I was a bit misty, but if I was engaged, it was only because the characters were easily recognizable archetypes. Would this have worked if the kid were a scruffy teenage boy? With a same-sex couple? An axe-wielding mom? I don’t know.

Reminds me a bit of the opening of the latest Star Trek, where we spend a few minutes with a couple we really know nothing about. We’ll never see them again, but the scene is touching anyway because there are certain backdoors into our collective psyches that just work, despite our best attempts to be cynical about them: family; protecting a child; someone giving birth.

I have mixed feelings about this, but despite my aversion to gender-specific stereotypes and whatnot, I mostly don’t have a problem with using archetypes, at least not in something this short. Again, from that interview:

On the subject of the Daughter character specifically, we were aware that there was an impact about that choice for sure, but I think that choice fitted the narrative we wanted to tell and was appropriate in that sense.

As the audience you feel that fear much more strongly through the eyes of a child. Some people will see that as being ‘manipulative’ which is fair enough. It draws you in, makes you care. That’s quite a hard thing to do in 2 minutes and as some commentators have pointed out all effective fiction is ultimately manipulative in that sense.

I totally agree that all fiction in manipulative. It’s your job as a writer to produce specific reactions in your audience at specific times. That’s manipulation. And the shorter your work is, the more dirty tricks you’re going to have to use.

I guess the line I’d draw is that I’m ok with archetypes as long as you’re communicating the nature of said archetype using their clothes and body language and grooming — stuff independent of their gender, age or color. So you could have had a clean-shaven, panicking dad in a festive Hawaiian shirt, and an axe-wielding mom with scruffy hair, visible muscle definition and a sports jersey, and you’d still get your easily identifiable family that you can connect to.

Everything I Needed to Know I Learned from a 3 Minute Zombie Game Trailer

Guess I’m a bit late to the party, but I just saw the much-talked-about Dead Island Trailer. (Warning: it’s very gory.)

Despite some slightly janky motion capture, I think this is the most beautiful game trailer I’ve ever seen. Not that I’ve seen a lot of video game trailers, but hey, I found it more moving than most movie trailers anyway. And I find myself obsessing over this. Maybe it’s just that I’ve had a lot going through my head lately and my thoughts decided to all coalesce here. Who knows. So here are some random thoughts.

Music

More than anything, I’m obsessing over the music. It’s really elegant and effective. So I thought I’d try to reproduce it as best I could.

Here’s my version of the first phrase. It’s not quite there, but I think it’s a solid effort.

Despite — or perhaps because of — the simplicity of the original piece, this was really hard to pull off. Here’s what I learned:

  • Pay attention to velocity. If you play all the notes at the same velocity, or loudness, the piece sounds like crap. There’s no sense of forward movement, no rhythm. Just a bunch of monotonous quarter notes. There’s no percussion or anything keeping the beat, so it’s up to the melody itself to tell you where each measure starts. So apparently, you want the first note (of four) to be loudest, and your third note to be the second loudest. So the beginnings of your measures are well defined, and the beginnings of each half-measure are pretty evident too. But it’s got to be pretty subtle… seems like one of those things where if you do it right, everything sounds even, even though it’s really not. Sadly, I don’t have the coordination to do this in realtime, any more than I can use the pressure sensitivity of my pen tablet effectively, so I had to manually alter the velocity of each of my notes after playing them, one by one. Gotta practice doing this for real.
  • Use your mod wheel. The mod wheel is this dial on a keyboard that does… stuff. It’s different for different instruments. Sometimes it gives things more vibrato; sometimes it makes things warble in this really strange way. For the violin I used here, it softens the sound of the instrument — both in terms of volume and the sharpness of the sound. I’ve never really used the mod wheel before, but here it was essential to get the violin to swell and taper off like it does in the original piece.
  • Tremolo is fun and easy. The violin does this barely audible tremolo in the beginning. At first I wasn’t sure I could do it since I don’t have a ‘tremolo violin’ instrument, but it was easy enough to get that effect by, well, doing tremolo — by rapidly vibrating my finger on the note being played.
  • Filters can do more than make echoes. So there’s this piano in my music software. And yeah, it sounds like a real piano, and I could play the song on that… but it sounded totally wrong. Too bright, too happy. The original piece’s piano has this sort of muffled sound. I started with a reverb filter, which is the only filter I’d used before, mostly to make things sound like they’re being played in big stone halls. It helped, but wasn’t quite enough. So I added an equalizer filter too, to chop out high frequencies. That dramatically changed the sound of the instrument, and I got much closer to the sound I wanted with that.
  • Key matters. My inclination when analyzing a new song is to transpose it to C — to change the pitches of everything so you’re just using the white notes of the piano. I did that here, and something felt off, so on a whim I put everything back in the right key. And then it sounded a lot better. I really don’t understand why yet.
  • Simple, common chord progressions are fine. This starts with a I-V-I-V-VI progression, which as I understand it is fairly common. (Also recently noticed that How to Train Your Dragon uses a very common pattern.) I should study some of the more commonly used progressions out there; I have a list in one of my books already.

Gimmicks

The bulk of the trailer is filmed backwards. It works extraordinarily well, and there’s a great sense of closure to the way it ends (begins?)… to the father reaching for the daughter, but since it’s backwards, he’s getting ever farther from her.

There’s a scene in Tinselfly I’d wanted to go backwards, but it’s not a particularly emotional scene; it’s more expository. There is a particularly emotional scene I was planning on doing forwards, but now I’m wondering what it would be like backwards.

You could rightly call that gimmicky, blatantly aping this or Braid or whatever, but as far as I’m concerned, if the story is better communicated by doing this part backwards, then I’ll do it backwards. It’s only a gimmick if you’re using some avant garde approach because you think it’s cool and not because you think it will work.

Game Trailers

There’s this interview about the making of this trailer, and I found this quote particularly interesting:

To an extent a full CG trailer is always a different experience to actually playing the game. It isn’t trying to pretend to be game play, like a lot of CG trailers do, at all. It’s more trying to tell a story in the same world but in a different medium that describes an event that is illustrative of the type of interactive experience you might have when playing. All we have tried to do is tell that story as effectively as possible.

I have to admit there’s a certain logic to this. And the results are kind of refreshing. I never get much of a sense of gameplay from trailers anyway, so why not use this medium to do what it’s best suited for?

Though on the other hand, you could apply this logic to demos and argue that they should ‘tell a story in the same world’, but in a highly abbreviated fashion compared to the game story proper. I think that might be interesting.

Damage

Here’s another thing related to Tinselfly. On its own, I don’t mind gore, but here, it weirds me out a little because the characters are a little cartoony. It’s like… dismembering Wile E Coyote. Sure, you can flatten him and have bombs explode near him, but it’s all cartoony violence to go with the cartoony character who will react like a rubber toy, not like something that’s made of skin and muscle and brain matter.

I don’t intend for Tinselfly to have particularly violent gameplay (not in the story mode proper anyway, but that’s a long discussion). However, there will be violence here and there, and I have every intention of making said violence come off as brutal and visceral as I can make it. Now, that’s different from gore, but the issues are similar. She’s not finished yet, and I’m not saying this will happen, but could I, say, have my Robin character model be crushed to death on camera? I think I’ve asked that before, but I still don’t know the answer to that.

Reticulating Splines

Well, this is very Hollywood OS.

I’ve been working on map generation for Tinselfly, and have been having some trouble with that. And last night, I wasn’t just having trouble with my code; I was having trouble figuring out how to even begin debugging my code.

The world here is made of a bunch of triangles, and I wasn’t sure I was creating them all properly. So after an hour or two of slogging through my debugger and inspecting properties for my objects, I thought I’d just add some debugging information directly to the game world. So all the text you’re seeing, that’s information about what order my triangles were created in, what their unique IDs are, and which other triangles they’re adjacent to.

As you move around, the text moves too. Because the text is, after all, part of the game right now.

It looks like overkill, but it’s been immensely helpful.

* * *

1993. SimCity 2000 has just come out. I’m sitting in a computer lab, working on a 3d vector-graphic tank game in Turbo Pascal, a little like BattleZone.

Sure, it’s just primitive vector graphics, but it takes an insane amount of preparation to get a 16mhz computer to do this, in a programming language designed for learning, not for efficiency. Before you can draw a single graphic, you need to create a bunch of tables that the program can look at, so instead of solving complex, but common math problems every frame, it can just look up the solutions in a table.

Creating these tables takes the program a couple minutes. To make the wait a little more tolerable, I add in some messages about what the program is doing and how far it’s gotten. Some of the messages are useful. Some of them are not; they’re just silly, nerdy technobabble. Like the ‘reticulating splines…’ message in SimCity.

A not-so-nerdy friend of mine walks in and sees my program running. While he’s not as into programming as I am, he immediately picks up on the fact that this technobabble isn’t what it seems to be. He accuses me of trying to make my stuff look more involved than it really is, and walks out.

It isn’t a playful jab. He’s sincerely disappointed.

I’m mortified. Because he’s right. Sure, there really is some complicated math going on here, and getting this to work was no small feat. I want people to know that. Even the simple act of drawing a single line on the screen requires custom code that I’m proud of having implemented on my own.

But my status messages should have communicated exactly what I needed to know; no more, no less. I strip the messages out. They weren’t in my program for more than fifteen minutes.

But for years after this, I’ll be very nervous when talking to non-technical people about programming tasks. I’ll be very careful to choose words and phrases that are clear rather than impressive.

* * *

The moment I saw that globe with those numbers floating around it, I started to worry that this was more about making me feel proud about doing something complex, and less about solving a problem.

However, my problem with Tinselfly right now is all about spatial relationsips. It makes sense for my debugging information to be presented in a graphical way, rather than the text-only debugging screens I’m used to.

I kind of like silly, overproduced computer interfaces in movies. I sometimes think those computers might be fun to use.

Though in reality, overproduced interfaces just get in the way a lot of the time. You’ve got to have exactly as much interface as you need. And sometimes, just sometimes, what you need is a bunch of transparent numbers swirling around a colorful sphere. Which is kind of cool.

Absolute Position

I finished my mini map! With, like, 40 minutes to spare. 🙂

What’s New

(The Short Version)

First, the map is divided into different colored areas. They don’t really mean anything right now, but they’ll become important later.

Next, there’s a globe in the upper left corner. There’s a little arrow showing you where you are, and the colored area you’re currently in is highlighted.

User Interface Design Rambling

It was surprisingly not-straightforward to make that globe.

But the basic idea — and the reason it was so complicated — is that I’m very picky about how to communicate position to the user. I want the user to think of the world in terms of a small number of discrete, countable areas. It’s all about chunking. You’ll notice that as you move around within an area, The globe doesn’t really move much, but if you enter a new area, the globe will swivel to give to the best view of whatever area you’ve entered. I want the user to remember the colors of the areas, and the shapes of the areas, and if eventually the areas have names, I want the user to remember those, too.

So they can divide the world into manageable parts, and hopefully, that will help them navigate.

There’s a slight complication because the world is round here. Say I was using a map of the real world here, and my areas are continents instead of colored blobs. You start in North America, and the globe shows you North America, with Canada at the top and Central America at the bottom.

So you move around, and go visit the other continents, and when you come back to North America, suddenly Canada isn’t on top. It’s on the side. You never rotated the camera or anything, but it’s just the way navigating on a sphere works.

At first, I added some code to re-orient the globe to that North was always up, so that when you went to any given area, it was rotated the same way as it was the last time you were there. And that was nice and all, and it really helped reinforce the shape of the area and your memory of the area, but it was hard to tell what exactly would happen when, say, you pressed to up key. The arrow wouldn’t necessarily move up.

So instead of having a canonical rotation for each area, I’m just orienting the globe based on the orientation of the camera. And yeah, that can change over time, but I think that with the unique area colors and shapes it will still help with navigation the way I want it to.

Next Up

By Saturday night next week, I’d like to have my map generation more complete, with obstacles on the boundaries between areas.

That’s What it’s All About

(…and you spin yourself around…)

I was working on the content for my Tinselfly project page the other day, and I was having trouble expressing my goals for it. Largely because, with work-work and all the drudgery you have to do to get any kind of project like this off the ground and have it look professional, I’d actually forgotten what exactly those goals were.

So while I’m taking a short recharge break in the middle of my work day—yes, it’s 4:00 and that feels kinda of middle-ish, the way things have been going — I thought I’d try to write this up as best I could. Because sometimes just restating this stuff can give me new insight into it.

* * *

It’s all about school.

Consuming a story isn’t so much different than sitting in class. Character exposition is where you learn about characters. A story has to communicate a plot in clear, efficient terms, the way a history professor might talk about real events. If this is science fiction or fantasy, you have to be taught the rules of the story’s universe so that you can apply that knowledge to exploring the moral, ethical, and societal implications of fantastic ideas.

Novels use the same medium as textbooks, and movies aren’t structured so much differently than documentaries.

Of course, I’m talking about just one kind of class here: I’m talking about lectures. Where you read a textbook, and listen to a professor talk, and maybe there’s some group discussion, but frequently there isn’t. It’s very passive. Just like a movie or a novel, where it’s a very one way sort of thing.

In addition to lectures, most of us have attended labs. They’re also educational; they also have a set curriculum where everyone who attends each lab is supposed to come away having learned the same things. But they’re more hands-on than lecture classes, and many people enjoy this style of teaching more than lectures, and will respond better to it. Some students will internalize more from these types of classes.

If movies and written stories are like lectures, then I think games can be like labs. I don’t think games can be just as good at telling stories than a movie or a novel. I think they can be better, because it’s a better way of learning and internalizing the important parts of a story—at least for some people. They can still have linear, author-controlled narratives, and I believe some players will find these hands-on stories more engaging and moving and meaningful than the storytelling styles they were previously used to.

Of course, some people will still always find the average movie more emotionally satisfying than the average game, just as some people today prefer novels to film.

So there you have it.

I don’t know if I’m the person who’s going to succeed at pulling off this approach to storytelling.

But I’m sure going to try.

Here Comes the Sun

It’s crunch time. I’m going to be spending much of today doing work-work, but before I dive into that, I wanted to babble a bit about lighting. Yes, I’m still keeping Tinselfly moving; that’s kind of essential during crunch time.

[fergcorp_cdt]

In the past few days, I’ve added some mostly cosmetic things. They all revolve around lighting and going beyond the obvious solutions for setting this up.

The Sun

The sun won’t ever move. I want it to stay in a fixed position to help you navigate. I could, then, just have set up a directional light for the sun and walked away, but I would never have been happy with that. While the purpose of said directional light is to simulate the sun, the purpose of lighting in general is to sculpt your scene. The sunlight isn’t going to do that if it’s in line with the camera or directly behind it.

So there’s some logic in here to try to keep the sunlight close to where it would naturally be, but at a reasonable angle to your point of view so you get nice highlights and shadows here and there. I’m not quite done, but generally speaking I’m liking the results so far.

The Stars

You’re on the night side of the planet, and can see a brilliant starfield. You start walking towards the day side. What happens?

My instinct was to have the stars fade out while the sky faded in, and while this was easy to implement, it just didn’t feel right. Stars don’t fade. They appear to twinkle, one by one, out of existence. So I wrote a special shader that would allow that to happen.

The Sky

Daylight is a funny thing. When you’re standing outside, you’re not just lit by the sun; you’re also lit, in large part, by the sky itself.

I thought I’d simulate this by adding some logic to have my sunlight appear higher than it naturally would be, but that’s not really working, and it’s screwing up the no-head-on-lights thing mentioned earlier.

So I think what I’ll do is have a blueish ambient light whose intensity varies based on your position instead.

Copyright © 2017 Brian Crick.