About PoV (twitter: @mikekasprzak)

Mike Kasprzak, AKA "PoV" is your fearless leader. He plays this role so the others don't have to. He didn't start Ludum Dare, but has been around since the beginning. Even though it's wrong, he speaks the word "Dare" as it would be spoken in English. He does that with "Euler" too, which should make that guy pretty mad.

Mike is a game industry veteran with more than a decade of experience, and multiple console and mobile games to his name. Currently he owns and operates Sykhronics Entertainment, an Independent Game Developer based out of London, Ontario, Canada. Sykhronics is best known for the iPhone game Smiles, which was a finalist in the 2009 Independent Games Festival Mobile, was the winner of the Intel Atom Developer Challenge's "Most Elegant Design" award in 2010, and won the 2011 Developers Choice Award in Transgaming's GameTree.tv Developer Competition. Also PuffBOMB, a classic Ludum Dare entry of his that went on to be a finalist in the Slamdance Guerrilla Game Making Competition and be named a "Top Dog" on legendary gaming archive Home of the Underdogs.

Mike is currently working on STACHE.

Mike was a contributing author on an iPhone book nobody remembers and used to write for independent games website GameTunnel.

Mike's funny story is that he "won a car" in a compo. He's been a full time independent game developer for too long.

Company: Sykhronics Entertainment
Twitter: mikekasprzak
Blog: TooNormal

Mike's Notable Compo Entries
LD12 - towlr [towlr.com]
72H2 - Zooble [Link]
LD03 - PuffBOMB [puffbomb.com]
LD02 - Sheep Strike
LD01 - Trout!
LD00 - Fun Game (not actually fun)


PoV's Trophies

The "I just need to test awards" award
Awarded by pta2002
on April 18, 2016
Badass Admin Award
Awarded by kaype
on December 6, 2015
Help Running and paying for the LD Site Award
Awarded by Donni11
on June 17, 2015
Still Being PoV
Awarded by dylanigan
on August 22, 2014
The "If you got another result than PoV, you are probably wrong" Award
Awarded by klianc09
on August 22, 2013
The Stroustrup Award for Writing a Web-Based Game in C++
Awarded by Jacob
on April 24, 2012

PoV's Archive

Wallpapers for Ludum Dare 34

Posted by (twitter: @mikekasprzak)
Monday, November 30th, 2015 5:08 pm

Post links to wallpapers you’ve created in the comments.

Ludum Dare 33’s wallpapers are here. Ludum Dare 32’s wallpapers are here.

Theme Slaughter Round for Ludum Dare 34 begins!

Posted by (twitter: @mikekasprzak)
Monday, November 30th, 2015 2:26 pm

Progress continues. The all-new Theme Slaughter has started. Go here:


If you don’t already have one, you will need a Ludum Dare account to participate in the Slaughter.

For those unfamiliar with it, the Theme Slaughter Round is the first phase of the Ludum Dare Theme Voting. We’ve taken the thousands your suggestions from the Theme Suggestion Round, removed duplicates, and set up this easy form for you to say whether you like them or not. Every click helps, so please help us slaughter some themes. :)

What’s new:

  • Now just 2 options (Yes and No), to make it less ambiguous
  • Hotkeys: Quickly select Yes and No using the Left and Right arrow keys, submit with Spacebar or Enter.
  • Edit your Votes by clicking on them in the Recent Themes list
  • “Flag” option to mark inappropriate themes (offensive, racist, etc)
  • Ludum Dare Account Required

Coming soon:

  • Stats
  • Making it less likely to see the same theme twice

If you have any problems or feedback, leave a comment below.

Ludum Dare 34 in 3.5 Weeks! Theme Selection micro-site is Live!

Posted by (twitter: @mikekasprzak)
Tuesday, November 17th, 2015 12:11 pm

EDIT: Ending Soon!

Hey everyone!

We’ve just launched the Theme Selection micro-site. We’ll be using it for the next 3 and a half weeks to help us decide the Theme of the upcoming Ludum Dare event. To get started, click here:

** IMPORTANT **: Login problems should now be fixed! Sorry for the trouble!


I’ve tried to make it as straightforward as possible. Click above, click the Login button, and you’re good to go.


EDIT: Final Beta Test has Ended. Theme Selection site soft launch!

Posted by (twitter: @mikekasprzak)
Sunday, November 15th, 2015 9:58 pm

EDIT: Beta has ended. We are Live!

That said, for the moment this is a soft launch. Go ahead and use the site as you would. I just have a laundry list of things to do before we officially launch (post all kinds of messages, change lots of text, etc).

* * *

Ok! Data is wiped! We’re going to run one last test. Go here: theme.ludumdare.com

EDIT: Updated Screenshot. Old shot from yesterday is here.


Too many changes to list (old thread is here).

I’m not going to tell you what not to expect this time. If something seems wrong (or unexpected), leave a comment.

*deep breath*

Try to break it. πŸ˜€

By popular request, “3 Theme Suggestions Total”, per user

I did some polls yesterday. To my surprise, a majority of people wanted a small limit on the number of Theme Suggestions each user could make (i.e. 3). That could potentially mean we end up with better ideas overall, since you need to pick your favourites. We wont know until we try it, so we’re going to try it. πŸ˜€

If all goes well plan, we’ll be kicking off Theme Suggestions FOR REAL very soon. πŸ˜€

Thanks everyone for your patience!

Theme Selection – Suggestions Beta Test

Posted by (twitter: @mikekasprzak)
Friday, November 13th, 2015 9:18 pm

Sorry for all the delays, but here we are. Lets lets give this a test before it goes live!

Go here: theme.ludumdare.com


FYI: This is a Beta Test. I will be deleting the data after, so feel free to suggest whatever.

*deep breath*

Try to break it. :)

