The entire series is linked below:
- Part One: System Overview
- Part Two: System Overview: Messages and Applications
- Part Three: Screen Scraping
- Part Four: YouTube Parsing
- Part Five: Linking the Video to the Game
- Part Six: Messaging Middleware
- Part Seven: The Console
- Part Eight: The Site
SC Engine is a series of programs and tools that indexes Professional Starcraft videos found on the net into one easy-to-use web site. This first post gives an idea of what the project is expected to do, with the rest of the posts going into the implementation.
For those not aware, Starcraft is a PC game that was created by Blizzard and originally released in 1998. It has withstood the test of time, and in South Korea even has a following that is as popular as Soccer or Pro Wrestling here in the US, if not greater. Starcraft in South Korea comes complete with their own professional leagues. E-Sports as a whole in South Korea has really taken off, gaining great sponsors and recognition. Starcraft is the game at the forefront of this new form of entertainment, drawing the largest crowds and best ratings.
Games are often cast on TV with commentators just like you'd see in any televised sporting event. Games of the more popular leagues are often uploaded to sites like YouTube or the league's own website for viewing, and often referred to as "VODS" ("Videos On Demand").
Some fans, wishing to view the games with commentators speaking their own language, began dubbing their own commentary over the Korean ones. Here's an example of a game in it's original version, and here's an example with an English commentator, Klazart.
SC Engine started coming together for a number of different reasons:
- I was out of work since January (although took some time until April just to relax, living off of savings) and unsure of how well I could express my ability as a python/web developer (much of what I did at my work was in .NET, and even later python stuff I wrote before being laid off never saw it's way into production). Thus, I was looking for a project to show to the world in code what I probably could not easily express in words.
- I wanted to work on SOMETHING. My job had me starting to burn out from coding, working at some pretty tedious objectives. After my break, I wanted something new that was interesting, not the same old "django blog" application. Asynchronous messaging via AMQP seemed very interesting.
- I enjoyed watching Professional Starcraft VODs, especially with the English commentators, but found it a pain trying to find games, then keep track of how all the games I was watching related to each-other. A person who only watched videos from one or two commentators could only watch a portion of the games, leaving them with gaps in the knowledge of how the league is progressing. Since all uploaders and commentators do this in their spare time, they can only cover so many videos.
- Watching games on Youtube, there was a chance of "spoiling" the results of the game. Games can take anywhere from a few minutes to an hour or more to play. Knowing beforehand the length of the game gives clues as to what will happen in the game as you're watching it. Also, because many games are in a "best of x" series, a commentator might upload only the games played, leaving a viewer to be able to easily determine the winner of a match through logic.
Many uploaders will upload "anti-spoiler" videos, that are just small videos that seem like the next game is played, but when you view it just contains a quick message that the match was already decided. I feel like this isn't exactly a great solution: it's more work for the uploaders, and not all uploaders did it anyway.
The result was to create a website that tried to solve these problems.
In it's first interval, the home page would show you all of the leagues, and you would select matches in the league to watch. Then, you could watch each game in that match. Because the entire navigation of the page view games as a first-class citizen (as opposed to watching on YouTube, where the videos are a first-class citizen) you would have a visual guide as to where this game stands in terms of the league (knowing a game took place just before the end of the season, or in the playoffs, or what part of the playoffs, etc.). When actually choosing the game, you would get to pick which uploader's version of the game you want to watch. This allowed you to view more games than you might otherwise have had you just watched the videos of one or a few commentators. Also, since the Starcraft community (a few memebers, specifically) is pretty amazing at their ability to upload most every game played in large events, even if you can't find a commentary in your language you'll probably still have the option to view the original game, albeit with Korean commentary.
Also, I felt it'd be nice to see some other information on the game's page, such as:
- The names of the players in the game.
- The race that that player plays the game with. In Starcraft, there are one of three possible races to select, each with their own unique traits.
- The kespa site occasionally puts the "starting position" of the players on their site, which let's you know where the player will be when you are watching the game.
- An image of the "map". Each game takes place on a different map, each with different layouts and base locations to add variety to the game. Being able to see a picture of the entire map as you watch a game helps immensely with understanding how the game is developing, especially if you're not familiar the particular map.
Right now, work is complete on the first iteration. The site still needs a complete redesign (I just hacked some css) and will probably change a ton. You can see what it looks like here:
There isn't much in terms of data, as I'm still working on the hardware that the engine will run on, but it gives you an idea of the type of things that you might be able to expect.
In any case, that's the background on the project. My remaining posts will dive into the aspects of software implementation.