Benjamin San Souci

LD 40

Oh no! Zombies! A game definitely about the Zombies.

Wow this was super fun! Oh no! Zombies! is the best game we've ever made, by far.

First time LD-ers here, and we had a blast. Didn't think we'd finish in time but actually got most of the game done a couple hours before the deadline.

Screen Shot 2017-12-04 at 6.06.38 PM.png

We developed the game compiling it to native, so we weren't sure how it'd perform on web. Luckily it ended up being pretty good, we didn't have to optimize anything!

We're using a new language called Reason and a custom drawing stack on top of GL we've been building over the past year. This language, tooling and drawing library allows us to compile our code to native, byte code and JS. It's a super lightweight stack, the whole JS bundle minified is 112kb! If you're interested, you can check it out Reprocessing.

Working on publishing an OS X binary right now :)

How We Balanced Our Game, Oh No! Zombies

Oh No! Zombies! is still deeeeeeeefinitly a game about the zombies and nothing else. You should try it to get what I mean.

I think all the stars aligned for us, making this LD very fun and rewarding. He're a small timeline of what we did and how we approach some of the game design problems we were facing.

ezgif.com-optimize.gif

We started with making sure we could have a person you controlled, that would feel good to move around and shoot. The inspiration for the shooting-only-in-4-directions-with-arrow-keys came from Binding of Isaac, which meant one could play the game on a laptop (without a mouse). We had some idea as to how to do zombies so we postponed it and implemented a system that would allow us to program different kinds of bullet patterns for each gun instead. While doing so we basically came up with the 8 kinds of guns in the game. Once we had the shooting and movement it was clear we needed to get enemies in so we could really play test. Everything is a rectangle, so collision detection was easy.

ezgif.com-optimize (1).gif

@schmavery had the most brilliant idea to get the zombie's "AI" up and going: - generate a random error vector - accumulate the error into the velocity of the zombie - move the zombie some amount towards the player + the error

This was very easy to code and lead to great emergent behaviors. We allowed the error vector to become as big as the directional one (towards the player), which meant sometimes the normal zombies would not runs towards you, they'd wander around and then... suddenly and randomly, THEY'D ATTACK YOU. It worked great.

ezgif.com-optimize (2).gif

We decided to have 3 kinds of zombies, the normal dude, the fast dude and the big dude. The fast zombie's purpose was to be a more immediate danger, because you'd barely be able to run away. The big zombie's purpose was to be a bigger challenge, he does more damage and has a lot more health, but in contrast he's not such an immediate danger. If you leave the big zombies around for too long you won't have enough time to get rid of them before the next wave. Going back to our homing behavior, it definitely needed tweaking for the fast and fat zombies. We realize that we could tweak the max magnitude of the error vector to get very different behaviors.

Next post we'll delve into the tooling details in some future post. In the meantime, head over to Oh No! Zombies! we'd love to hear your opinion!

LD 41

My Dear Farm - Farm simulator + Horror

glah.gif

Have you ever dreamed of playing an eerie farming simulator? Well either way you should play this one. We hope you'll enjoy your time on the quiet farm.

https://ldjam.com/events/ludum-dare/41/my-dear-farm

My Dear Farm - Instant feedback when coding

Our game My Dear Farm mixes farming simulator mechanics with story-driven horror aspects. This left us with way too much to do. Luckily our development setup allowed us to iterate extremely fast on visuals and mechanics.

We used ReasonML as a programming language and Reprocessing as our drawing library. Reprocessing comes with multi-file hot-reloading, which means we can leave the game running and make any edits to the files and see them pop in without losing the state of the game.

Here's an example where I'm tweaking the text of the interaction (the game updates when I save the text file)

hotreloading-demo1.gif

We can actually update most things from our game like this. Below is an example of me adding a whole new action for the seeds, which are game objects on the scene. I'm just adding another case saying "if you're not holding anything and you're facing the PickUp(Seed) action, then show this text" and same for the code actually updating what you're carrying. Then you can magically pick up seeds, like you can pick up water. Everything Just Works™

hotreloading-demo2.gif

Here's a more fancy example where I git checkout master to get changes my friend made, and the game update correctly.

hotreloading-demo3.gif

The last cool thing I'll mention about Reprocessing is that we developed this entire game compiling it to bytecode, but then, without needing to touch anything, compiled it to JS and published it that way. And this whole thing is just a drawing library compiled to very normal JS using webgl, it's a super thin stack compared to alternatives.

Hope you enjoyed this! The code is all on GitHub.

Would love to hear about what you think about My Dear Farm.