Where we’re going, we don’t need UV maps!

So, after getting a decent level generator working, I shifted my attention back to modelling. I need to populate my levels with 3D stuff, and that stuff doesn’t just come from nowhere.

I spent a good chunk of time over the past week learning about UV mapping in Blender. I learned how to mark seams and unwrap that way, I learned about the smart unwrapping feature, and I learned about the various projection methods as well.

I have a decent understanding of the very basics. I am the farthest thing from a professional aside from people who have never used Blender before, but I get the general idea.

Case in point, something extremely simple:

column

So this column has some very basic geometry, making it pretty easy to unwrap and texture. Even still, I spent a ton of time on it. Granted, the majority of that time was spent learning and playing around with things until I understood how it worked, but a ton of time none the less.

Even if I got my skills up to a reasonably skilled point, UV mapping and texturing are no joke. They take a ton of work, and I have serious respect for people who can do it well.

So… I don’t want to spend all of my time texturing, so I’m going to sidestep the issue as much as humanly possible using vertex color shaders!

Vertex color shaders are often used in games that use simple “flat” looking 3D art. It basically looks like very early 3D models looked before computers had tons of memory for textures. Vertex color shaders have other uses, but I’ll be using them to drive the overall style of my game.

This will enable me to create simple models, do almost no UV mapping. It’ll also keep my game from looking like total garbage due to limited artistic talent.

So, with all of that out of the way. I’ve started creating some simple assets I can start building the game with, this includes our first enemy type!

imps

 

These enemies are tentatively called “Rainbow Imps”. They spawn in with random colors, and will charge at the player in massive hordes. They’ll be easy to kill, and will explode in a gush of goo that matches their skin color. The goo will leave colored chunks and splat decals all over the place. Basically once you’ve wiped out a horde of these guys, it’ll look like the most intense game of Splatoon ever just took place.

They’re obviously pretty basic looking (just a sphere that has extrusions), but they should be pretty cool looking in motion, and when huge swaths of them get destroyed. Once I get further along, I’ll have to go back and alter their design, but what I have now is usable.

Now that I have the models, I need to create some basic animations, and then work on getting their AI working as intended.

(Also worth noting: I have some basic level geometry in the shot, but expect it to get brighter and more lively once I start doing music visualization.)

Adjacent rooms

I’m pretty happy with the way this turned out.

The map generator is now generating adjacent rooms. I can have levels stay mostly linear, of have huge sprawling areas just by toggling a flag.Screen Shot 2016-02-13 at 6.35.03 PM (3)

In the first image I just let the generator run 30 passes over every room, and have them expand outward until the random number generator cuts them off.

Screen Shot 2016-02-13 at 6.37.43 PM (3)

In the second image, I still run 30 passes, but then stipulate that if a room had already spawned rooms in a pass, then they can’t spawn any in subsequent passes. This results in some slight deviation from the critical path, but it’s mostly a straight line to the end.

Screen Shot 2016-02-13 at 6.43.56 PM (3)

I can also just limit the number of passes I run to get a result that’s somewhere in the middle.

Each tiny square the map is made up of will be a hand designed piece that can contain traps, enemies, loot, and platforming challenges.

The map’s critical path

criticalPath

I now have my map’s critical path being laid out using valid entrance and exit routes for each room.

The white dots on each square represent that room’s possible entrance/exit points.Adjacent rooms need to have connecting entrance and exit points in order to be placed.

You can think of them like doors. Basically every time I want to place a room, I make sure that the current room can connect to the door of the previous room. I added the red line in Photoshop to illustrate the path that’s created.

My next step is to randomly add rooms adjacent to rooms that have other possible exit points that aren’t along the critical path. Then I will add rooms randomly to those new rooms and so on until I can’t spawn any more rooms.

These additional rooms may or may not loop back onto the critical path. I don’t care if they do, as long as I have guaranteed that the player can reach the end of the map. At some point later, I’ll programmatically make some of these rooms contain loot for the player, this will encourage them to wander the whole level even if they figured out the shortest path to the end.

Going back to basics with my map generator

Screen Shot 2016-02-12 at 11.47.38 PM (3)

It may not be as exciting looking as the previous maps I generated, but my new map generator is creating the critical path from a starting room to an ending room. I’ve got some bugs to hash out with it, but it’s a good start.

