Art Woes, Eureka Moments and Childhood Dreams

Commit ecaaf08.

This is going to be a long post. If you just want the summary: BattleCrypt is going in a new artistic direction. Hence the concept above (not actual in-game art). Tile size is doubling and the game will not be pixel art. I’m exploring some type of hand-painted style. Along the way I’ll be refining my skill as an artist until it satisfies the elusive perfectionist in my mind. If you want the details, read on…

 

I have been really struggling with BattleCrypt motivation and art direction. Our artist got super busy (he has a family and also is finishing up two other games) and hasn’t been able to contribute to the project for almost two months. Recent posts showing new progress with his work were actually based on stuff he committed in early February. I think it’s safe to assume that his responsibilities will make it difficult to be the primary artist on the project, although he is still excited to contribute where he can. That puts the onus back on me to lead the creative direction of the project.

If you follow the progress, you’ve probably noticed a theme of dissatisfaction with my artistic direction on the project. In general, working on art has been a roller coaster experience. What I want is both simple and complex. When I see BattleCrypt art, I want it to look like a game I’d want to buy and play on Steam. But when I create tiles, UI and characters…they just aren’t the quality I’m looking for.

Sean’s work was definitely up to that level but I am not skilled enough at his style to continue that and he can’t be our main art lead. So, if I lead the creative direction I have to find a style that both satisfies my driving need for the look, but also balances that with something I actually have the capability to produce.

Multiple times I have felt like I was making good progress only to realize that I could nail the style in one area (tiles) but not another (character design or UI).

Finally, I had a Eureka moment.

I suck at art. This is why that’s interesting.

 

When I was a little kid (somewhere between 7 and 9) I experienced the wonder of the Nintendo Entertainment System at a friend’s house. My family either couldn’t afford one or it was not a priority but I was immediately obsessed with the magic. I had experienced Atari and cabinet games before but nothing like the amazing magic of Mario eating mushrooms and kicking shells. I’d spend hours drawing levels and inventing video games on paper. I’d cut the characters out separately and act out how the games would play.

I was good at drawing and my family and friends often complimented my skill at art. I continued to draw a lot but we also got a family computer and I was obsessed with how it worked. I wanted to make my art come alive with the magic thing called “code” that was inside of the computer. I learned how to hack files to change how programs worked. By eighth grade, I was writing Basic, doing lots of things in DOS and trying to make sense of C++. I was going to be a computer programmer and make amazing games.

Two things happened. First, my eighth-grade teacher unintentionally crushed a big part of my dreams. I created a Basic program to solve the Pythagorean theorem for extra credit (yes, I was that kid) and was ecstatic. When I talked to her about my plans to be a computer programmer she cautioned me about the level of math required by the engineering fields. While I excelled at logic (and motivation), I was miserable at math. I struggled to grasp simple concepts and I think she felt sorry for me. The way she looked at me, I knew she thought I couldn’t do it. Second, I was further crushed by the difficulty of C++ and lack of mentors. Nobody I knew programmed computers and I struggled to get the multi-disk installation of Borland C++ to even install, let alone compile something (the Internet didn’t really exist, youngsters).

Through high-school I focused on art but continued to hack and modify games and explore programming concepts. I decided to major in graphic design because it mixed my two favorite things: art and technology. In college, I loved all of the technical aspects of design. I dove into Flash programming to create interactive websites (gag!). My workflows were faster and more efficient than most peers because I mastered the technology and graduated tied for best portfolio. But I was the weakest at drawing, painting and all other traditional art media.

The irony is, I never worked as a graphic designer. I ended up doing whatever it took to pay off those student loans and excelled at various careers by applying technology in ways that nobody else was. I moved from programming to make my job more efficient to directly programming as a career. I became a technical lead, then an architect. I lead technology aspects of multi-million dollar projects. And then started my own software company.

And now, here I am the lead artist on my own pet project. Finally possessing the means to do what 9 year old me wanted so badly – to make my art come alive in the interactive medium of video games. But when I created BattleCrypt art, it wasn’t amazing. It wasn’t even good. I got frustrated, depressed, angry and defeated in an unproductive cycle.

Until I realized that I utterly suck at art. This realization should have depressed me. My wife and friends were quick to argue when I announced this fact, thinking it self-pity or frustration (both plentiful in this project). But they were wrong.

I DO suck at art but it’s so empowering!

Because I have the raw skill, I can be good. I was once. I just didn’t practice. I wasn’t willing to take time and to fail at things because I was “already great” at it!

 

So. The picture at the top of this post? New BattleCrypt direction. This game will not be pixel art, it’ll be higher-definition, hand-painted art. I will do “artsy” things that I thought were a waste of time before. Concept art. Mockups. Exploring color palettes and design styles. It’s time to fail at some things. It’s time to commit to practice, and not expect bread without grinding the wheat. And it’s time to enjoy what kid-me set in motion. That’s how I got here, I’m going to have fun.

 

My Surface Book Experience

Microsoft’s Surface Book is a constant nightmare to use. In addition to the premium hardware cost of nearly three-thousand dollars, the Surface Book has cost me time and revenue in debugging issues and inability to perform work.