Known Issues

  • If you aren’t logged in on ludumdare.com, after you finish logging in, you aren’t automatically redirected
  • On the mobile site, you may not be able to delete themes with names that are too long
  • If any of the servers time-out, it may not fail gracefully (untested).
  • Alerts for deleting aren’t pretty. :). I’ll make dialogs soon.
  • It could definitely use some flair to know when you’re waiting for the server to complete a request. Right now, if there’s any delay, your theme is just not there for a moment.


  • By request, the enter key will now Submit
  • 0, <, >, \, and ” characters should now work as expected (you can type HTML tags now, and it will remember them, but they will not apply)

Please test these. :)

The Mobile Site should work too (both orientations), but it has only been tested on a 10″ iPad and a 6″ Android Phone. The styles will probably not fit smaller phones yet. The HD Site should also work, but that said, I haven’t really tuned the font sizes yet. For reference, you can check what mode you’re in by looking at the end of the “Generated” line on the bottom the page.

  • [M] – Mobile – Tall orientations of Phones and small Tablets
  • [T] – Tablet – Tall orientations of Tablets
  • [N] – Normal – Wide orientations of Tablets and Laptops
  • [H] – HiRes (HD) – For those with 1080p and higher displays

Coming Soon

A little bit later, I’ll be adding some perks to the process. The first, anyone that’s participated in a Ludum Dare event will get extra suggestions. As a base, everybody gets 10 suggestions. If needed, I’ll look in to adding a way to get additional suggestion.

Thanks everyone for you patience! :)

EDIT: By popular demand, we’re actually going to do the opposite: No bonus themes, and in fact, ONLY 3 THEMES PER USER. I ran some polls on Twitter, and a surprising number of people wanted us to do only 3 themes total. So, why not? Lets try that! :)

Suggestions will open on Sunday, and will run for just under 2 weeks.

Theme Suggestions opening next week!

Posted by (twitter: @mikekasprzak)
Thursday, November 5th, 2015 4:24 pm

Hey folks!

Just a quick update: Theme Suggestions will open a few days later than usual. Was supposed to be Friday, but it will probably be Monday.

The new website isn’t ready, but we are going to start doing Theme Selection on it. That’s the whole process of suggesting, slaughtering, voting, and announcing the theme. I ran in to some server issues earlier in the week, and I wont be ready Friday.

Soon though. Stay tuned! :)

EDIT: Yarg! Lets say Wednesday. πŸ˜‰

EDIT 2: We’re almost there! Here’s a preview:


Going to roll this out properly though. Here’s the plan:

  • Thursday Friday – Theme Selection micro-site Beta Testing Day
  • Friday Night – Theme Selection micro-site LIVE!

On Beta Testing Day, we’re going to try the micro-site out, but do understand I WILL BE WIPING THE DATA during and at the end of the Beta Test.

It’s kind-of a big day once the micro-site goes Live. That means I can’t kill/recreate the database tables on a whim anymore, and backups need to start immediately. Every table included is officially Version 1, and every change herein bumps that version. This is both the first public test of the software and the first public test of the network I’ve set-up to run the new Ludum Dare website (Core: 2 VPS servers in New Jersey. Network: 2 off-site database cluster nodes for backups). Plenty of places to go wrong, so better safe then sorry. :)

I’d like to thank everyone for their patience. We’re almost there! πŸ˜€

How I ended 2014, and plan to end 2015 (a hardware non-Jam)

Posted by (twitter: @mikekasprzak)
Thursday, November 5th, 2015 4:19 pm

TL;DR Last year, a few dudes on the internet made tiny games for retro game systems, and it was awesome. Planning to do it again (though I’m building something physical this time). You should join us! #HardDare

This is a story.

Near the end of 2014, I started researching how to program the Commodore 64. This is something I’ve wanted to do for a very long time. The Commodore was the computer I grew up with as a kid, but as a kid, I only ever wrote lousy BASIC programs on it. I never made anything that truly utilized the hardware.

But once I stumbled across this video, there was no turning back.


After getting some test code running on a C64 emulator, I set a goal. Since the Commodore 64 was the gaming machine of my childhood, to make things that much more interesting, I decided: In the final days of 2014, I would make a small game based on something I wanted to make as a kid.

After digging through my sketches, doodles, and notes, I chose to do something with these:


This was me from the early 1990’s, probably when I was 11 or 12 years old. I used to draw pixel art and game maps on graph paper (I painted on my Commodore 64 too, but I don’t have backups).

In the 20+ years since then, I have learned a bit about drawing. I’m not great, but I have improved. So I decided to re-create the character.


Using some of the excellent free tools available for Commodore 64 dev, I made sprites.


And after a bunch of work, I got this running in an emulator.


Before finally getting it running on an actual Commodore 64.

(NOTE: I stole the SID music file, but it’s playing for real on the C64)

At the end of the day, there wasn’t really much of a game there, but I was extremely proud to have finally make something that ran on the Commodore 64. That machine meant so much to me as a kid, and this something I’ve wanted to do for such a long time.

Want to hear something interesting? I wasn’t the only one.

A couple friends on Twitter were also playing with little retro projects for old game hardware.

Ryan made a game run on the Nintendo Famicom (NES).

Tim made a game run on the Atari 2600.

As you can see, we were sharing Vines of our progress while we made them. It was really cool seeing the progress videos. So cool, I had to message the guys recently just to say how cool that was. πŸ˜€

And you know, I think we might be doing something like this again (I know I am). :)

Me, for 2015, I’m planning to dabble with hardware.

Some weeks back, I ordered some old sound chips. Chips such as the MOS 6581 (AKA the Commodore 64 SID), Yamaha YM2612 (Sega Genesis/Mega Drive), and an AY-3 (other). I’m going to try directly interfacing with those sound chips using either an Arduino or Raspberry Pi (still deciding).