Each colored square is basically an area where anything at all can go. I’ll be hand designing unique rooms that can snap together to go in those spots.

Once I have the bugs with my critical path sorted out, I’m going to make each room have a chance to spawn rooms adjacent to it, kind of like a really basic cellular automata. It should result in pretty organic layouts. The rooms themselves also won’t all be squares, I’m just doing that at the moment so I can write the logic to lay out rooms.

This approach allows me to have a very high level of control over each room. The other map generation approached I looked at generated really cool looking maps, but actually designing a challenging and coherent first person action game using those maps is quite difficult.

One of the issues that other map generators I looked at was that the concept of a “room” was very loose, and it was basically any area that had a large number of empty tiles.

Those generators also created rooms and then connected them with hallways. I personally hate first person games with big maze-like corridors, so having a series of interconnected rooms will just make for better maps. I can also still have hallways with the system I’m building, it just means that I have to make a room that is structured to look like a hallway.

Overall, I’m stoked about the direction this is going.

Progress

So I’ve been spending a good deal of time learning the basics of Blender. The idea here is that I’ll be able to make my own models for gameplay and level geometry. I don’t have to get great results right away, I just have to get usable results.

I started by following “Your first day in Blender” tutorial series that’s found on Pluralsight. It helped immensely. Here is an early shot after only an hour or so with the series:

Screen Shot 2016-02-04 at 9.29.02 PM (3)

Then I moved onto making my first un-guided model. I chose to start with a hand, since my game is in first person and I’ll need hand models I can manipulate. I was kind of shocked at how far I came along in a short period of time:

Screen Shot 2016-02-07 at 8.38.39 PM (3)

It’s super basic, but I’m proud of it. Tonight I spent more time touching it up, and then I rigged it:

Screen Shot 2016-02-08 at 6.14.37 PM (3)

Screen Shot 2016-02-08 at 6.14.43 PM (3)

I’m sure pro modellers and people who enjoy topology that doesn’t make you want to vomit may not approve, but I’m happy with the results so far.  The last thing I did for the night was pull it into Unity and quickly get an animation going:

All is right in the world.

What I’m working on right now

So I’m focusing on a couple things for the immediate future: getting my level generation algorithm into a state that I’m happy with it, and learning some of the basics of modelling with Blender.

I currently have levels being generated using cellular automata, and then I’m using marching cubes to build the level’s walls. It’s very cool looking and interesting stuff, but it comes with too many limitations.

You get results like this:

12642693_10156462762870313_8067592277705696531_n

When I want results that look more like this (really bad) sketch:

Office Lens 20160204-201950

So I’m reading up and learning about different kinds of dungeon building algorithms so that I can pull this off.

On the Blender side of things, I’m basically doing beginners tutorials and trying to get some of the core concepts down. I need this to create proper hand models for my characters, building level geometry, creating traps, and making monsters.

All that being said, I fully expect my models to suck. They will suck hard. The good thing is that I want to have a retro-low poly aesthetic, so it will allow me to build much simpler models and maintain an art style.

You might be asking “why bother with an art style when you don’t have much?”, well.. The biggest reason is because I want to start figuring out the visuals now, and aside from that, I feel like I’ve been putting off learning Blender for way too long.

 

Disco Dungeon – A roguelike music FPS

Okay,so I almost never post here. It’s actually been nearly an entire year since my last post. I doubt anyone’s desperately waiting to see anything here, and honestly you probably landed here by some fluke. Anyway, I’m going to try and change that. Hopefully. Maybe. Possibly.

I’m working on a game in my spare time that I’m calling “Disco Dungeon”. It’s going to be a roguelike (or maybe the correct term is rogue-lite?) music themed first person shooter. It sounds like I threw a bunch of game concepts into a blender and this is what was spat out, but I swear it’s almost a coherent idea!

Here’s the high level rundown of what I’m working toward…

In Disco Dungeon, you choose one of three classes of musical wizards: the world manipulating Disco Druid, the battle hardened and blood soaked Metal Mage, or the charismatic and whimsical Pop Priest. Each class is associated with a specific genre of music, and that’s what you’ll hear as background music when you start playing. Each class will have their own set of unique attacks that can be customized and changed over the course of the game.

