Lemma – Alpha 3 Ready to Play

After seven months of hard work, Alpha 3 is ready to play!

Some interesting statistics:

  • 28,000+ lines of code
  • 29 MB of compressed voxel data
  • 63 MB of sounds and music
  • 38 animations
  • 60+ textures and normal maps
  • 220+ revisions since Alpha 1

Incidentally, most of that is open source! If you’re a developer, check it out on GitHub.

This version includes the first five maps. There are still some unfinished bits (the opening sequence is not yet textured) but it’s come a long way in the past year.

Please play this because this release will report invaluable analytics back to me so I know what parts are frustrating. The most important thing the game needs right now is play-testing! Please let me know what you think as well, all the feedback from past releases has been incredibly useful and encouraging. You guys are awesome!

Future Plans

It’s difficult to judge release dates, but I foresee at least another year and a half of development in order to make the game say everything I need to say. My goal is to save enough money in the next year to take some time off and dedicate myself full-time to finishing Lemma. For the first time, I have a vision for the whole game experience that is actually feasible for one person to complete. The engine is done and from here on out it’s basically all level design.

Thanks for reading and playing. See you in a few alpha releases. :)

Posted in Lemma

Quantity Brings Quality

As I suspected, I have an almost insurmountable case of coder’s block after a full day at work. Nevertheless, things are getting done. In fact, this might be the best thing that’s happened for Lemma because it’s forced me to cut a lot out of the design and focus on core things. It’s the only way I’ll ever finish.

Screenshot below gives an idea of the new direction. I’ve dropped any pretense that the game occurs in our world as we know it. It was a restriction that existed only to service the story, and it was limiting the gameplay and visual style a lot. Now I’m free to do a lot more, and I’m not precluded from telling a story just because it’s fantasy rather than sci-fi.

In order to get this thing out the door, I am now dead-set on eliminating anything that does not contribute to the core gameplay. You won’t be seeing any more nifty graphics features. From here on out, I’m determined to churn out two things: enemies and levels. And I do mean “churn”, although that’s not something that comes naturally. I tend to set out with the goal of creating the best mechanic/level design/widget/mouse trap and spend months perfecting it, before deciding to cut out the whole thing completely.

No more. From now on, I’m churning out crap. I’ll throw out the worst and polish the remaining turds until they sparkle.

One of my art professors told a story about an experiment one teacher performed on his pottery class. He told one of the class that their grade depended on their ability to make five perfect pots for the final. He told the other half that their grade depended on the sheer number of pots they created, with no regard whatsoever for quality.

Some of the kids in the latter half made over 300 pots. By the end, they were so practiced that their pots were of higher quality than the students who were tasked with creating five perfect pots.

This might be a no-brainer to you, but it’s changed the way I think. As game designers, we’re always trying to pin down that elusive thread of fun that runs through every good game. There’s no formula or guaranteed method to create it. The only thing to do is try a lot of things and hope that you’ve picked up enough along the way to make a perfect pot at the end.

So that’s where I’m at. Churning out levels and interesting objects to fill those levels.

One thing that’s been missing for a long time is physics joints between voxels. Without them I couldn’t create things like sliding doors and rotating platforms. Click the image below to see a GIF showing what I mean.

I’m pretty excited about new possibilities this opens up. I’ve already implemented a few in one of those churned-out levels I was talking about.

One other minor announcement. The website used to be hosted on NearlyFreeSpeech, which charges based on usage. The huge spike following the release of Alpha 1 cost quite a bit, and the whole experience has just been kind of annoying, so I moved the site to Amazon. The whole site is static despite having a lot of dynamic content pulled from all over the interwebs, so I was able to plop it in an S3 bucket for dirt cheap. So far I’ve payed 50 cents, plus the domain name. No complaints!

That’s it for now. Thanks for reading and being patient with this incredibly slow project. Hopefully some of the ideas in this post will help speed it up.

Posted in Lemma

Anecdotes ahoy

A smorgasbord of anecdotes carefully compiled just for you, dear reader. This is #2 in a series of three posts which were originally one, before I decided I just had too dang much to say.

OpenStack

I spent a few weeks at work building a fully operational death star OpenStack cluster. What does that mean? Basically, we have our own little private version of Amazon Web Services. We can create virtual machines, virtual hard drives, even virtual IP addresses, all with just a few clicks. It also includes an S3-alike called Swift.