I ordered them via AliExpress, which means China, which means shipping can take a month+ to get to me. That’s why I’m bringing this story up now, a good month+ in advance in case anyone else gets inspired.

* * *

This isn’t a Ludum Dare event, or an announcement for a new Game Jam. We’re not planning a structured event. This is merely an invitation. It’s me saying hey, some of us will be doing cool things with hardware in December, and maybe you want to too.

Maybe you too have a few spare days before the end of 2015 to do something. I usually have a few just after Xmas and Boxing Day. I’ll be doing my little project then.

Unlike software, hardware requires that you have what you need on-hand. December is often an extremely busy time for mail, and since folks may want to order things (Arduinos, Raspberry Pi’s, ICs, Flash carts, etc), you may want to do it sooner than later.

I suggested to the guys that we should come up with a common hashtag (not sure what it should be yet, feel free to make suggestions). That way, it’s easier to find the stuff we’ve been up to. Photos, Videos, Vines, maybe a wrapup blog post. But this isn’t a structured event. Just a casual intent to play.

That’s the plan. You’re welcome to join us. :)

EDIT: I’ve been using the hashtag #HardDare, a pun on Ludum Dare and Hardware.

October Challenge 2015

Posted by (twitter: @mikekasprzak)
Monday, September 28th, 2015 11:04 am

Hello! It’s nearly October, so it’s time to kick-off our 6th October Challenge!

The October Challenge is a special event here at Ludum Dare. How is it different? Well, if Ludum Dare encourages you to make a game, the October Challenge encourages you to sell a game. Or put another way:

Finish a game β€” Take it to market β€” Earn $1

That is your goal. That is the October Challenge.

Disregard all the usual Ludum Dare rules (no restrictions). Finish any game you previously made during a game jam, something else you’ve been working on, or heck, something entirely new. Your mission, if you choose to accept it, is to finish and do everything necessary to start earning money from a game. No specific rules or platforms. Make good on that goal or promise to start selling games.

Finish your game, fill out all the necessary paperwork, prep all the assets, and publish it to your respected market or store by November 1st. That’s your goal.

Once you’ve published it, let us know about it by submitting it:

[ Submit/Edit | View All ]

Finally, if you can successfully earn $1 in the weeks that follow, then you’ve won the challenge!

And even if you don’t, you’ve probably learned something, something worth way more than $1. :)

That’s the October Challenge. Good luck!

“Dare to Play” Lists (Streamers, YouTubers, over here!)

Posted by (twitter: @mikekasprzak)
Monday, August 24th, 2015 8:40 pm

Here’s a thread for the Live Streamers, YouTubers, and any non-participant looking for games to play. Post a link to your Channel, Show, or Publication in the comments below, if you have a schedule planned, along with a link to where people can suggest games to you (off-site or in a separate thread please).

PLEASE DON’T SPAM THEM! Self promotion is encouraged, but these folks are going to get a lot of submissions. Be respectable.


ProTip: Streaming Ludum Dare is not only for MAKING Ludum Dare games, but also for PLAYING Ludum Dare games! Give it a try! Many people would LOVE to watch their game get played.

NOTE: If your comment is awaiting moderation, feel free to poke Mike on Twitter.

NOTE: This thread is NOT for development streams.

Shameless Plug (i.e. Mike’s Patreon) :)

Posted by (twitter: @mikekasprzak)
Sunday, August 23rd, 2015 9:06 pm

Hello! I’m not big on doing stuff like this, but I’d be remiss if I didn’t at least mention it once. If you enjoyed yourself and like what we’re doing, I’m required to say that I have a Patreon over here:


Alternatively, if you don’t like Patreon, you can make Paypal contributions over here:


Every little bit helps. Contributing is not required (LD will always be free), but greatly appreciated.

Ludum Dare has been my focus this past year. The plan is to finally switch us to a new custom website for December’s Ludum Dare event, so as soon as we wrap up here I’m back on that.

Thanks again everyone for your support! πŸ˜€

Welcome to Ludum Dare 33!

Posted by (twitter: @mikekasprzak)
Wednesday, August 19th, 2015 5:45 pm

Hi everyone, and Welcome to Ludum Dare 33! Lets get down to business!


Click the image above to Vote for Ludum Dare 33’s Theme! The highest rated theme will be revealed on Friday August 21st at 9:00 PM EDT (6:00 PM PDT, or Saturday 01:00 UTC).

Results from Rounds 1-4 are here.

Future Stuff

If you caught the announcement 4 weeks ago, you’d know that I’ve been busy. We’re not ready to use the new site just yet, but the plan is to run December’s Ludum Dare event on the new site.

If you want to learn of the madness coming to a Ludum Dare near you, check this out:


Keynote! Hosted by Ratking

FOR SCIENCE! Dr. Ratking is here to get you HYPED for the upcoming Ludum Dare:

That’s it from me. Let’s get this Ludum Dare ball rolling!

Ludum Deals for LD33

Posted by (twitter: @mikekasprzak)
Thursday, August 13th, 2015 1:23 pm

Deals! See the comments below for this LD’s list of offers, bargains and other things.

If you’d like to submit your own deal, post details and a link in the comments below, or send me an e-mail.

Also it MUST be relevant to what we do here (i.e. make games).

Warmup Weekend for Ludum Dare 33

Posted by (twitter: @mikekasprzak)
Thursday, August 13th, 2015 9:11 am

Are you itching for some Dare? Yeah! Are you ready though? Nope!?! Then between now and the start, you’re encouraged to test your tools. We call it Warmup Weekend (but we don’t mind when you submit, be it today or next week). Make some art, import it, and draw it on screen. Make some sounds, import them, and play them on cue. If you’re using a new development tool, figure out the development cycle. Learn how to make a release too!

