Weave neural circuits to create primitive creatures and explore an alien world.
[ Online Demo | Join Beta ]
I bit off a lot to chew with this Kickstarter. I tried to limit things by breaking off the main “game” into the Explore Mode stretch goal (which we did not, unfortunately, hit) and have the core goal be just a functional creature+brain editor. But it’s a tough sell when I don’t have an easy answer for “but what do you do?”.
Even if I don’t have the design for what happens 100% nailed down, there’s gonna need to be a world for things to happen in. Up til now, I’ve been making the maps by drawing them by hand in Inkscape, which is a fairly labor-intensive process.
Enter procedural generation, a method of making maps (along with other things) by just setting up general rules and having the computer randomly put it together by following those rules. The biggest advantage to procedural generation is that once you set it up, you can make essentially unlimited unique content. The biggest disadvantage is that the vast majority of it is going to be less interesting than if you did it by hand.
But Crescent Loom’s focus is on the creatures, not the world. I just need somewhere to put them, and procedural generation excels at filling that specific need.
Long story short, importing Voronoi tessellations into Monkey X and setting up procedural generation required a lot of tedious math. Rather than subject you to that, here’s a whole buncha screenshots + commentary that I’ll share with you like they’re vacation photos:
Whoop, day late. I’m trying to stick to my every-other Monday schedule for these, but it slipped a bit this time.
Continued tweaking cell properties. It’s now possible to make chains of pacemakers inhibiting each other, which is a type of circuit you see all the time in nature:
I sank a few days into trying to add the ability to pick limbs back up after you’d placed them down. Unfortunately, in my rush to get something playable in time for the Kickstarter campaign, I’d cobbled together a super janky coordinate system that immediately crumbled in the face of anything new (I could relate). Behold my struggle in guess-and-checking my way through trigonometry:
Eventually got it sorted, but it was a classic example of what happens when you code fast instead of coding well.
Changing how the position of limbs are stored meant that all the creatures from the original demo will no longer work, so I then spent a bit of time re-adding support for AI creatures. They’re pretty.
One of my methods of procrastination is to work on the art. The cells really needed to be more recognizable, so I started designing fancy, ornate cells inspired by elaborate fabric patterns. This ended up adding a lot of visual noise to the brains. I ended up making the call to return to simple symbols and shapes to make the overall design more readable.
In trying to decide what style to go with, I came up against the fact that Crescent Loom does not have a strong, unifying artistic theme (check out this talk by the creative lead of Darkest Dungeon for why this is super important).
So far, a lot of the aesthetic decisions I’ve made in Crescent Loom have been in response to technical constraints: my library can only handle straight lines and perfect circles from Inkscape, so there’s no curved lines. I haven’t figured out how add textures, so colors are flat (spiced up with semitransparent borders).
This happens to be in line with my design goals of making the game visually friendly and accessible, but I think it’s suffering for a lack of having a consistent vision for what the creatures and world should end up looking like.
This is especially relevant given that last night I set up an art pipeline where I can just draw limbs in Inkscape and they’ll show up as physics objects:
So now I can make more biological-looking limbs, as opposed to the current rectangles-and-circles aesthetic that I’ve had since the beginning:
Expect some creatures-eating-creatures action in the next update. >:)
My brother recently pointed out that the gameplay of Crescent Loom seems to be split. Do people make creatures that:
– are controlled by the player,
– can move and navigate on their own?
The former would work better in a traditional video game setting where you can explore some kind of world. Emphasis would be on making a single general-purpose creature to act as your avatar.
The latter would require concise challenges where you flip back and forth between editing a creature and watching it go (otherwise you’d spend 10-15 minutes just watching it swim around, which sorta defeats the point of it being a game).
Up til now, I’ve assumed that I’d split the difference it’d end up as an open-world game where players would have limited control over their creatures, but most of the muscle coordination would have to be set up beforehand. I’m now afraid that this doesn’t sufficiently take advantage of the most interesting part of the game: creature creation.
IN ANY CASE, I need some way to efficiently make maps so I don’t have to make each one by hand. I recently stumbled upon Voronoi Tessellations, which (among other things) are a fast way to get interesting cave-like walls. An extra bonus is that they fit with the current low-poly aesthetic of the game. Gonna try to get procedurally-generated maps up and running this next weekend.
Some new features, fixed old code, searching for a solid artistic & design vision, still gotta apply for more funding sources to keep the ball rolling after the KS.
Time is strange. It feels like the changes I make every day are small, but gradually they accumulate into something bigger than it seems like I could make. And then I realize how little time I have left, and the good feelings about that turn back to anxious work.
Last weekend, I showcased Crescent Loom at the Portland Mercury’s new tech/gaming convention: Betacon. It was cool event for me for a few reasons:
It got me to focus on getting a polished build put together, fixing a lot of the UI things that I’d been putting off (e.g. finishing the design, seamlessly switching between body and brain editing, making an info panel for the neurons)
But from the start, about half the people picking up the game for the first time would put their muscles down like this:
Which makes sense! It’s a lot more intuitive that a set of muscles would run up along an arm rather than, say, between the creature’s ankles. A better design for the game would be one where people’s natural intuition is the correct thing to do.
It just so happened that I’d also been wrestling with a different design problem; there wasn’t currently a good way to get a limb to turn in a specific direction on muscle activation; the muscles would tend to get bound-up since they didn’t wrap along with the limb:
SO! I decided to try and kill two birds with one stone and make muscle attachment points run up alongside each limb, rather than having a free-form “attach anything to anywhere” system. This has created a standardized way to place muscles that produces a predictable motion, and is far less likely to get bound up:
I’m pretty pleased with this solution, not gonna lie. Identifying problems and finding clever ways to solve them is one of the most fun processes in game dev. Of course, this raises its own problems (can you attach any hardpoint to any hardpoint?)…
Crescent Loom won the Betacon award for “Most Innovative”! I’ve never won an award for my games before, so that was PRETTY SLICK.
I participated in the March for Science, and had a brief chat with a scientist/photographer named Tyler Hulett who put together a snapshot-documentary on the march.
You can see it on Vimeo; my beautiful face is at the 5-minute mark.
Now, here’s the current to-do list on my desktop:
You’ll note the lack of, y’know, actual development on this list. I am probably one of the slowest writers I know and there is SO MUCH writing you need to do in order to manage a game project and fund thyself.
I think I need to find a writer/PR/publisher. I’m spread thin and that’s the area where I’m least-efficient. Grants especially require a specialized skillset that I simply don’t have. Problem is, even with the KS money, the project is already bare-bones budget-wise. So, dunno how that’ll turn out. Maybe I’ll just learn to write faster and care less about typeos.
Oof, it’s already been a month since the Kickstater ended? Time is flying by, it feels like I barely get anything done each individual day, but looking back I’m always surprised by how much I did.
Quick note: I’ll be showing Crescent Loom at Betacon in Portland this weekend! (Apr 15-16) If you wanna see how the game’s coming along, that’ll the place to say hi!
The biggest visual difference is that I finally added a user interface! You can now click buttons instead of having to tab through a thousand different options:
I looked at a handful of other construction games as reference points. I think it’s pretty obvious which one of these I stole the most from:
Kerbal Space Program suffers from presenting too much information (its pop-ups are a mess) and Spore suffers from being simple to the point of uninteresting (though it is cute & approachable, which is important).
I tried to strike the same balance as Besiege, and limited icons to horizontal bars on the top and bottoms of the screen. If more needs to be shown, I can do that in a pop-up when people mouseover or click the icon.
The most interesting design decision was how to incorporate the brain window. I didn’t want a separate half of the screen anymore, so I figured to go for a picture-in-picture approach.
Two options presented themselves to me:
(In either case, clicking on the brain would embiggen it to take up half the screen.)
I asked Twitter, and people were pretty enthusiastic about putting it on the creature itself, so that’s what I did. I might set the other mode as an option, because I think there are cases when you’d want to clearly see what’s happening without it taking up most of the screen. Something for Future Wick to do.
Turned out that simulating the ion channels opening and closing along each neuronal tile in a scripting language (which is more flexible than the main “engine” code, but slower) was too computationally intensive, so I simplified the ion channel scripts to only run once during setup. Here’s the ion channel that responds to a keyboard hit. Any cell with this becomes thirty times more permeable to sodium while the Q key is pressed:
Finally, there was a bunch of backend stuff I finished up doing as a consequence of the new way I’m simulating neurons. The easiest way of saving all the neurons + ion channels was actually save these ion channel scripts in the save file and running them on loading the creature.
Ugh, why do I reinvent the wheel every time I make a new user interface. TBH, most of my week was ironing out the logic of how menus and icons arrange themselves. NOTE TO FUTURE WICK: text wrapping has been solved a thousand times. If you find yourself trying to do it again, don’t. Use a library that doesn’t have all the bugs your sleep-deprived brain decided would be fun to add.
Decided that a bi-weekly update schedule’d be better to avoid spamming the email lists, which is why I skipped sending out an update last week (but I did publish a postmortem on the campaign – it took a quite unusual path!):
So what’s been happening in the last two weeks? Looking back, a suprising amount given how slow things feel on any particular day.
First off, I’ve been redesigning the creatures to make them feel more organic and less robot-like. Here’s the concept art:
And once I tweaked the drag physics (edges that are facing other parts aren’t included in the drag calculation, and thanks to Benjamin Morrison springs are now damped) and added non-rectangular pieces, I was pleased to discover that it was a *lot* easier to make things swim & steer!
So pretty. I spent way too long just cruising around as this lil guy.
I’ve expanded the scripting language implementation from last update to maps + neurons, though it’s not quite done yet. It’s a lot more work than it sounds, since I have to code each function in triplicate. Wish there was an easier way. :/
Speaking of neurons, I spend last week visiting Gabriel Barello (a computational neuroscientist math friend) in Eugene and he hammered out the solution (several, actually) for simulating actual electrical currents flowing through a neuron in real time:
This is just fantastic. It’s so so much more accurate than the janky version I had before, is prettier, and allows for a lot more nuance.
Finally, I’m almost done with my application to Stugan which, if accepted, will let me work on CL in Sweden for the summer. This would be a rad opportunity — not only is it a great focused work environment, but meeting + working alongside other devs is important if I want to keep growing this weird game/science independent career of mine.
Hi! Quick intro: My name is Wick, I’m a neuroscientist / solo indie game dev, and I just ran my second successful Kickstarter campaign. The game is called Crescent Loom; players build creatures, weave brains, and explore an underwater ecosystem.
Common wisdom says that most of the time campaigns see a big spike at the start, have a big plateau in the middle, and another spike at the end.
Crescent Loom… did not follow that pattern.
What happened? Lemme back up and give some context to what things were like right before that huge jump.
(I hope it’s not too tacky to call these wicklogs instead of updates. It makes me feel sorta like a smurf to put my name on everything)
So! The Kickstarter gave eight months to make a game. This is doable. I can do this. Hoo boy.
In the demo, I have all the content (levels, cell behaviors, body parts) hard-coded in the game’s files. It’s a quick-and-dirty way to get things working, but not a great way to structure a game long-term since you need to recompile everything whenever you make any sort of change or addition (and it’s hard for non-coders to make contributions).
A better way is to load external files. Games already do this for art and music, but the way this happens with code is generally through scripting languages. These are code files that are loaded and run on-the-fly, like so:
Monkey X has a custom scripting language called mini c thanks to a few programmers who decided to do the impossible task (for me, at least) of writing it from scratch. So rather than having to cobble something together myself, it was just an afternoon of downloading their modules and starting to integrate it into my game.
Steam: Crescent Loom got Greenlit (which is an arbitrary and brutal internet popularity contest), so yay! But I’ve run into a few snags due to already being associated with Starship Rubicon on the Steam backend. Their system is confused since I’m not running the finances on that project, but will be for CL. Emailed ’em.
itch.io: I’ve set up a way for people to still preorder the game & join the beta via itch.io. I’d like to eventually completely host the online demo through them, but I haven’t yet figured out how to save/load creatures to my database from an external source. Gonna have to get that done for the desktop versions, anyway.
Funding: I’m looking into applying for funding beyond the Kickstarter, which generally falls into one of three categories: 1) Publisher! 2) Investors! 3) Government Grants! (#4 aka rich friends is not reliable) All of these are gonna be brave new worlds for me, so that’ll be fun.
(there’s a distressing lack of programming on that list. I need to remind myself that Production is real work too, and super important to get right)
nbd, just achieved a years-long dream of mine to be able to work on a neuroscience video game and finally get some basic neuroscience into the public consciousness. I’M JUST A LITTLE ECSTATIC.
Also, I ran the first creature tournament! Eight creatures, competing for a $250-tier laser-cut neuron art panel.
Congrats to the winner! What a strange upset.
Spent wayyyy too long on it, but it looks so much better than the old one. Looked at The King’s Bird for inspiration.
More created creatures! Did some more graphical work to bring them to life. Since having a big ol’ eye in the center was confusing since eyes are a literal organ that matter ingame, I replaced it with a pulsing heartbeat. On the todo list is to maybe link it up with a pacemaker neuron in the center of the brain to really drive home the brain/body connection.
Oh also now there is kelp. And little blue faeries. Since all the art in the game is vector-based, I’ve been looking for ways to show off its unique capabilities. Realtime point-by-point modification of graphics is not something I see a lot of games do, so I’m excited to keep exploring it.
There are hookshots now! Good way to get around…
…and to catch prey.
MY GAME IS PRETTY DO YOU THINK IT’S PRETTY I THINK IT’S PRETTY