I worked purely on the software side, but the hardware is pretty cool too. Here’s a pic that I hopefully will not get in trouble for posting. It’s just too awesome not to brag about.

I used JuJu to deploy everything, which took care of most of the boring work of installing operating systems and configuring the software. There were still some kinks that I had to iron out manually. I only had to blow away everything and start over three or four times.

Every node in the cluster is monitored by Ganglia, which records CPU, disk, network, memory, even VM statistics. I highly recommend it; I even got it recording the datacenter temperature from a USB sensor with relatively little hassle.

There’s also a Nagios server that periodically checks on the Ganglia metrics. We can set a threshold on any metric recorded by Ganglia and have Nagios send us an email when the threshold is exceeded. The only thing still missing is a GSM modem to allow Nagios to send us text messages if the internet connection dies.

Each day, a cron job on each of the three critical machines in the cluster fires up and rsyncs its entire hard disk on to an external RAID machine. I also set up a Nagios alert that fires if a backup fails or misses a day.

Teaching

For some time now I’ve felt a tug in the back of my mind calling me to teach. WARNING: religion-speak ahead. In Christianity-land we call this “being led by the Spirit”. For those unfamiliar with the lingo, it usually means “I want to do this thing, and it feels right, and there’s nothing stopping me, so I’m pretty sure it’s Spirit-led.”  (Side note: Christians spend way too much time trying to “discern God’s will for my life.” Just do your best, people.) (Side side note: I’m not cynical at all.)

So one day on my lunch break, I walked into my old middle/high school and said, “I’d like to teach a computer science class.” They said, “can you start in a few weeks?”

In a few weeks I’m starting a teaching “trial run”. It’s a short, simple class, once a week for six weeks, mostly just to get kids excited about CS. If all goes well, Lord willing I’ll probably start a more in-depth class next year. And oh man do I have some crazy ideas.

I was intrigued by an article on flipped classrooms, which go like this: watch lectures on YouTube at home, and do all your homework in class. Backward from the usual pattern. Here’s why:

  • Lecturing is probably the least efficient form of teaching you could come up with, but it’s often the only practical option for uploading information into people’s brains. Recording the lectures on video at least mitigates some of the problems by allowing students to pause, fast-forward, or skip the entire lecture.
  • As a student, I never thought of good questions in class. They always came later that night (much later) when I pulled out the homework and hit a brick wall. By devoting the whole class period to homework, the teacher can maximize the time they have to answer questions.
  • The flipped classroom motivates students to participate in class, since they’re already stuck there and it’s in their best interest to finish their work quickly while they have access to the teacher.
  • I always studied alone, but most students work better in groups. This teaching model obviously encourages lots of collaboration.

This is all theory for me right now, but I’ll let you know what I’ve learned a month or two from now. It’s all very scary and new. Kids are going to be harder to program than computers, I think.

New Apartment

All I have to say is this:

Much more is happening. The next post will cover everything in Lemma. The project that simply will not die.

Posted in Uncategorized

My Biggest Fear for the Future of Human-Computer Interfaces

I recently had to install and configure an 18-node OpenStack cluster, a process which involved a lot of SSHing and text-editing in terminals. I thought about learning Vim, but I was afraid of the incredibly steep learning curve, so I made do with GNU nano. It’s not at all powerful, but it’s easy.

Eventually I realized, “This is my job. This is what I do every day. Why am I holding off on learning something now, thinking it will slow me down, and that I’ll have time to learn it later? It’s not like I’m anticipating a major career shift any time soon.”

With that in mind, I quit nano cold-turkey and moved to Vim. I won’t waste time explaining why it’s so great. There are already plenty of fantastic articles on that subject.

I’ll just say this: Vim is powerful because it opens up a new interface to interact with your entire computer. Especially on Unixes, there’s hardly anything you can’t do with a shell and a good text editor. Which means you have one consistent interface that exposes everything on your computer.

Think of that. How many poorly designed, mismatched UIs do you use on a daily basis? Right now I have Chrome, Steam, Spotify, Windows Explorer, and Visual Studio open. I see about fourteen different UI paradigms cobbled together here. And, if I click in the lower-left corner, I get a completely disorienting context switch into an entirely different paradigm (that of the dreaded Metro tiles). I’m at the mercy of all these hapless UI designers.

Each one of those programs has a UI that I had to learn, each with their own quirks and bugs. Granted, Spotify and Chrome are both shining examples of UI design. I think they’re about as good as it gets. Incidentally, web browsing and music organization are two things I will probably never do in a terminal.