Bullet point summary:

  • No rules or limits. This is practice.
  • Learn your development tools! Write some code, run it.
  • Make some art, get it on screen, make it move.
  • Print some text to the screen. Print some text to a log (if applicable).
  • Make some sound, get it in game, make it play.
  • If you’re motivated enough, make your experiments in to a game!
  • Make something that should take “hours”, not 2 days.
  • Then package it up, put it online.
  • No time or day limit. But if you have no other plans this weekend, why not?

If you like what you’ve done, feel free to share it.

[ Submit Here | View all Warmup Games ]

Wallpapers for Ludum Dare 33 [23]

Posted by (twitter: @mikekasprzak)
Sunday, August 2nd, 2015 3:12 pm

Post links to wallpapers you’ve created in the comments. Ludum Dare 32’s wallpapers are here.

NOTE: If you have a thumbnail, just post a link to your thumbnail image. Unfortunately I need to manually embed the thumbnails. Silly WordPress.

Ludum Dare 33 in 5 Weeks! Theme Suggestions Open!

Posted by (twitter: @mikekasprzak)
Monday, July 20th, 2015 12:36 pm

In just under 5 3 weeks, we’ll be kicking-off our 33rd major Ludum Dare event. Lets do this!

Ludum Dare on WordPress, one more time

Like usual, we’ll be using the somehow-still-working WordPress powered website to run Ludum Dare 33.

I do regret that I underestimated the amount of work needed to rewrite Ludum Dare from the ground up. I bit off a lot, but I’ve enjoyed myself. :)

I’ll talk about progress in a moment.

Theme Suggestions are Open

You know the drill. Go here, and tell us what you think the theme should be.


Real World Gatherings

It’s time to start booking and organizing your gatherings (and for me to make the list)!


Project “Starship”, the new Ludum Dare, in great detail

The new website is still in development. Things are working, but it’s not done.

I’ve written an EPIC POST. The progress so far, what’s coming, and what to expect.

Click if you Dare.



  • Keep all your current Games and Posts
  • Create Teams, and subscribe to Groups
  • New timeline, see only a subset of all posts during events, popular posts, and people you Follow
  • Add Games from Other Game Jams (auto-import from some)
  • Markdown formatted text instead of HTML, Emoji short codes, Syntax Highlighting
  • Patching. Improve and fix the text for any page/post/game. Push with a click, and Accept changes with a click
  • Comment Notifications and @mention Notifications
  • Some crazy new User Page stuff :)

Check out the post for more details.

Get Hype

Ludum Dare is coming up!

“Starship”, the new Ludum Dare, in great detail

Posted by (twitter: @mikekasprzak)
Monday, July 20th, 2015 12:35 pm

IMPORTANT: Most of the things mentioned in the post are unfinished, some aren’t started. Treat this post a guide for what’s going on.

* * *

Let’s talk about Starship.

Starship is my internal codename for the New Ludum Dare website project. It’s a silly nickname that I got used to. Loosely, it’s my way of saying Ludum Dare is a big complicated internet space ship that transforms, sends out probes, and even splits off in to smaller ships. I guess it’s actually metaphorically a lot more like Voltron, but I was watching Star Trek TNG at the time. :)

Starship is written in PHP, (currently) runs on Apache, and uses MySQL. And yes, we’re on GitHub.

Migrating to a Starship

Before I go in to details about the new website, I need to talk about the old website, and what we’re going to do with it.

Over the past 7 years of Ludum Dare, we’ve accumulated over 21 GB of image data, and a nearly 4 GB database. There are over 50,000 users, nearly 75,000 posts, nearly 60,000 comments, and over 27,000 games and things that have been submitted to Ludum Dare events. And with Ludum Dare 33 on the horizon, those numbers are going to get even bigger.

That’s a lot of data.

Today, Ludum Dare runs on a dedicated server somewhere near Washington, DC. This machine is entirely ours, has some crazy Intel Xeon CPU and 12 GB of RAM. We’re also using CloudFlare as a reverse proxy and CDN. That means no matter where you are in the world, those 21 GB of images should load nice and quick for you (here’s a map). The whole setup costs a bit over $200 a month to run.

That’s how we do it today.

For the new website, we are going to start with a clean slate, *BUT* we are keeping the old data.

First off, when we finally kick-off the new website, everybody is creating new accounts.

After you create your account, we’re going to let you migrate your old data. I want this to be as simple as possible, automated even. I’ll autodetect if you have old data by comparing your current and original e-mail address. There will also be a way to claim your data if your e-mail address has changed (process TBD).

There will be a script in place, so old URLs like these:


Will redirect to the new URLs like these (NOTE: links are examples. They are not live):


For accounts that haven’t been migrated, they’ll instead be redirected to a read-only version of the original pages on the Legacy Server.


The Legacy Server will be a separate mini-server (mini compared to what Ludum Dare has become) that runs a read-only version of the original website. Posting and Commenting will be disabled on the Legacy Server, and along the top of the page will be notices telling people that we’ve moved.

Traffic should be minimal, so like the old days, I expect we’ll be able to run it for around $10 a month. Pretty cheap.

That said, the Legacy Server is really only needed for the inactive users. Active users will have all their games and posts available on their new accounts, on the new website.

One caveat: Comments will not be migrated over. Instead, we’ll attach a special link to the original post on the legacy website, where you can read the original comments.

So again, we’ll be starting with a clean slate, but everything from the past will be available.

* * *

FYI: For anyone that’s curious about the legacy Ludum Dare website, you can now find the code on GitHub:


Again, this is the legacy, not the new website. 7 glorious years of duct-taping features to WordPress. The workflow is very unsafe, and not 3rd party friendly. We’ve been committing and checking-out changes directly on the live website the entire time. Any time we made a change, we risked bringing down the website with a PHP error. Uncool. We used to host it on Google Code using SVN, but it’s now on GitHub. As of Thursday, I’ve committed the first real update since migrating the code GitHub. The workflow is just as unsafe, but a little more nerdy now as I commit changes using GIT, and check-out on the server using SVN (thanks to the awesome GIT->SVN feature built in to GitHub).

