With the Kickstarter finished, it’s back to our regularly scheduled programming!
I am in the middle of a major graphics engine upgrade. This whole time I’ve been using fake HDR. Basically I divide every color by 2 when storing it in a texture, then multiply it by 2 whenever I read it from the texture. It works but you end up with lower color fidelity.
Now everything is done in full 64-bit floating point textures. Here’s an exaggerated before/after shot so you can see the difference. Notice the color banding on the left.
I was also skipping a few major steps of the usual recipe for bloom, namely downsampling and later resampling with a linear filter. The new bloom effect is much prettier. Here it is in action, along with some crazy geometry bugs I encountered while optimizing the vertex buffer code:
Lastly, I’m experimenting with a new effect for the slow-motion predictive block system:
Here we are folks, counting down the last remaining Kickstarter hours!
I’m happy to announce that regardless of the Kickstarter outcome, production of Lemma will continue.
To be honest, I originally planned to cancel everything if the campaign failed. I figured a failed Kickstarter would be a sign that people aren’t interested, and that I should cut my losses (nearly 4 years of work) and move on. But in the past month I realized a few things:
I was kind of shocked at first to find out that people love the game. I’m continually surprised and delighted that people can look past all the flaws and garner an enjoyable experience out of something I’ve created.
I overestimated the amount of work ahead of me. I thought people would blow through the demo in no time and complain about how short it was. The reality is, not a single Let’s Player has finished the demo in one video without a lot of editing. Some of that is due to frustrations with level design and controls, but a lot of it is just that people like to explore the world and figure things out for themselves, which is amazing. Armed with that knowledge, I’m much more confident that I can create the experience I want in a reasonable amount of time.
Running a successful Kickstarter takes a lot more than just a great vision with a solid prototype. I failed big-time in the PR department, partly due to lack of experience, and partly because I’m just bad at it. I make games, I don’t sell them.
With that in mind, I realize now that if a Kickstarter fails, it doesn’t necessarily mean the idea is not worth pursuing. Many failed campaigns later re-launch and go on to exceed their goals. (I won’t be doing that because I don’t want to take any more time away from development.)
Knowing all that, I’m confident that I can find the necessary resources to make this game happen even if we don’t reach our Kickstarter goal. It may take more time and money on my part, but it will happen!
In fact, it’s happening right now. I better get back to coding!
We are now in the midst of the final week of Kickstarter funding! With the campaign nearing the end, I thought I would give you another development update.
First, I spent a few days completely rewriting every bit of text in the game to support multiple languages. You can now change the language from this nifty selector on the main menu, and the whole game instantly switches:
Now all we have to do is translate ALL the things!
Next: I’ve been thinking hard about the phone mechanic, which is one of my favorite features in Lemma. I’m not aware of another game that does something similar. However, the execution leaves something to be desired. The phone conversations can not be skipped, and they can pop up right in the middle of your parkour flow, which gets old fast.
I’ve decided to add a new twist to the phone: signal towers. You will not be able to send or receive text messages unless you are near a signal tower, which means you could technically skip every phone conversation just by avoiding them.
Here’s a look at one of the signal towers, suitably abstracted to fit within the aesthetic of the world:
This also opens up new writing possibilities for me, because now the player can actually initiate the conversation instead of only responding. Making the conversations skippable also improves the experience for speedrunners, which is good for a parkour game!
More features are in the pipeline as well. I collected some reference images and did a rough sketch of the player for a character artist to get an idea of what she looks like.
As I’ve said before, redesigning the player character and animations is the primary purpose of this Kickstarter. So hopefully an artist will be able to take my very rough ideas and turn them into an awesome model.
Lastly, some good news for audiophiles! AudioKinetic, the company that makes the industry-standard Wwise audio engine, recently announced that their product is free to use for projects with under 200 assets, which fits Lemma nicely. This engine should dramatically improve the audio quality in Lemma. Switching to Wwise is also a necessary step for a possible Mac and Linux port. Here’s a screenshot of the Wwise content editor in action:
So that’s what I’ve been working on. Now you’re up to date! Thanks again for all your great support. Let’s keep this going and get it funded in the last week!
My theory is that the traffic dropped off a cliff at the end because we were already approved and got removed from the rotation. I have no evidence to back it up though.
What else is new? Oh not much, just the brand new build 353 with more features, bug fixes, and level design tweaks than you can shake a stick at. If you didn’t have time to try the original demo, now’s a great time to give it a go! Here’s a very incomplete list of improvements:
Smoother movement. The kick and roll are much more forgiving now. Frustrated that you couldn’t reach that ledge? Fixed that too.
Fixed several long-standing bugs, including the infamous “my camera is locked and I can stare down my own neck” bug.
A big chunk of the notes and text messages have been re-written.
Experimental “expander” material previously seen here.
Performance improvements! Yes!
Cheat menu. You can now skip through the demo if you’ve played parts of it before.
From the Kickstarter: Just an update on development progress for Lemma! Thank you so much everyone for your support. I’m still getting tons of useful feedback from people playing the demo. Levels have been tweaked, bugs have been fixed, writing has been edited, and graphics have been tightened. Expect a new build very soon! Here’s some new features to look forward to:
First, a minor technical detail. Saved games do not carry over between builds. If you run a newer build, all your old saves will be lost. It’s a major drag for beta testers, which is why I’ve added a new CHEAT menu to skip parts you’ve already mastered!
If you played the demo, you probably had a startling meeting pretty early on with what I am calling “the evil cubes” (they usually cause a reaction like this). Unfortunately in the original release, you only encountered them in the first level as part of a scripted sequence. They weren’t actually functional agents in the game.
For now these guys will be tucked into a secret area in the next build. If you do find them… good luck. Side note: see how the rain drops actually respond to the lighting? I thought that was a neat touch. :)
Lots of things have been tweaked that are more boring and difficult to show off, including the movement code and animations. One thing I can show you is a sneak preview of some upcoming level design:
One concern that pops up a lot on Greenlight is the low quality of the player model and animations in Lemma. The reason it’s so bad is that I did all of it myself, and I’m not a character artist. People ask, “but couldn’t you just try harder? What’s so hard about modeling and animating a character anyway? Also, couldn’t you just borrow an existing public domain model?”
Come, join me as I weave a wondrous tale of artistic achievement. It is the story of the current Lemma player model:
The story starts with modeling. The current player model consists of over 10,000 3D points connected by over 20,000 edges. Being a novice Blender user, I wasn’t about to attempt all that myself.
Luckily, there’s a great open-source project called MakeHuman that can generate all kinds of human models. You can tweak parameters like gender, height, weight, nationality, muscularity, facial features, and more.
I generated a suitable model, imported it into Blender, and made a few tweaks to fit the game’s needs.
The next step was texturing. Normally I would have to painstakingly map each 3D point on the model to a 2D point on a texture surface (a process called “UV unwrapping”). Luckily, the model came with pre-generated UV coordinates, so only a few minor modifications were necessary.
However, the default textures didn’t include clothes, so I used GIMP to overlay some cloth textures. I also baked in some ambient occlusion for a bit of added realism.
The next step is to add controls so that I can animate the character. Similar story here. Normally I would have to first create a skeleton of bones that roughly matches the shape of the model, then painstakingly assign up to four numbers to each of the 10,000 verticesin the model. These “weights” determine how much each vertex is affected by each bone. Thankfully, MakeHuman once again did the heavy lifting. However, the few modeling tweaks I made earlier had to be properly weighted, and even that was not easy for a novice like me.
Finally, we’re ready to animate this monstrosity! Over the course of development I’ve accumulated 34 poses and animations.
The animation code can blend between animations and even layer two different animations on top of each other. For example, the bottom half of the model can play a walking animation while the top half answers the phone.
Each animation contains keyframes that indicate the position, orientation, and scale of each bone. To make the player turn around, I could make a keyframe at 0 seconds with the model facing forward, and another keyframe at 1 seconds with the model completely turned around. The code would blend the two keyframes into a smooth turning animation. Easy enough, right?
Not so much. Here’s just part of the “kick” animation, which lasts about half a second. Each dot is a keyframe.
Once you take into account the fact that the skeleton has 70 bones, even simple animations can take hours to complete.
Long story short, 3D animation is hard! Professional outfits these days use motion capture, but even that requires weeks of intensive post-processing and cleanup by teams of professional animators.
Hopefully this little article gave you a glimpse into the world of game development, and hopefully you understand why I need help to bring the player model to the level of professionalism and quality that this game deserves.
Before I go, just a quick thank you to everyone for supporting Lemma, and a status update! The Kickstarter is over 35% funded and the Greenlight is now 73% of the way to the top 100 games with almost 5,500 yes votes. Thank you guys!
Update from the Kickstarter: I know it’s only been 24 hours since the last update, but Lemma is now over 61% of the way to the top 100 games on Greenlight with well over 4,500 yes votes. Thank you all for being a part of this project!
I realized that the 30 seconds of gameplay from the Kickstarter trailer is not enough to really see what’s going on, so here’s a more in-depth video explanation of the movement in Lemma. Skip to 2:15 to see an explanation of the magical wall-creating, environment-modifying bits.
Thanks again for making this all possible. Let’s keep it going!