Exceptions aside, it’s incredibly empowering to be able to operate your computer on your own terms. And that brings me to my biggest fear for the future of human-computer interfaces:

There is no terminal in the cloud, or on mobile.

“That’s good, right? CLIs are old and not at all user-friendly.”

No argument there. But imagine for a second what a UI would look like if it had all the capabilities of a CLI with none of the cruft.

  1. Again, it would provide one consistent interface between you and all your apps.
  2. On the other hand, it would allow you to operate your apps on your own terms. Going with the analogy, right now you can choose one of 17 different shells and 5 text editors. Apache doesn’t care what editor you used to configure it.
  3. It would glue together all your applications, connecting them together however you want. In a CLI, that’s accomplished with a single keystroke.

Compare that with current trends:

  1. Cloud applications are the future of computing. Yet, to copy a picture from Facebook to Gmail, I still have to download the image, save it to disk, and upload it to another server. Most people don’t have time to figure out how to do that.
  2. Mobile applications, the uh, other future of computing, are notorious for not working with each other. Particularly on iOS, where the filesystem is almost completely opaque. On Android, it might as well be.
  3. In both cases, each app has its own set of paradigms which do not relate to other apps at all.

The whole point of the internet is to connect things together through a common interface: HTTP and hyperlinks. These days, web apps have a single URL with a giant hashtag fragment appended. That breaks the interface. I can’t write a script against that; I’d have to simulate user clicks.

“No you wouldn’t, it’s probably calling a RESTful API!”

Yes, the one shining light of hope is that every web app now has a nice, friendly, documented, open API. No, there are still major problems:

  1. The main use of these APIs is still just identity. Great, I can connect my Facebook to my account on the pygmy llama forums I visit! Oh wait, all it does is save me the hassle of logging in all the time. I still can’t have these two “apps” communicate with each other in any meaningful way.
  2. Third-party clients are the other use-case. Great, I can choose between 3,000 different Twitter client apps! Oh wait, each one still only talks to Twitter and nothing else.
  3. In the few instances where apps do talk to each other, it’s only because the users bugged the developers enough for them to coordinate a common interface. The users can’t operate their computer on their own terms. They’re dependent on the developers to add this functionality.

Contrast this to command-line tools, where every program is designed from the ground up to work with other programs through common abstractions, most notably files and pipes, and where having a UI automatically entitles you to a scriptable API.

In short, open web APIs are good but not good enough. The question is, can we design an interface that has the power of a CLI with the user-friendliness of a GUI, and that is designed from the start for cloud and mobile environments?

If we don’t, we will eventually lose control of our own computers; we’ll be at the mercy of app developers.

Tagged with: , , ,
Posted in Coding

Internet is Back

I just got internet back after being without it since before Christmas. It was a tearful reunion, to be sure. Turns out, I was actually more productive than usual without internet. There’s a one-word explanation for that, and it rhymes with “edit”.

ANYway, here’s what got done:

Analytics

When you finish a play session, you’ll see something like this:

 

I haven’t figured out the server side of this system yet, but all it really needs to do is accept plain text file uploads. Once I have the files, it’s easy to load them into the editor, yielding data like this:

 

On the right-hand side, you can see how I can view individual play sessions, or select all of them and filter by event type. For example, if I wanted to see where in the map people most often exited in a fit of rage, I could select all the play sessions, then filter on the “Exit” event.

The player’s position at the time of each event is visualized as a colored dot. I normalize the first three bytes of the MD5 hash of the event name and use that as the color.

At the bottom you can see I also record graphs of various properties, like the player’s health and ammo. I can also just play back the recorded sessions at up to 10x speed. The analytics data also includes crash logs, so now I can see the circumstances leading up to a crash.

TL;DR: The next alpha release should give me a lot more useful information about pacing, difficulty, and bugs.

Headlamp

I’m working on a pitch-black claustrophobic section of the game. Ancient FPS tradition requires that I implement a flashlight.

 

Complete with shadows and everything!

SS-Fail-O

I tried to implement SSAO. This is as far as I got:

 

Sad sad sad.

Revamped Player Textures

I know, I’m not a very good 3D artist. I’ve been getting some complaints about it. I’m trying to go back and re-vamp the player model without throwing away hundreds of hours of work. I’ve already made one of the easiest improvements, which was to photochop the textures a bit and add normal-mapping.

Here’s before and after:

Laundry List

