I had tons of fun this Ludum Dare, more so than previous ones.

The reason for this is because I had the ability to make everything in 3D this time, as opposed to being stuck with Pixel Art because I didn’t have the 3D software I know and love.

Guess I’ll do a quick good/bad thing now.

The good

  • I did everything in 3D, this resulted in nice graphics and was, for me personally as I was taught 3D art in school, a much faster and easier process than if I’d done stuff in 2D/Pixel Arted.
  • I had the initial idea fairly quickly, just build a third person game and then throw unconventional weapons into it, this changed quickly into something more marshmallow focused when I decided to change the setting to an “in the woods” type deal and my dad suggested marshmallows. Thanks dad! (In previous Ludum Dares I had always wasted the first day trying to come with something good, not this time!)
  • Using Vertex coloring instead of textures saved me a lot of hassle. Totally gonna stick with this again next time!
  • Everything went so well I even had time to put in a small boss fight!

 

The bad

  • Performance wasn’t the best for some people and the game started stuttering after a while on lower-end machines or on the web player, this was mainly due to the large amount of objects I was spawning as you throw things and zombies spawn. (The zombie spawning vending machines initially didn’t have a spawn limit!) Aside from performance being low after a while, it started off as pretty terrible on Android, my reasonably high-end Nexus 5 couldn’t even run the game at 60fps! So next time I’ll try and minimize the amount of skinned meshes too I think.
  • The camera was called “Horrible” multiple times. This is mainly because I was trying to go for a sort of Super Mario 64-type camera, but I realize a lot of people didn’t like that camera either, and in that game you still had SOME degree of control over it, I should’ve added something that gave you some level of control instead of just automating it all the way through. It does have controls on it but I for some reason chose to only let those work on an Xbox 360 controller.
  • The sounds weren’t that great. They were cobbled together in the last hour or so I worked on it, I should make more time for proper audio next time.

 

The (art) process

This was the first Ludum Dare I did in 3D, I’ve made countless 3D prototypes and games in the past, just never for LD or public release of some kind (yet).

It started off pretty simple, I needed a character so I made a basic character

ss (2015-04-18 at 09.56.38)

 

ss (2015-04-18 at 09.57.39)

 

I sort of liked the animal crossing-ness of him so I decided he was good enough for my game and made him move for a bit

Feel

 

I liked the feel I had going, but wasn’t too sure about what to do with the camera, it had to follow him, right?

Feel2

He’s still jumping here but I decided to scrap that as it’d make the animation system more complex and require an extra animation. :)

 

However, later, I noticed some weird flippy-ness if you went too close to it so I made it follow the character loosely position-wise, also preventing from the character moving too far away and becoming too small on screen.

When I had him moving I started on a static zombie, then got some bones in him and made a quick animation like so

QuickAnimation2

It’s blending between running and idle based on the magnitude of the input vector. Was super easy to set up!

 

After I had that I started messing with the zombie, giving it bones and animating it.

ss (2015-04-23 at 11.51.27)

 

That sorta worked well, all he had was a walking animation but it was nice. (Later I added getting-hit and dying animations.)

I figured it’d be cooler if he had some mouth movement or something so I started messing with blendshapes

ss (2015-04-23 at 11.56.27)

And then I figured, why not have the wolf blink? He is alive after all.

Blinkgif


The basic workflow for me was this:

  1. Model thing
  2. Put thing in Unity
  3. If all is well, scale is right and everything, go back to Maya and start vertex coloring it
  4. Back and forth with Unity to check if the colors look right with the lighting
  5. Colors right? If it’s not an animated object you can skip the rest and go straight to implementation, if not: Make his bones, but don’t skin him yet!
  6. Think of the blend shapes you want the thing to have, they need to be applied before the skinning so they don’t override each other.
  7. Skin the character to the bones and check if the weighting is correct, the auto skinning works pretty well usually but it always requires some small adjustments.
  8. Animate! Don’t worry about the speed of the animations too much as they’re usually not fast enough looking for in a game, I almost always end up speeding the animation up to some degree in Unity/Mecanim, then again that might just be my own incompetence in animation…
  9. Animate the blend shapes in unity! I usually find it easier to animate the values of the blend shapes in unity because it’s easier to get the timing right, here I do worry about the speed of the animation, but that might be because I can just set the fps of the animations individually. :)
  10. Automate as much as you can, animation wise! Saves on coding. For the zombies’s mouth movements I just had a basic loop in mecanim between 2 animation states, running in a separate layer on top of the base layer, on override, because blend shapes don’t override animations if you’ve implemented them before skinning the character or thing. Automation-wise I had to code in a specific random blinking part for the blinking, I might’ve looked into adding a new mecanim animation node thing for randomness but I didn’t want to waste time on such a small detail.

I won’t be going into any specifics of modelling and how to use programs because there’s plenty of tutorials for that on the web, this is just my workflow! :)

If you want to play Zombies ‘N’ Marshmallows, here’s the link:

http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=15287

Tags: ,


Leave a Reply

You must be logged in to post a comment.

[cache: storing page]