All aboard the Starship

Like I mentioned, development of the new website takes place on GitHub. About a month ago I started publishing my changes publicly. Eventually, you’ll be able to get the website code from here:

http://github.com/ludumdare/ludumdare (soon)

At the moment, we’re very much pre-alpha on the new website, so I don’t want to publish to that account yet. To me, github.com/ludumdare is for the live website, and at the moment the website isn’t live.

I’m still doing a lot of engineering, so instead, I’ve been keeping code in my personal GitHub account:


Once we are live, the Ludum Dare GitHub account will become active.

DairyBox: The Ludum Dare toolchain (and LD pun)

dairyboxlogoFor those looking to help out, you’ll need to download and install the Ludum Dare Toolchain, named DairyBox.

http://github.com/ludumdare/dairybox (soon)

But again, since it’s pre-alpha, the download is on my personal GitHub account:


DairyBox is a Vagrant box based on Scotch/Box. It’s a VM that lets you run your own mini Ludum Dare server locally. This is a HUGE step up from the old development workflow. We can actually test now without bringing the server down! πŸ˜€

To use it, download and install DairyBox using GIT, and follow the instructions for cloning the source code (NOTE: It’s not a straight-up clone, it requires some git init trickery).

I want to help! What should I do?

At the moment, a lot of things are broken, unfinished, undocumented, and a little weird, but it is open now.

I’m not really expecting anyone to start sending me pull requests yet, but feel free to surprise me. As I see it, I still have a lot of core things to finish (and explain). There’s a method to the madness, and hopefully the rest of this post will give you broad idea of what’s going on.

There’s a very early effort in to auto-documenting the code. You’ll find a few Doxygen, JSdoc, and APIdoc comment blocks in various parts of the source code, but not enough since a number of things are still in flux. Scripts for documentation generation are in /scripts/docs/, and will eventually be hosted on http://dev.ludumdare.com.

Bugs reports (though admittedly it’s a bit early for testing), for now post them to my ludumdare issues page.

Show me your ship!

Alright! If you want a look, here’s a sneak peek.

IMPORTANT: The website is in EARLY DEVELOPMENT. Many things don’t work, and many more don’t exist yet. It is not pretty to look at. It’s about function, not style.

You have been warned

https://wip.ludumdare.com (/www/public/)

This is a live snapshot of what’s currently in my GitHub repo. At times it may be out-of-date, it may be broken, but it’s real.

And just to mention it, you’ll note that URL uses HTTPS. There’s still work to be done on this front, but moving forward, we’ll be doing the security thing right.

Is that it?

Of course not. :)

What you don’t see is that Ludum Dare is now broken up in to several smaller modules. I’ll talk about some of the modules in detail in later sections.

But first, one of the main modules, the Static Website:

LD Module: The Static Website

It’s not really something you can look at, but the WIP static website is over here:

https://static-wip.ludumdare.com (/www/public-static/ and the symlink /www/static/)

The URL to the static website will change, but basically, the static website is part optimization, and part future proofing when we need to scale-up by cutting up the server.

The static website is pretty straightforward. All the images you upload to Ludum Dare will be stored on the static website. So, those 21 Gigabytes of images, whatever the new size is, that’ll be where they live. Also, elements of Ludum Dare we consider static and unchanging (the JavaScript code, CSS, and so on) will also live there. There will be some dynamic elements to the static website, but for the sake of caching, and as far as our CDN is concerned, everything there is static.

Today, the main dynamic element of the static website is the Image Resizer.

The image resizer is the thing that resizes and crops the images and avatars you upload. We did various things in the past, but the new resizer is designed to be less wasteful and take advantage of the CDN. When I talk about the 21 Gigabytes we currently use, a few of those GB are extra copies of images resized to fit some dimension. In the grand scheme of things, omitting those extra files doesn’t save much, but for a few minutes the resized images will live in RAM, long enough for the CDN nodes to grab a copy and cache them around the world. Not to mention, storing them in RAM saves us a disk access, so we can feed all those requests faster.

You can see a demo of the image resizer on wip.ludumdare.com. That unusually large cropped chicken image? Yeah, that’s the resizer’s handywork.

We are still not going to host downloads of your games, but we will be looking in to making things easier when it comes to hosting your downloads and source code.

What’s new with Editing?

Lots! Here are some highlights:

  • All text is now written in Markdown instead of HTML (GitHub compatible)
  • Posts, Pages, Games, Comments, everything you’d want to write a paragraph of text for will share the same editing interface (because internally, they’re are the same).
  • Emoji and Short Codes. All the :dolphin:'s and :blowfish: you could ever want, just a few keystrokes away (see emoji.codes)
  • Source code has syntax highlighting. We’re currently using a generic highlighter, but we’ll also support C/C++/C#/Java, JavaScript/ActionScript, and Python. To our Haxe bros, we’re using PrismJS, which doesn’t appear to have a Haxe support. I’ll need your help to create a Haxe definition, probably based on the ActionScript one.
  • AJAX. Editing is now inline. Many things should work a lot faster (since there’s less data to send).
  • PATCHING: This is a big one. Every piece of content on the website can be edited by anyone. Patches are then sent to the original author, or team responsible. The changes can then be approved with a click by author, or a member of the Editor Team.

You can try a very rough version of the Patching, Inline Editing, and Markdown with Emoji and Syntax Hightlighting workflow on the WIP website (NOTE: Changes are not saved, and there is no notice when you’ve viewing a patched version of a post).