Here’s some other things, because you obviously have nothing better to do!

  • I’ve done a good bit of research and writing for the story in the past few weeks. I feel lucky to have a lot of source material to work from. But oh is it still difficult.
  • Pistol handling animations have been cleaned up.
  • The camera doesn’t clip into the environment anymore (for the most part).
  • I keep improving voxel performance. It’s pretty smooth at this point. There’s one last stubborn piece of code I need to cajole onto another thread though.
  • I wrote a very simple state-machine AI for the snake enemy. It’s so much more fun now, it feels like an actual game.
  • I also applied the AI to a new “floater” NPC which will come into play more later.
  • I think the player movement and special ability code is finally starting to settle down. I’ve narrowed things down to the right number of abilities that keep things simple but also give the player a lot of power. Hopefully it will just be tweaks and bug fixes from here on.
  • Speaking of bug fixes, I’ve squashed probably over fifty bugs since Christmas. Feels good man.

Thanks for reading. Hang in there for the next alpha release!

Tagged with: ,
Posted in Lemma

Progress Report

Lemma has been radio silent recently, but that does NOT mean things aren’t happening! I’ve been able to do a ton of work almost every day these past few weeks. Here’s what’s going on:

  1. Did some massive surgery on the very first tutorial section after getting some feedback from a limited alpha release. It introduces, jumping, climbing, vertical wall-running, and rolling/crouching.
  2. Added a second, underground section that introduces horizontal wall-running, wall-jumping, and some important story elements.
  3. Added a THIRD section, which you will see in a moment, that reviews everything and introduces the flying kick move.
  4. Wrote a small chunk of dialog for the text-message system. It’s harder than I anticipated, making the conversations truly interactive without having the dialog tree explode exponentially in size.
  5. Simplified and consolidated the controls. Everything is on Shift, Spacebar, and Control now, should be very intuitive for FPS players.
  6. Overhauled some of the animations and added new ones for some new parkour abilities.
  7. Made the menu a lot more user-friendly.
  8. Committed approximately 15 million bug-fixes and tweaks.

TL;DR: Things are happening. Here’s a video that shows one of several ways to get through the third tutorial section in quick fashion.

Alpha Gameplay Speed Run

Thanks for your patience. Hopefully future updates won’t be as delayed as this one, but I’m definitely updating less than I used to so I can focus on getting stuff done.

Tagged with: , , ,
Posted in Lemma

Mac and Linux Support

How’s everyone doing? I’m doing okay. It’s a Monday. Hope you’re doing okay too. Surviving Sandy aftermath, school, work, and whatever other forms of oppression you may be under.

I don’t have anything pretty to show for the past… wow, it’s been three weeks. I’ve been working on a very lofty addition to Lemma’s feature bullet list. And that is Mac and Linux support, via the awesome MonoGame project.

Don’t get too excited. There is a ton of work left to do before this becomes a reality. But after a few weeks’ work, I do know a few things:

  • It’s possible. There’s a lot missing, but all the code compiles against MonoGame, and a subset runs correctly.
  • I’ll have to implement a lot of necessary features on my own. I’ll be pushing (or attempting to push) these features back upstream in to the MonoGame project for everyone else to enjoy. It’s not as bad as I thought, though. I already completed one big feature (sampler and render states parsed out of .fx files) and am waiting to merge it.
  • In the meantime, I have a build set up where I can quickly switch back and forth between XNA and MonoGame. I can continue developing game features under XNA while patching MonoGame on the side.

My plan is to focus primarily on the game code, and whenever the creative juices run dry, I can switch gears and knock out a couple MonoGame features.

It’s pretty exciting contributing to MonoGame, as it’s a very active project. I’m still new to the whole GitHub workflow, and it seems a bit wonky, but it’s leaps and bounds better than anything else out there. Especially because everything is on GitHub. It’s like Facebook. It isn’t even that great, but the killer feature is that everyone uses it.

Anyway, this week I’ll be getting back to game features. Expect pretty screenshots soon.

In other news, I’m roughly one month away from graduating, moving into my first apartment, and starting a real job. I’m worried that coding all day at work will slow progress on Lemma, so I’m trying to get as much work done as possible before then. Hopefully once I start work I can find a schedule that keeps me from burning out on Lemma, because I’ve come way too far to quit.

Tagged with: , ,
Posted in Coding, Lemma
et1337

Christ follower and indie game developer working on a first-person parkour game.

Archive
Follow

Get every new post delivered to your Inbox.

Join 744 other followers