Last year i was looking for a top-notch business laptop. I had a generation one Surface a year or two ago and liked it a lot. It was stable, performant enough and had an awesome form factor. So, on December 22, 2015 I purchased a Microsoft Surface Book with a 512gb SSD, Intel i7 and 16gb RAM.

The first thing I noticed was that Photoshop was unable to use the Surface Book’s nVidia GPU. Attempting to use it resulted in a black screen on all documents. This was surprising because a significant amount of advertising implied high productivity with Photoshop specifically. The Intel graphics worked okay but there was more delay than I hoped for when drawing.

Worse than this, within a day of receiving the Surface Book, the screen literally started falling off. It started with a “squishy” feeling when resting my palm on the right side of the screen. Soon, I noticed that there was an eighth-inch gap between the screen and housing in the bottom left. See the picture at the top of this post.

I spent time on the phone and chat with various support people who presented several options for replacing the Surface Book. Unfortunately, I needed this laptop for work so I had to pick the fastest replacement option. I drove 3 hours on snowy roads to a store in south Denver, CO to replace the Surface Book with the damaged screen.

I got home with the new Surface Book (which I had inspected for screen adhesive problems). I booted it up and things went well until I got to the pen-pairing step. The pen paired but the cursor would not track the tip. I spent hours googling and trying various things. I replaced batteries and repaired the pen dozens of times. I spent an hour or two in chat with tech support, who finally suggested I factory reset the Surface Book.

A factory reset didn’t change anything and another hour in tech support chat got me a new pen shipped. Another 10 day wait. This was frustrating enough but other problems were causing even more trouble. I was about to enter graphics driver and power supply hell.

As I started using the new device I noticed it wouldn’t sleep properly. Often when I’d put it away, I’d hear the fan running in my bag. I’d take the Surface Book out and it’d be ultra hot – something electronics generally don’t like. Googling revealed that I should use hibernate and not sleep mode as Microsoft was working out some issues.

Additionally, every so often the Surface Book would chime and display a little message letting me know that the display drivers had crashed and recovered. Usually this just caused a few-second delay but often it would also crash applications that were depending on the drivers. The most frequently-affected applications were browsers, specifically Edge and Chrome. They would become unusable, forcing me to close all instances and sometimes fully restart the device.

edge-crash
Browsers (Edge pictured here) would crash, flicker and display garbled output due to display driver crashes.

I tried a variety of fixes for this, forcing Windows Updates to reinstall drivers and even trying beta drivers for Intel. Using the beta drivers reduced the crashes but they still occurred every few hours. Additionally, attaching or detaching the screen or plugging in an external display caused problems. The device would continually notify me that it was ready to disconnect after I attached it to the keyboard. Scaling issues happened everywhere with applications often crashing when moving from one screen to another. And the device would always have to be restarted after sleeping or hibernation.

Understand that returning the Surface Book is not an easy option for me. I have to find a device in the interim that can keep me productive. I have to migrate tons of applications and set up complex environments required by my clients. And I have to find a new device that fits my needs. But I came to the point where I was going to return the device on the very day Microsoft released an update that was supposed to fix everything.

The latest Surface Book update has made a difference but it’s not enough. I still can’t sleep or hibernate the device, it always causes display issues. I often get a pink screen with a sad face on startup, informing me the device has had some power management issue. When I restart I have no battery left. While the display crash messages happen rarely now, they still happen. And I have new sound-related crashes that disable audio completely until I restart.

The Surface Book doesn’t even play games. The card is more than capable of running modern games at acceptable resolutions but nVidia drivers haven’t been updated for months. It is possible to get many games to run, often using startup flags, and you can install hacked drivers. But this is a $3k work laptop. I can’t mess around with that.

It has been a little over two months of constant hell. I have been through two devices, a new pen and a factory reset. I have spent hours in chat with tech support, googling for solutions and trying workarounds. This is the worst laptop I have ever owned. It had so much potential and truly incredible hardware. But my business can’t continually pay a huge price to beta test a disaster. I am a software developer with a lot of knowledge and experience debugging complex computer systems. The Surface Book is too much for me to deal with, failing at the most basic tasks, so I can’t imagine how mainstream users would tolerate this.

I have to keep this a little longer to wrap up a contract because I don’t want to face setting everything up on a new machine. Then it’s going back and I’ll be shopping for something more capable.

UPDATE:

This adventure has come to a mostly-happy ending. Last Thursday my surface book crashed while I was doing a video conference presentation to a sizeable group of clients, again due to the display drivers crashing. It glitched out so hard the soundcard stopped working and browsers wouldn’t even open. I tried to restart it and it hung on that too. I put the surface away and dug out my old Macbook Pro to finish out the work. It was the last straw.

I spent a few hours on livechat with Microsoft support. They were unable to issue anything but an exchange but I’d already been through that process. Additionally since I kept waiting for drivers and updates to try to fix things, I was outside the 30 day return window.