More things that are coming:

  • @mention people by user name to send them a notice, and link to their user page.
  • @mention groups such as the Help Team (@help, users that like to help people and answer questions), Editor Team (@editor, users part of our patch approval and post moderation team), the Press Team (@press, anyone crazy enough to listen to requests to check out a game), and so on.
  • Game Control Short Codes. This is a project I’m going to need an artist to help with. Like the Emoji, I’d like us to have a library of game controls. Things like :key_wasd: :key_arrows: :key_space: and many more for describing your game control using the keyboard. Also, mice, gamepads, and more exotic controllers like microphones, MIDI interfaces, gestures cameras, and so on.
  • Short Code auto-completion. Just start typing an emoji code or a game control code, and get a pop-up of possible choices.
  • Smart Embedding of External things. For example, YouTube and SoundCloud links auto-embed, perhaps Twitch and other live streaming services too, Tweets, and really, anything that makes sense.
  • Smart Embedding of Internal things. Paste a link to a Game or Tool, and we auto-insert a little mini-widget. It’ll probably make sense to do it for other internal types like Events, Users, maybe Tags and Platforms as well. In some cases there will be variant URLs (i.e. /user/myname/game) that shows a personal game list instead of your personal info. If it makes sense, and there’s something worth showing (beyond a basic hyperlink), we’ll probably do it.

What’s new with submitting games and things?

Oh boy, here we go:

  • Though not actually required, you will be encouraged to sign up for an event before it starts.
  • Tags. Is your game a 5-Player Local-Multiplayer One-Button Platformer with RPG-Elements and a Colorblind-Mode? We got that.
  • Tools. Made in Unity, RPG Maker, and Pygame, using Tiled, Photoshop and GoatTracker
  • Platforms. Okay, we had platforms before, but now we can be a little more specific. Also…
  • Find games by Tags, Tools used, and Platforms: Yes finally, I’ll be able to tell you exactly how many Unity games there are. And not only games in an event, *total*, for all events! More usefully, as we start collecting the data, we’ll be able to start tracking trends and the popularity of tools within the community.
  • Submit Post-Compo (Post-Jam) Games: Did you remake/redo your game after the event, and publish it somewhere? You can add it!
  • Submit “Late” Games: Did you not finish on time? Did you make a game inspired by a Ludum Dare theme from 5 years ago? You can add it!
  • Add Games from Other Game Jams: Do you 1GAM? Do you Global Game Jam? Great! You can add those too!
  • Add MORE games: You’ve added all your Jam games now, what else have you made?
  • New Submission Types. For future Ludum Dare stuff, we’ve added support for several non-game submission types. Again, this is support for them! This doesn’t mean Ludum Dare is accepting these sort of submissions (not yet anyway).
  • New Submission Type: Demos and Intros. Do you rock the demoscene? Great, we support those too! ALSO, alongside some of the bigger game jams, we’re adding a library of popular and historic Demoscene events. Assembly, Revision (Breakpoint, Mekka & Symposium), etc. You tell us what we need!
  • New Submission Type: Media. Do you make videos about Ludum Dare games? We want to catalogue them!
  • New Submission Type: Crafts. A catch-all for everything else. Did you bake a cake inspired by the theme, or a little comic book?

Much of this is the ground work for future features.

  • Where it makes sense, I’d like to make it easy to import games from some of the bigger Game Jam sites.
  • Smart Embedded Audio and Video Media Submissions: Support for SoundCloud, YouTube, and whatever other media services make sense.
  • Picture and Paged Craft Submissions: The idea behind Craft Submissions is they’re things that may not necessarily have a download (but one can be provided). These things will have to be shown off with Pictures and Photos. Just in case paged comics become a thing, we can look in to adding arrow keys or touch gestures to flip pages.
  • This isn’t a feature per se, but I would like to work with the various online game hosts like Newgrounds, Kongregate, GameJolt and Itch to see if we can find a way for us to directly embed games hosted on these services. I’m not that far yet (gotta finish the site first), but I want to start talking with folks about this. :)
  • Similarly, we might be able to streamline uploading directly to game hosts if we can rig up some magic :)
  • I don’t know what to do with it, but there’s always the possibility of a deeper user integration with GitHub. I’m not sure what we’d do with it (generate a wacky graph of how active you were over the weekend?), but they have an API. Feel free to suggest things.
  • Custom Events: Run your own Jam, Demoparty, Bake-off, whatever!

We don’t have an ETA on Custom events, but it’s on the roadmap. It’s probably one of the last things on this list, since there are perfectly good other services for hosting your Game Jams today.

What about an API?

Oh yes, there will be an API.

On the topic of adding other Jam games, I’ve published a specification for an API. I’m calling it the EasyJam Spec.


Effectively it’s a less complicated OAuth (which you could just cheat at, and use usernames for Tokens). I’ve tried to be inclusive of how some of the other Jam websites work, but feel free to tell me if I’ve neglected anything.

Initially, EasyJam is about synchronizing game data between Jam sites. It’s opt-in, and designed to be used securely. You’re not required to use it securely, and details on how do so are mentioned.

Ludum Dare will have a secure implementation of EasyJam, and I’m hoping other sites decide to join us.

What about Teams?

Oh yes, there will be team support.

One of the reasons why “signing up” is now a thing is because that’s how you form teams.

There are actually 2 types of teams:

  • Teams
  • Groups

By default, Teams are one-shot, for a single event only. This is because the people on a team will sometimes change even if the team name doesn’t. We’ll look in to making it easy to clone a previously used team when you participate in the latest events.

Teams have a Captain (the team author), and it’s their responsibility to manage the team, add members, and handle the submission. You’ll also be able to add other Captains to your team.

As a member of an team, your posts will be marked in some way to showcase this affiliation (How we’ll do it is TBD). And when you view the team page, you’ll see a list of posts from all members of the team. Game pages will list all members of the team that created it.

Aside from Teams, there are also Groups.