Players will delve into procedurally generated dungeons, fight monsters, dodge traps, and try to reach the boss creature at the end of it.

Music doesn’t also just dictate your character class, it also will affect the core gameplay, the visuals in dungeons, and even things like the timing of traps.

Players can fire attacks from the character’s right and left hands. Each hand will cast a different kind of spell. These spells are powered by music, this means that players need to time their shots with the music. Firing a shot perfectly in time with a beat will be far more powerful, than completely missing the beat. The player will also have a mana pool that will deplete with each shot, correctly timing a shot will cause less drain on the mana pool than screwing up. Mana will replenish very slowly over time, and through items found in the dungeon.

It may seem strange that correctly timing a shot would give you a more powerful shot AND drain your mana pool less, but this will encourage players to develop their skill instead of just spamming attacks.

The choice of class (and thus music genre) will paint dungeons in particular aesthetics. For example, the disco druid’s dungeons may be full of crazy lighting and flashing colors, but the metal mage’s dungeons will feel dark and gritty, with such things as stone slab walls that are held together with pulsing flesh mortar. All of these elements will react in time with the music, and aside from looking cool, will also give the player visual cues to help them time their attacks.

Some extremely early prototyping:

Dungeons will be lined with all sorts of devious traps that players will have to out-think and dodge. Some will move in time with the music, others will be triggered by the player. The player is expected to learn about these through personal experience and suffering, it is a roguelike after all…

Death is permanent and will be pretty frequent, but players will collect certain persistent items that will alter gameplay and give an overall sense of progress in spite of losses. They will have a central hub that will be built up over time to gain certain bonuses, and to receive some light narrative.

… So that’s pretty much it. I’m leaving out some details that I have stored in a GDD that I chip away at from time to time, but this should give you an idea of what I want to make. I think it’ll be a fun game if I manage to build it all, and there’s enough small pieces that I can work on that I shouldn’t get distracted with some other game idea in a month’s time.

It might also keep me from waiting a whole year to post again. Hopefully. Maybe. Possibly.

Staying motivated or: How I learned to stop procrastinating and love the chain

I love game design and development. It’s easily my favorite hobby, and I’m a game developer in my day job, so I get twice the fun. So I must be super eager to work on my personal games when I get home, right?

Wrong. It’s so much easier to just turn into a lazy lump and watch YouTube or read Reddit. It’s something that I struggle with on a constant basis, and have been recently overcoming. So, I decided to lay out what I do to keep going and fight that urge to just become a lump in a chair.

Schedule, schedule, schedule!

Setting a schedule and sticking to it is super important unless you’re already an organized, motivated sort of person. There are lots of ways to do this, here’s a couple suggestions:

  • Use a ticketing system. There are a number out there that are free and can be set up on a small webserver. Mantis and Redmine are two good examples. Bitbucket and Github both have ticket systems too if you’re already using them.
  • Use a task manager or todo list system. Trello is a good example.

What I’m currently using Habit Streak Pro, it’s an app based on Jerry Seinfeld’s “Don’t break the chain” methodology. It’s a simple thing where you set a small list of things to do each day, and you track how many days in a row you do them. Think of your chain as a sick combo you don’t want to stop.

Even if you do a tiny little bit every day, you will get shit done. Moreso, the idea of breaking the chain will feel worse and worse over time.

Once that happens, congratulations! You’ve just formed a good habit.

It’s all about the music, man.

I have a super active inner monologue going on in my head. It tends to make me switch gears rapidly. I find listening to music gives me an instant laser focus when working on code, drawing a game character, or writing blog entries.

There are definitely a lot of studies out there that state how music improves concentration, especially in the workplace.

Aside from concentration, I’ve found that music has given me ideas on things I could implement in my games, or at the very given me cool gameplay concepts that I jot down. This seems to happen the most often when I listen to soundtracks to movies and games. I think it has to do more with non-vocal music letting my imagination fill in the context for the music.

Seriously, try it. Listen to this song from the movie ‘Gladiator’:

Think of an epic strategy game, or a game where you’re battling a giant like in Shadow of the Colossus. A ton of neat scenes will come to mind.

Do a game jam for a kick in the pants.