My only option was to contact the nearest store (where I exchanged it after the screen malfunction) and see what their manager was willing to do. I got in touch with Adam, a manager at the Windows Store in Park Meadows mall south of Denver. Adam was awesome. I did have to drive several hours down to the store but the whole team there was super helpful.

I explained my story and was able to reproduce at least several of the problems for Adam and his staff. They were clearly dedicated to delivering a great customer experience. After running through a few fixes that did not improve the bugs, I was able to exchange the Surface Book for a 15″ Dell XPS. I had been looking at these devices anyway. The Dell is significantly more powerful on paper and was almost $1,000 cheaper. I took home a new laptop and an Xbox One with four controllers and a few games for the office. It’s only been a few days but I’m very happy with the XPS so far.

New Tile Work

Commit 2c8e080.

Sean, our artist (as long as he has time) has been working on some new tile concepts (pictured above with bloom applied on left). We’re really inspired by the new direction and we’re excited to see that develop into full levels.

We haven’t been idle on the dev side either. Now that enough tiles are available to create a basic level, we’ve applied our post-processing effects from the last post to the new art. Here’s what it looks like with and without bloom:

bloom-demo

We also have done some fun things with how spells charge and how spells can start to affect the level itself. In this example, the player shoots a fire spell past a burning object. Note that the flames burn higher and the flame is disturbed by the passing spell OR a mage of the same element type:

flare-effect

But a spell (or mage) of the opposite type quenches the fire for a period of time:

fire-quench

We want to do a lot more of this type of thing: the mages and their spells should affect level elements so levels feel more immersive and real. It also offers fun design opportunities as being close to compatible or opposing elements may have some impact on a mage’s powers.

Side note: awhile ago we implemented screenshake when fully charged spells explode. I forgot to mention this, I don’t remember when it was exactly, and the effect is a little broken right now anyway. Ideally this effect would also trigger dust and stone raining from weak places in the ceiling etc. But it has a ways to go. You can see this in the fire mage gif when the large spell explodes.

Post Processing Effects

Commit 800e085

While we have a new artist working on concept and new tile work, we have continued working on development. As the artist works on tiles, we want to work hard on supporting technology that will give the levels unique ambiance and depth.

First of all, levels in BattleCrypt are created with a program called Tiled. Tiled is excellent at creating layered, tile-based levels. But it’s not really a full-fledged level editor. So you have to establish conventions around how to create elements in Tiled that turn into real game entities when the level is loaded. Things like particle effects, player spawners, liquid areas, collision and more. FlatRedBall has plugins to load .tmx (Tiled format) files and a few basic conventions, then I have a stack of additional ones built on top of that. I have been working on making those more friendly and less-buggy to ease the artist workflow.

Second, I’ve been really interested in learning a little about post processing and how shaders work. I doubt realtime lighting can exist in BattleCrypt due to time and skill constraints! That being said, I would like to explore options for faking certain aspects of lighting, water effects and bloom.

The first problem to solve was setting up render targets and rendering the scene to a temporary texture instead of the screen buffer. I started with abstracting shader loading and render targets into some interfaces so it was easy to stack one-or-multiple effects. Then, I wrote a desaturation shader because it was one of the simplest things to figure out.

first-effect
Shader loading and a basic desat shader applied.

Next was starting to work towards Bloom filter. Bloom is actually several effects: a huge contrast increase (called an extract), a Gaussian blur, and then an additive blend back with the main scene. What this does is makes the brights brighter and gives them a blurred glow that simulates the gleam of lighting. The Gaussian blur was a bit challenging, me not being the mathematically-skilled type. The blur itself is actually two passes, one for horizontal blur and one for vertical. Once I sorted that out and debugged all the little quirks, the extract and add were fairly simple. Here’s what each pass looks like (click for larger):

bloom-blur
A gaussian blur effect applied to the scene.
bloom-extract
An extract effect, basically just a strong contrast increase.
bloom-extract-blur
Blur and extract both applied, this is ready to additive blend with the main screen buffer.
bloom-comparison
Before/After the final product. Notice that the bloom has lightened the entire scene. This is a pretty liberal application of bloom and probably not what the final product would look like.

New Artist Work

Commit d019bdd.

I’m excited. A very skilled artist is interested in working on BattleCrypt. His ability to contribute will depend somewhat on availability since he has a lot of other stuff going on (don’t we all!).

I’ve been working a lot with Vic Chelaru (creator of FlatRedBall) to make it a little easier for an artist to work on the project. We’ve added core tools into the repository and Vic has improved some of the FRB tools to build the project easily without  having a full development stack.

While I haven’t worked very hard to make the project accessible to new contributors in terms of spinning up and tooling, I HAVE kept game design, data, art and programming decently separated. All gameplay-affecting constants are stored in Glue, a tool designers and artists can use to tweak play and rebuild the project without a development environment. I have also done a lot of things like make character stats, damage, reload rates, etc data-driven. Designers and artists can change animations, sprites, movement speeds and more just in the tooling without touching code.

We have had a couple late-evening jam sessions to get our artist up to speed. He’s currently working on some tiles and created the image above as a concept piece after playing the game a bit.

I am inspired!