Groups are stricter in how they work. Initially, there will only be a few Groups, mainly internal ones used to manage permissions, and a few support groups (@help, @editor, @press).

Eventually there will be a process for vetting and approving Groups, but understand this:

Groups WILL NOT be able to submit entries to Ludum Dare events.

Groups are a bit like Subscriptions. As a member of a group, you get notifications to that group.

Groups can be ether public (anyone can join), or private (members must be added manually).

We may eventually open up support communities (Groups) for popular tools. @unity-help, @blender-help, @gimp-help, @photoshop-help, etc. The popularity of Tool Pages will likely play some role in vetting support communities. Like @help is for general Ludum Dare support, help communities will be open for anyone to join, to assist other users with the issues with their respected tool.

And where it makes sense and is useful, we’ll look in to adding other groups. In some cases, it’ll make sense to give ownership of content to a group (for example, if we have an @unity group of Unity Employees, it makes sense that they can edit their own Tool page).

But again, I’d like to keep the number of groups low initially. I want us to feel-out where they are useful.

What about Notifications?

Okay yes, up until now we’ve more or less assumed we support Notifications. We do. It’s the glue that binds together a number of features.

Initially, notifications will be limited to comments (finally, letting you know when someone comments on your game), and the usage of @messages to People and Groups.

Joining a Group is a bit like subscribing to notifications. If you’re a Captain, you’ll be able to control pages associated with your team. If you’re a member, you’re just there to listen.

Eventually we will add private messages, but that’s a low priority. There are plenty of ways to contact people privately outside Ludum Dare, so I’m sure you’ll figure something out. :)

What’s new with the post feed/timeline?

So the feed needs work. Anyone that’s tried to watch the stream during events knows how chaotic it is. Practically every minute there’s a new page of posts, and some people don’t post since they know it wont stick.

Plus, there’s a good reason to consider adding other content besides Posts to the timeline. But before we add more content to the feed, we need to fix it.

So, soon we’ll be:

  • Splitting the Post Feed

Every user will be assigned to Sub-Feed of the main feed.

I’m calling these sub-feeds Leagues. Admittedly, that’s an odd name choice, but in the future I’d like us to have some fun with the split. My thought is that eventually, we may treat the splits like a bit of a sporting team, country (but not actually a country), or a “House” in Harry Potter. We want a diverse group of people in each group, because that’s interesting. We want interesting.

As it is today, things move too fast. You can’t have a discussion during Ludum Dare, because the post asking the question is gone right away. But if we slow things down a bit (by having less content), you’ll be able to get an answer.

So now that we’ve split the feed, what about cool stuff, or people I like?

  • Post Love is Back! Now, Post Love will be the way good posts cross the League barrier. When enough people in a League give it +1’s, it’ll show up for all leagues. That way, you don’t miss popular posts from outside your League.
  • Follow Users. You’ll be able to follow your favourite users in the Ludum Dare community, so no matter what League you’re in, you’ll see their posts.
  • Published Games in the feed. As soon as you click that Publish button on your game, like a post, there’ll be a brief notice in your Leagues timeline. The name of your game, and a banner grahic or trimmed screenshot. They wont be too large, a bit bigger than a tweet. There is a very brief sample of this behaviour on wip.ludumdare.com. I haven’t done any styling to them yet, just shown what it would be like.

Things we’ll be looking in to:

  • League Names. We need to figure out the granularity needed for the public timeline first. Once we know what a comfortable number of users is, we’ll look in to naming the sub-feeds. Then you can say things like “I’m part of Kitten League” or “Zombie League”, fun things like that. It’ll have no bearing on results (we shut-down the leagues once the event ends), but during the Pre-LD hype, I’d love to see playful rivalries between the Leagues. πŸ˜‰
  • Multiple user signups as a single timeline post. Not necessarily a replacement for “I’m In” posts (which aren’t really necessary, but add character to the pre-LD hype). Rather than adding a bunch of individual “who is in?” blips to the timeline, we can group them together in to little blobs. The point of these is that you might see people that you want to follow.
  • AJAXy/WebSockety Twitter-like auto-updates. Rather than reload the page constantly, we’ll look in to notifying you when there are new posts. It probably wont be as aggressive as Twitter (every 10 seconds), but we’ll figure out what works.
  • AJAXy/WebSockety Theme Announcement. Same as above, we’ll look in to a smart way of announcing the theme on the website that doesn’t bring the server down. :)
  • External Posting. I.e. post to your account from Twitter, Facebook, Tumblr, Instagram, or your Blog (RSS). Not everybody likes to log their progress on the Ludum Dare website.

What’s new with user pages?

  • As mentioned above, a chronological list of MORE than just your Ludum Dare games. Games from Other Jams, Demos, Media, Crafts (as soon as we add support for adding them)
  • Any Events you’ve run (MiniLD’s, Custom, etc)
  • Published Games intermixed in your summary timeline, and post timelines.
  • Some new types of Navigation. View your Posts, your Favourites, your Games, who you Follow, etc.
  • New Module: Jammer

I’ll talk about Jammer in a moment.

Here are a couple test user pages on the WIP. Again, try not to pay much attention to what they say or how they look, just that they exist.


