Login

Thanks for visiting Static Void Games.

Static Void Games offers a couple things:

Here's what's been going on lately:


RikkyPikki uploaded Slap 'em with tha bass

RikkyPikki joined

Gaspard commented on RandomGame

Gaspard commented on nedhead

Aephylis uploaded Put The Head Back On Ned!

Aephylis joined

nikkirubin01@gmail.com joined

zamp joined

Jojo commented on BirthdayJam2015

Kevin uploaded Birthday Jam 2015

retorn joined

scrub joined

pinkushn commented on Filz_m

pinkushn commented on Filz_m

Jojo commented on Filz_m

Kevin's latest blog: Advertising


I've been building this site for a while now (our 3 year birthday is coming up in February). The site started out as a place for me to upload my own little games, but it has steadily grown over those years. The site has been overhauled, has gone open-source, and includes tutorials that are really the "meat and potatoes" of the site.

But through all that growth, I never really considered the site "ready" to really take seriously, or to try very hard to get other people to visit. I've had a little checklist of things that I needed to do before worrying about any of that stuff. I figured I'd let people come across the site naturally, either through Ludum Dare, posts I make in various forums, or google taking them to the tutorials. I haven't really worried about how many visitors we get, how many active users we have (or what that even means for a site like this). I figured I'd worry about that stuff when my checklist was completed, whenever (or if ever) that was.

The list of excuses, er, I mean the checklist

The checklist went something like this:

Uh-oh

I've always viewed this checklist as something that I'd maybe finish eventually. But, looking at it again: we stopped using my awful JSPs when I overhauled the site to use Spring instead. Other people can (and have) contribute to the site since we've gone open-source. The tutorials have been in place for a while now, and I just added the Hour of Code, which I think is a great place for beginners to start. The site now supports libGDX web games, as well as Processing.js and native JavaScript. And as of about a week ago, we now have a forum.

...well, crap.

I realized the other day that this means my checklist is pretty much complete. So now what do I do?

Expanding the Empire

The answer is pretty obvious: I need to become more active when it comes to advertising the site, either through spreading the word myself, or through actual advertisements on other websites. Spreading the word myself is pretty easy: I post on a lot of forums, and the whole point of the tutorials has been to answer questions I already answer a lot, so linking to them is something I already do. And now that we have JavaScript support, that opens up a whole new "target audience" for the site: people who do things like Ludum Dare and don't want to worry about hosting their JavaScript games. Cool, I can message them during the next Ludum Dare.

But how on earth do I start advertising on other sites? Do advertisements even work? How do I do that without being obnoxious?

I hate obtrusive advertisements, or ads that try to trick you into clicking them. I think clickbait sites like buzzfeed are pretty much the worst thing on the internet, and if this blog wasn't already too long I would ramble on about how sites like that are stifling our technological potential.

But I understand the necessary evil of ads, and one advertising network I actually like is Project Wonderful. It was created by Ryan North, who is pretty much the King of the Internet. He does Dinosaur Comics, and Project Wonderful started as a way for webcomics to advertise on other webcomics, in a non-obnoxious way. Since then it has grown to include things other than webcomics, and their ads are usually pretty reasonable. I've even clicked on a few of them, which isn't something I usually do.

I use Project Wonderful to display the one advertisement at the bottom of the site, which I added mostly as a way to figure out how ads worked and then forgot about. But after earning a few cents a day for 3 years, I've got a few bucks saved up in my Project Wonderful account (about half the amount of money it takes to run the site every month, haha, but it's better than nothing). So it seems like a reasonable way to start advertising.

But where?

There are plenty of sites that it would make sense to advertise on- programming webcomics, or gaming sites, or other tutorial sites. But I wanted to start out on a site I actually use. And it turns out that JGO uses Project Wonderful, so that seemed like a reasonable choice.

There were a few options- do I go with the banner ad that's only shown to users who aren't logged in? Do I go with the tall ad that's shown to everybody? I went back and forth, but I eventually decided on the little square ad- half because it was the cheapest, and half because I thought it would be easier to create a tiny ad than a full-sized one.

Now what?

So now I had to create a little 125x125 square ad. I knew I wanted it to be animated, since otherwise nobody would even look at it. But I didn't want it to be obnoxious or obtrusive. So, crap: how do I create an animation?

I ended up using Processing to create the whole thing, then exported it as a series of images, then used ImageMagick to convert that to a gif.

This is the code I used to create the animation:

int ballX = 90;
int ballY = 75;
int ballR = 10;

int xSpeed = -1;
int ySpeed = 2;

int playerOneX = 10;
int playerOneY = 50;

int playerTwoX = 105;
int playerTwoY = 50;