Game Jams are my way of getting out of a slump. If I find something I’m working on just isn’t working out, then I’ll join a game jam. Jams encourage you to work very creatively, you don’t have time to think, you just sit down and make whatever comes to mind.

Not only will you make a game that you didn’t have a few days ago, people will be playing it and giving you feedback. You’ll also have learned new skills that you can use on your longer term work.

Share every tiny little bit of progress.

Although I’m pretty bad for posting on this blog, I actually do try to post about what I’m doing on a regular basis to Facebook. Just putting screenshots and text updates up for my friends and family is a solid motivator.

Putting updates online where other people will read it helps to set a mental set of obligations. It’s very easy to rationalize being lazy to myself, but I find it WAY harder to do that with other people. Even though I know they aren’t judging me, I still want to avoid being judged, and so I keep posting updates to let the world know I have stopped. It’s weird, but it works.

If you don’t want to post updates on Facebook, you can post on /r/GameDev’s Screenshot Saturday, or start a devlog on the TIGSource forums.

I also post to Twitter, but I usually only get really active during game jams.

Caffeine in the day, exercise in the evening.

I love coffee, it’s a hot bitter drink that slaps me in the face each morning. Caffeine (in moderation) increases focus and keeps you awake through the day. It’s a real struggle to get going without it… Maybe that’s the addiction talking.

Of course, when I come home from work, I don’t chug coffee to keep going in the evening. That’s just asking for a sleepless night and a crappy next day. Instead, I’ll hop on my exercise bike for short burst to bring up my heart rate for a while.

It’s a great pick-me-up, and switching focus to the bike for a short time is a great way to tackle a tough problem. Walking away for a problem for a short time can help you regroup and come up with a solution you wouldn’t find by staring at your screen.

I actually find exercise is a much better way to bring up my energy level and to focus, but I’m also very out of shape, so I’ll take the daytime coffee so I don’t have to be covered in sweat while I work.

When all else fails, a quick blast of cold will wake you up. During our Canadian winters, I turn down the heat a little beyond comfortable to stay alert. In warmer weather a splash of cold water or a cold shower will work almost as well.

Conclusion

So, hopefully by sharing the little things I do to keep going, you’ll have picked something up that will do the same for you. That being said, nothing here will help you if you don’t really want to work on your side projects. If you find that’s the case, drop it and pick something new. There’s no shame in starting fresh.

Anyway, thanks for reading, and stop procrastinating!

Jerk Driver Post Mortem

Introduction

Hey folks! Now that Jerk Driver has wrapped up and the jam voting is almost finished, I figured I would write up the things that worked and didn’t work during development.

