Ten minute game jam!

What’s the easiest way to make a short animated gif on OS X so that I can share some progress?

I think I used this on Windows once or twice, and it seems to have a Mac version: http://recordit.co/

Thanks! I’m in the middle of a boring part of implementation… need to push through it to get to the more fun parts.

God damn Fishbreath. Way to destroy the curve.

Ug, me too. I was just going to use a plain ol FSM (not of the flying spaghetti variation) but then I discovered Harel State Charts and a corresponding library to go with it. Awesome, I thought. Unfortunately the library wasn’t updated for the current version of another library it depends on and that I use but then I discovered a fork that was updated and cleaned up. Except it’s completely broken from what I can tell.

I love clojurescript but debugging it is a nightmare, especially when it’s somebody else’s code. In a working state this library would solve a lot of my issues, and be a great springboard for new projects as well, but ug. So not fun to try and fix. At least clojure/script libraries all tend to be small and focused, so it’s not infeasible to get this fixed.

What do you guys do for GUI interaction and managing its state? Just brute force it? FSM?

It comes from a very different model, but I find state machine behavior much more intuitively implemented via cooperative multitasking. You’ll see this called by a few other names, such as fibers, generators (in Python), or coroutines. The basic idea is that when a task needs to do something asynchronously, rather than changing state so that it can resume by re-entering the function at the top, it just yields and resumes inline.

http1 = query('http://www.google.com?search=halo')
while (http.waiting())
{
    yeild()
}
if (http1.success())
{
    // handle success
}

Have you checked out this clojurescript library?

http://thi.ng

The author was active in he Processing community for years, as toxi. He’s done amazing work.

This is handled nicely in one of the libraries I am using (re-frame) plus the native language itself. It’s great at the micro level, but I am trying to solve issues at a higher level. Integrating multiple FSM together which itself needs a type of FSM. Hence my interest in Harel Statecharts, which are FSM but with concurrency and a hierarchical structure.

I love rendering these issues as data, which is a central tenet in clojure. Data is greater than code and the code itself is just data. See https://github.com/jakesgordon/javascript-state-machine, which is a library I have used to great effect before.

I wanted to do something similar in Clojurescript, which has plenty of FSM libraries, but I am getting distracted by Harel Statecharts. They look like a perfect fit for my issues. Obviously this is turning into a little research project itself, instead of completing my game.

Yeah, I have tried parts, like thi.ng/strf and thi.ng/validate before. Good stuff, though a lot of it is way beyond me.

I had some trouble with it. Giphy makes an app that allows you to save locally or on giphy which worked well. It’s in the Mac App Store for free.

Today I implemented all of the logic for the people to walk in either direction, stand still, or appear seated (prob will change when seats are in the game).

It’s still all procedurally generated, which made it a bit of a pain to tweak and get right.

Walking

They walk at different speeds. Passengers will get annoyed if they’re in a line behind somebody walking more slowly than they are.

For the walking, I created an Oscillator class. Each person’s legs have an instance of that class. It accepts a person-specific speed and starting angle and then uses the delta-time from the game engine to calculate cosine values that are multiplied against the maximum angle allowed for leg rotation. LOVE2D has a convenient ability to push() and pop() a matrix to allow for easy translation and rotation in component-specific space. I’m used to that logic from Processing, so it was a breeze to use it here.

Standing still

"Seated"

Next up, I need to add arms and allow them to hold their tickets and drag/carry their carry-on bags. Some of them will have bags that are too big to fit in the overhead bin… :)

Once the person logic is complete, then I can move on to creating the game environment and implementing the gameplay logic.

I am inspired by all these creativity and talent in this thread!

I got in a warrior type unit that charges at enemies and explodes, taking a bunch of them out.

Then I got in a simple level tool that lets me define a basic algorithm for how frequently different types of challenges hit the table, as well as how to increase the tension over a set period of time. My hope is to string together a set of these data nodes, having players progress through increasingly difficult levels trying to accomplish something before the ramp up of difficulty within each level kills them. To make sure I’m on the right track, I made a level to test out how the game feels at really high difficulties to make sure this is building up to something fun. Here’s some gifs of that:

I like that it’s difficult to keep up with everything. You have to be moving your crowd to avoid lasers, explosions, and enemies, while also remembering to transform your crowd into more spawners and also remembering to get out warriors when you can to fight off the enemies. That tension feels a bit like in an RTS.

There’s not enough in the game yet, though. It feels like it needs even more stuff grabbing your attention, and more ways to perform at a higher caliber. I have some ideas for some new experiments to try next week. My next goal is to make this high difficulty level something I enjoy playing over and over, then I’ll figure out how to strip it back and introduce it in a way that’s fun.

I added a few quality of life improvements (e.g. highlight resources that can be shipped, hovering over resource shows how valuable the best current shipment is, add button to restart current map). Then wrote a short manual that no player will ever read :-/

The main thing that’s missing from the original vision is the leaderboard. But other than that, it should be in a pretty playable state. Or so it feels to me, maybe it’s actually totally incomprehensible nonsense to everyone else :) If anyone wants to give this version a spin, it’s at: https://www.snellman.net/tmp/10min/

The “Daily Challenge” isn’t actually yet “daily”. But it’s at least a stable map, in case anyone feels competitive. (My best score there is a final income of $558/minute).

I’m reading it right now! Nice work!

I did $237/min on the daily map. Nifty! You really captured the spirit of tycoon games and the spirit of ‘plays in 10 minutes’.

It’s a fun puzzle. I played the same map a bunch before finally making a profit. I kept just buying all the lines in the order that looked best, accruing tons of debt, and never being able to climb out of it. I remembered in your video how slow you were with expansion so I tried playing such that I only took debt for my first build and my profit per minute by game end went WAY up.

I really like the mouse-over popups telling you how much a resource will be worth. It helped a lot. I think a popup when building rails for how much the debt will cost you per minute would also be very helpful.

Thanks, phrasing it in terms of interest per minute rather than just the raw amount of debt is a great idea.

I got $367! Not sure of the strategy, except to build slowly enough not to take on too much debt. Can the routes be manipulated to generate more revenue? Not sure!

@jsnell: In 10-minute tycoon, is it the case that once you’ve clicked all the resources, there’s nothing else you can do to affect the outcome? Building new track isn’t effective, because the routes are all already calculated. Is that right?

That’s correct. (And something I didn’t realize to mention in the manual, despite being a very important point. Thanks). Once everything has been shipped, there’s nothing to do except press the fast forward button.

Wow. Two legitimate game entries and both are amazing. Very cool @jsnell. I really like the look and concept.

I’m feeling disenchanted with my crowd game. Usually when I’m disenchanted I either need to kill the game or take a long break. I don’t want to do either of those with this game, so I did a bunch of work yesterday to get it presentable enough that I’m calling it done. At least for now.

You can play it here. It takes a second to load.

Tell me what you think. There’s 4 levels (after the tutorial) of increasing difficulty. When I’m successful it takes around 3 minutes to complete. I think it’s hard enough that you won’t succeed on your first try, but I’d be curious what others experience since I haven’t playtested it with others at all and have no context for how difficult it is for people who aren’t me. (Or, for that matter, if the game is simple enough to have such a minimal tutorial. Did it make sense?)

Personally I find the combination of simple strategy-like gameplay with arcade-y movement compelling, but the way the game swings to be really devastating. Mostly, dramatic moments are either close calls or dramatic losses. I don’t find many situations of dramatic comebacks. I added in the random crowd drops late in an attempt to add come-from-behind moments and it helped a lot, but these moments are still really rare in my playtesting. I also changed the cost of spawners to increase with each spawner. Without this, the rate of growth is so exponential that to make the game consistently difficult it’s impossible to come back. Basically, if you move down the exponential curve but the difficulty is slightly ahead on it, you’ll never really catch back up.

So I’m happy to be done with it and happy to have done it, but at the moment not terribly interested in exploring it more.