int paddleHeight = 25;
int paddleWidth = 10;

int playerOneScore = 0;
int playerTwoScore = 0;

int topY = 25;
int bottomY = 100;

int bannerId = 0;

boolean oneUp = false;
boolean twoUp = true;

void setup() {
  size(125, 125);
}

void draw() {
  background(0, 0, 0);

  fill(255);

  if(oneUp){
    if (playerOneY > topY) {
        playerOneY = playerOneY - 5;
      }
      else{
        oneUp = false;
      }
  }
  else{
     if (playerOneY + paddleHeight < bottomY) {
        playerOneY = playerOneY + 5;
      }
      else{
        oneUp = true;
      }
  }

    if(twoUp){
    if (playerTwoY > topY) {
        playerTwoY = playerTwoY - 5;
      }
      else{
        twoUp = false;
      }
  }
  else{
     if (playerTwoY + paddleHeight < bottomY) {
        playerTwoY = playerTwoY + 5;
      }
      else{
        twoUp = true;
      }
  }

  ballX = ballX + xSpeed;
  ballY = ballY + ySpeed;

  if (ballY - ballR < topY) {
    ySpeed = ySpeed * -1;
  }

  if (ballY + ballR > bottomY) {
    ySpeed = ySpeed * -1;
  }

  if (ballX < playerOneX + paddleWidth) {
    xSpeed = xSpeed * -1;
  }

  if (ballX + ballR/2 > playerTwoX) {
    xSpeed = xSpeed * -1;
  }

  rect(playerOneX, playerOneY, paddleWidth, paddleHeight);
  rect(playerTwoX, playerTwoY, paddleWidth, paddleHeight);

  ellipse(ballX, ballY, ballR, ballR);

  stroke(255);
  line(0, bottomY, width, bottomY);

  fill(255);

  rect(0, 0, width, topY);
  rect(0, bottomY, width, height-bottomY);

  if (frameCount % 30 == 0) {
    bannerId++;
    if (bannerId == 4) {
      bannerId = 0;
    }
  }

  if (bannerId == 0) {
    fill(0);
    textSize(12);
    text("Want to code?", 13, 20);
  } else if (bannerId == 1) {
    fill(0);
    textSize(12);
    text("Learn to code...", 15, 20);
  } else if (bannerId == 2) {
    fill(0);
    textSize(12);
    text("...in one hour!", 15, 20);
  } else {
    stroke(0, 0, 255);
    fill(0, 0, 255);
    textSize(12);
    text("Hour of Code", 15, 20);
    line(13, 21, 92, 21);
  }

  stroke(0, 0, 255);
  fill(0, 0, 255);
  textSize(10);
  text("StaticVoidGames.com", 13, 115);
  line(11, 116, 119, 116);

  if (frameCount % 2 == 0 && frameCount > 30* 4 && frameCount < 30*8) {
    TImage frame = new TImage(width, height, RGB, sketchPath("frames/frame_"+nf(frameCount, 3)+".png"));
    frame.set(0, 0, get());
    frame.saveThreaded();
  }
}

class TImage extends PImage implements Runnable {//separate thread for saving images
  String filename;

  TImage(int w, int h, int format, String filename) {
    this.filename = filename;
    init(w, h, format);
  }

  public void saveThreaded() {
    new Thread(this).start();
  }

  public void run() {
    this.save(filename);
  }
}

I originally coded a little game of Pong, but controlling both paddles was annoying, and it looked dumb when a player scored a point. So I ended up with this fake version of Pong. It looks like this:

advertisement animation

I know, it's pretty horrible, but one thing I learned is that I am not great at creating advertisements.

But the point is that it worked, and it's currently up at JGO (it will only stay up until somebody else outbids me, so it might be down by the time you read this). It was pretty neat to see, but that's probably because I'm a giant dork. It's been up for about 12 hours, and it has 1500 views and 10 whole clicks.

What now, emperor?

That little ad is only a first draft, just to figure out how the whole process works. I obviously have to improve that: making it less annoying, make it loop more smoothly, and make it more obvious what I'm actually advertising. I'd definitely appreciate any input you guys have about that: how would you advertise the site?

From there it's pretty easy to advertise on other sites through Project Wonderful. Do you guys use any sites that I should advertise on specifically?

I also want to try out other advertising schemes, and eventually compare them (and write another blog post full of too much information). How do twitter's sponsored tweets work? What about facebook? Google ads? How do they compare? How do they each affect visitor counts? I think that might be pretty interesting, and maybe even useful to other people.


This blog entry is much longer than I originally intended, and probably not very interesting. Oh well, thanks for reading!


Comment here.

Static Void Games is open-source!