Things that worked

  • The overall gameplay – It’s a pretty fun game to dick around in for a while. There’s a lot of joy that can come from just jumping a car off a ramp into a trampoline with your middle finger out.
  • Cutting features quickly – I had a lot of big ideas early on that I tried quickly, but didn’t pan out immediately, so I cut them. This is the biggest trick when participating game jam: Lower the scope of your game until it’s realistic. A very large number of jam games fail because they aimed too high and tried to stick to it. That results in broken and unfinished games with one or two cool things about them. Never get caught in the sunk costs fallacy (http://en.wikipedia.org/wiki/Sunk_costs).
  • Unity – Fuck I love Unity. It makes stupidly complex things SO easy to do. Same goes with C#, it’s such a clean language. I work with other languages and tools in my day job, so it’s such a joy to spend some serious time using Unity.
  • Magix Music Maker – I use this for all of my game jams. It lets you take simple pre-built loops and mix them together into unique music tracks. It even figures out some of the timings for you. I barely know anything about music, so this lets me create stuff that doesn’t sound like complete garbage. A sound engineer friend pointed out that the drums in my main track don’t loop right, but it’s close enough… It’s definitely not perfect, but for a guy like me, it’s great. (Check it out here: http://www.magix.com/ca/music-maker/)
  • Probuilder – A tool for Unity that lets you build rough 3D models inside of the Unity editor. I’m no 3D modeler, so having a tool easy enough for me to use made the game possible to make. (Check it out here: http://www.protoolsforunity3d.com/probuilder/)
  • Easy Roads 3D and Edy’s vehicle physics – They let me focus on things other than vehicle controls and road splines. Edy’s vehicle physics gives you a nice physics based vehicle system, and Easy Roads lets you create complex road ways without having to model anything. (Check out Easy Roads here: http://www.unityterraintools.com/demovid.php and check out Edy’s Vehicle Physics here: http://www.edy.es/dev/vehicle-physics/)
  • The dumb jokes – I think this only really worked for me personally, but the dumb jokes and references make the game fun to keep developing. I easily burned like half an hour playing the game once I had the middle finger and fart horn in the game. Everyone I showed the game to in person just kind of smiled politely while probably wondering if I’d gone simple.
  • Twitter – This was my main way of promoting the game and it pretty well. It also let me communicate with other folks making games or doing LPs easily. That said, it didn’t get me a lot of votes or anything, but it was still useful in getting the word out.

Things that didn’t work:

  • Easy Roads 3D and Edy’s vehicle physics – I know I put these as things that worked, but they’re also things that didn’t work… Let me explain. This was my first time using both tools, so I had to learn them as I went along.With Easy Roads, I received a beta version around mid day Saturday, which was awesome, but I had to burn time learning how to use the new tools and also dealing with all of the beta bugs. I lost count of the amount of times I had to delete and restart my road systems because something broke. It worked out in the end, but it could have easily screwed me over.With Edy’s Vehicle physics, there were a few times I had to make changes to it’s source code to make it do what I wanted it to. It’s source code is also in JavaScript, and my source was in C#, so flipping back and forth between the two was frustrating at times. You should never use JavaScript in Unity by the way, just learn C# and you will be happier for it. It’s not hard. Aside from that, the tools prevented me from getting really crazy with the trick system I had in mind, if I ever build this into a full game, I will be writing my own vehicle physics system from scratch so I can do whatever I want.
  • The trick system – I wanted to have all sorts of crazy tricks and things like grinding on rails. That whole idea was too ambitious, and it cost me time that I should have spent elsewhere.
  • The traffic system – I wanted to write a somewhat complex traffic system, but I had to scrap it really fast because having 30 plus cars dynamically handling traffic flow ruined the game’s performance, and I didn’t have time to make it actually run well. Traffic in the final build just follows way-points and only stops when the player or another car is in the way. I also kind of cheated and just deleted most cars that caused traffic jams.
  • The time spent on my dumb jokes – I burned a crazy amount of time on that weird Slenderman gag, and I think I’m the only person who finds it funny. I spent way less time on the giraffe and the Tanooki tail after that.
  • My “artwork” – Like I said before, I’m no 3D modeler, and it shows. Most of the models are super rough and barely resemble what they’re supposed to be. My texture work was also pretty bad. I utterly hate that grass texture, it’s everywhere and it’s super gross!

About the jam in general

  • Game Jolt – Game Jolt kind of dropped the ball here. The game jam voting system is pretty broken, you can’t vote for games on the actual game’s page, you have to go to the game’s jam page, which is entirely separate. There wasn’t even an official link to the jam pages until about halfway through Monday. It was kind of frustrating to see lots of people playing my game, but next to no game jam votes.With that said, the folks at Game Jolt acknowledged all of the problems and have said that they are going to make game jam voting smoother in the future. So, good on them for working to make things better.
  • Pewdiepie – This was HIS game jam and he did next to nothing to promote it! He posted one video letting people know that it was happening, and after that, just occasional Twitter posts. The guy gets millions of views on his videos, and he’ll probably make crazy amounts of cash for his videos showcasing the winning jam entries. The least he could have done was encourage people to vote and show them the correct way to vote.I’ve come across games that had ZERO votes! For people who worked their asses off for an entire weekend, that’s heart breaking. Luckily there are other folks helping to promote the games like Jupiter Hadley, newbornkillik, and Selzier. They’ve been showcasing tons of jam games, and deserve props for what they’ve done.

In the future

  • I won’t be using untested beta products.
  • I will probably never do another Game Jolt jam.
  • I will waste less time on dumb one-off gags.
  • This wasn’t really mentioned above, but I plan on using analytics in my future jam games so that I can have some usage statistics in my games going forward.

In closing

So to end this off, I want to say thanks to everyone that played Jerk Driver, and I want to say double thanks to the people that actually voted on it! I had a blast making the game, and you can expect more things from me in the future.