Things that we’ll be looking into over time.

  • Featuring of your favourite games (they appear first)
  • Ludum Dare Submission Stats. Graph showing how your submissions have done over all the events you’ve participated in
  • Other Graphs. As we figure out other sensible data people will want to see, we can add more personalized graphs
  • The Trophy Rack. This is going to be a bigger project, totally silly, but I’m all about fun. I’m definitely going to need an artist involved. I’d like there to be a real digital trophy graphic for each of the Ludum Dare categories. If we’re feeling really silly, we might actually build an HTML5 Canvas app with 2D physics that lets you arrange your trophies, and save the layout. And if we’re feeling reeeeeealy silly, we can add breakpoints to the Trophy geometry, so you can smash your trophies in a fit of rage (and repair them with a click, though it would be funny if you couldn’t repair them).
  • User Trophies. This will probably come much later. Rather than the 64×64 images we used to use for Trophies, I think I’d rather we have a library of miscellaneous trophies you can pick from, and a pick a color. That’s my thought at the moment, but if we come up with a nice way to let you generate them, then maybe. Also, User Trophies will be assigned to a specific thing (a game usually), instead of a user like we did in the past. User specific trophies will still be supported though.
  • The Cardboard Box. Completing the Trophy Rack metaphor, a place for your “Coolest Haircut” trophy. Basically, the things you don’t want to show-off on your Trophy Rack. Nobody ever throws away their trophies, they just live in a box. πŸ˜‰
  • Trophies on Featured Games. As we figure out the layout, we’ll find a place to put those important trophies next to the game banner. We might only be able to fit a couple in this view, so you pick which ones matter most to you.

Jammer, we should talk about Jammer.

LD Module: Jammer

jAMMErLogoJammer is new.

Jammer is an extension of your Ludum Dare user page.

You’ve used Ludum Dare before. We put weird stuff in the sidebar, big noisy banners and bars to get your attention, a movie player, potatoes, yadda yadda. It can be nuts, but that’s what Ludum Dare is. This frantic sort of crazy event.

Jammer strips that away. It’s all about you. Just you and your games.

The website (NOTE: link is not active yet):


Where ‘user-name’ is your ludumdare.com user name. Jammer is your user page, without the noise.

Sure, Jammer isn’t for everyone. If you run your own portfolio website, you probably don’t need. But if you’re an active Ludum Dare user and game jammmer, we give you a nice easy to remember URL for you and your stuff. No need to explain to people what a Ludum is, nor debate Dare’s correct pronunciation. And heck, it’s a simple enough URL to tell someone aloud, with your actual human voice. πŸ˜‰

That’s Jammer in a nutshell.

As time goes on, we’ll give you more and more flexibility for customizing your page. Here are a couple WIP links. Please excuse the lack of formatting and style. When it’s done it wont say silly things like “users home page”. It will be styled in a nice way with banners of your games (not text links). At the moment it’s also a bit of an ugly testbed for the Markdown decoder, so try not to criticize what you’re seeing too much, just that it’s there and using the same data as user pages. πŸ˜‰


You’ll note on my page (/pov), I’ve customized the colors, and I added my Real Name. This is done through some Jammer specific metadata we assign, just to show that customization support is coming.

LD Module: ldj.am

This is a minor module I thought I’d mention. It’s doesn’t really have anything to do with Jammer, but it’s loosely related, in that it also deals with URLs.

ldj.am (LDJAM) will be a URL shortener for the main website.

URLs will look something like this (NOTE: link is not live):

ldj.am/4cDfm (/www/public-ldj.am/)

This is in contrast the clean URLs of Jammer, these are designed to be small.

Everything on the New Ludum Dare website has a Unique Id. Posts, Games, even Users and Events. So that crazy string (4cDfm) is a packed version of the internal “Node Id”. For the sake of example, lets say it’s 332,511.

The encoder is something that needs to be tuned. It’ll be close to a 48 bits per character. It’s a combination of the numbers 0-9, uppercase and lowercase letters. If you were to total that, you’d get 62 characters, a mere 2 short of 64 (or base64 encoding). The problem with base64 is there’s a risk of generating profanity and offensive things. So to avoid ldj.am/shitface, some reoccurring characters in English profanity are removed from both upper and lower case. And for legibility, a few very similar characters can be removed (such as S instead of 5, l instead of 1).

To decode, we first decode the packed value. We lookup the Node Id in the database, then we have to recursively look-up the slug-parts of the URL by walking the tree backwards until we hit the root node. All the parts together gives us the true Ludum Dare URL.

Of course, we can do some smart, optimal things when it comes to the reverse lookup. We can cache the slugs of the Hierarchy Nodes by Id in RAM. Even with all the non-Ludum Dare events, there shouldn’t be more than a few hundred of them. That said, this is probably one of the main bottlenecks for Custom Events, ’cause as soon as we open this up, the cache size is no longer in our control (unless we explicitly ignore the custom tree, and just do an extra lookup).

Anyway, once we know our true URL, we emit a redirect (302) to that.

So the ldj.am URL shortener will not be general purpose. It’s specifically for shortening ludumdare.com URLs.

And like everything else, the WIP version is over here:


So when it comes to User pages, you’ll be offered both an ugly URL (ldj.am/b382u) or a clean URL (jammer.bio/johnjoe25). The ldj.am URL will go directly to your Ludum Dare user page, and Jammer URL directly to the clean less-noisy Jammer version of your page.

Holy Ship!

That’s a lot of stuff. There’s more, but some of these things just aren’t as cool.

  • Security. Probably the broadest and most complicated one-word subject there is.
  • Logging in and out. We gotta be able to do that.
  • Account creation and activation. That whole e-mail exchange thing.
  • Password Reset. Yep.
  • HTML to Markdown filter. We’ll best-guess the intentions of HTML tags in imported posts.
  • Reserved Names List. We don’t want people camping names, or doing things that will cause confusion. So no, you wont be able to call yourself Microsoft. But if a few Microsoft employees join the community, and it makes sense that they have a group name, they can contact me and we can set them up.
  • Things I can’t remember.

This is Starship in a nutshell.

What about Event Features?

You’ll note that I’ve only covered User specific features so far. I figure this post is long enough, and at the moment my focus is on User features. Most people care about how Ludum Dare changes for them, not how it changes for me.

As things get further along, I’ll write another post detailing more of the internals of how events run, the job queue, event stage automation, and so on.

That’s all for now. Congratulations, you made it to the bottom.

[cache: storing page]