Why I Am Against SOPA/PIPA

I’ve been meaning to write about the Stop Online Piracy Act and the PROTECT IP Act, and even though they have been put on hold thanks to widespread Internet activism, they’re not dead yet, and laws like them are sure to follow.

I am a game developer and a writer. And I do not support SOPA or PIPA.

Why?

Because I rely on the Internet and copyright, and these laws would undermine both the Internet’s functionality and the perception of copyright by the public in ways that would negatively impact me.

Some Copyright History

Copyright is complicated. There isn’t one law you can look at that incorporates the entirety of it. I wrote an article long ago as a what an indie game developer needs to know about copyright, but a lot of copyright law is related to court case rulings, so to really understand copyright, you probably need an expensive lawyer.

And that’s a mere symptom of the issues I have with SOPA and related laws.

The U.S. Constitution has what is known as the Copyright Clause: Article 1, Section 8 of the US Constitution specifically says that Congress shall have the power to “promote the Progress of Science and useful Arts”, and it specifies how Congress shall do so: “by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries.” Some people have this backwards and they think that the purpose is to protect creators, but copyright is supposed to be a means to encourage the creation of useful things.

Copyright used to last 14 years, with the right to renew for another 14 years. New laws changed the length over the last couple of centuries, and today we have copyright lasting for 70 years plus the life of the author, or in the case of a corporation, 95 years from publication or 120 years from creation, whichever is shorter.

Stacking the Deck

Effectively, copyright is no longer limited. Whereas creators from 50 years ago were able to depend on a rich replenishment of the public domain in their lifetimes (Disney was able to leverage the public domain to build up a very successful company), creators today see that the public domain hasn’t changed since that time. The constant change in copyright law and copyright length benefits those creators and businesses who have the resources and existing copyrights while making it more difficult for new creators and businesses.

Recently, the Supreme Court said that the public domain isn’t permanent, and while the case was about granting copyright to foreign works that were supposed to have copyright in the first place, the idea that the public domain can be made even smaller by an action of Congress stinks for new creators.

But even if you forget about the benefits of a healthy and rich public domain, copyright laws have become more and more biased towards large, existing companies and organizations.

Abuse of Copyright

Remember the Digital Millennium Copyright Act (DMCA)? It was signed into law in 1998, and among its provisions, it made it a felony to merely own the means of circumventing copy protection mechanisms, even if you didn’t use the means. Even if you did circumvent the protection and weren’t committing infringement as a result.

The DMCA was supposedly necessary to protect jobs and copyright owners, yet it was horribly abused, even by those who weren’t trying to protect their copyright at all. Google found that out of all of the takedown notices it has received, more than half involved a business issuing a takedown against a competitor, and over a third were for invalid copyright claims.

For one example, under the DMCA, Viacom issued thousands of takedown notices to YouTube, and some of the content taken down wasn’t Viacom’s copyrighted works. In another example, Walmart, Best Buy, Target, and a number of other retail stores issued a takedown notice to FatWallet.com to force them to remove user-posted sales prices for their Black Friday sales, even though price lists don’t fall under copyright.

In both cases, large companies with lawyers on staff were able to leverage the law against someone else’s legitimate postings. If you are targeted wrongly by a company using the DMCA, your recourse is expensive and slow.

You can read more about other DMCA abuses at the EFF’s Ten Years of Unintended Consequences page, but these abuses are getting to the crux of the matter.

The DMCA wasn’t about protecting copyright. It was about control.

Respect for Copyright Eroded

In the past, most people didn’t create copyrighted works. It was expensive to create and distribute books, movies, TV shows, and other content. There were gatekeepers and high barriers to entry. You needed a lot of capital to start a business that relied on copyrighted content.

Today, 48 hours of video gets uploaded to YouTube every day, and most of it is not produced by the MPAA. Today, print-on-demand and ebook publishing means there are more self-published books than traditionally published books. Today, many long-standing newspapers have found it difficult to compete in a world of citizen publishing. Today, the Internet and social media has created plenty of successful new business models.

And yet we keep hearing about how the major media companies are threatened by all of this individual expression and creation, as if a few companies are supposed to be the sole producers of culture and content.

The problem is, a lot of people act as if the media companies are right!

Most people don’t have much education about copyright law. Again, part of this is because of how complicated the law is, and partly because historically most people didn’t create copyrighted works. But part of it is because the major media companies have done such a good job of telling this story. Politicians are heard parroting absurd numbers provided by the MPAA and RIAA, and any media coverage is entertainment anyway so forget about getting the facts there.

So even though copyright is a tool for all creators, what happened is that the general public views copyright as a tool of the major media companies to abuse customers and make more money. And when laws like the DMCA and SOPA are supported by politicians who clearly have no idea what impact the laws would have on new businesses and new creators, it furthers this perception of copyright as a tool of companies who can afford to buy it.

SOPA and PIPA

If you still don’t know much about SOPA or PIPA, they are twin pieces of legislation that are supposedly about protecting U.S. copyright owners against offshore rogue websites dedicated to piracy. In reality, they would do nothing to prevent actual piracy while giving major media companies more tools to (ab)use the public with. Here’s a very informative video explaining the problems with how these laws would “work”:

Now, there’s a lot of problems that people have identified. Some of it sounds overly sensationalized, yet information security experts, free speech experts, computing experts, and business experts have all agreed that the problems are real. But I’ll leave it to them to talk about the technical, financial, and social problems with the proposed laws.

SOPA supporters say that the people who are opposing it are bringing up worst-case scenarios and that the imagined abuses wouldn’t happen in real life. Well, companies such as Viacom have shown that abuse will happen, and likely sooner than later.

The infamous comparison by the MPAA that the VCR is like the “Boston Strangler” and the broadcast flag regulations are attempts to control when and how people watch movies and TV. SecuROM are attempts to prevent copying that sometimes worked so well that legally purchased games wouldn’t run on some computers. Sony BMG’s rootkit made many legitimate music CD customers unhappy when their computers were compromised, especially as the company’s President seemed to shrug about the issue. And so on and so on.

Why I Care about Copyright Law

The failure rate of entrepreneurship is high, and I have enough trouble bumbling through learning how to run my own business. This crony capitalism makes it harder for me as an independent game developer.

There are new businesses taking advantage of the reality of the Internet. We like being able to take advantage of the ease of creation and distribution. Why do we have to worry about old businesses changing the laws in order to break what new technology allows so that they can continue their old scarcity-based business models? Why are they more important than the people starting new businesses and creating new jobs, especially in this economy?

When they cry that they are having existential dangers that need to be stopped while simultaneously reporting record profits year after year, why is the U.S. government saying that “online piracy is a real problem that harms the American economy, threatens jobs for significant numbers of middle class workers and hurts some of our nation’s most creative and innovative companies and entrepreneurs”? Who told them that? Where is the actual evidence? The Cato Institute analyzed the numbers presented by the MPAA, and it seems we have been conned.

And after all of the duplicitous, all of the lobbyist money buying regulations, laws and policies, and all of the chafing, I am supposed to expect that my potential customers will respect copyright law, no matter how absurd and one-sided it gets? I can’t make a living in a world where the major media companies get their way.

And they’re fine with that. Less competition for them.

And if the above didn’t convince you of the problems we’ll be facing in the coming years from the established media companies, this TED talk by Clay Shirky is a quick summary of the problems laws like the DMCA and SOPA/PIPA pose to small businesses and individual creators:

Integrating LodePNG with an SDL Project

In efforts to port Stop That Hero! to the Mac, I ran into a strange issue involving PNG image data.

See, the level layout in “Stop That Hero!” is defined by a 50×33 PNG. The colors of pixels in the PNG correspond to tiles and structures in the game. Grass tiles are represented in the PNG as green pixels, water is blue-green, mountains are gray, and so on.

This PNG (blown up since 50×33 is so tiny):

Level 4 PNG

results in this level layout:

Stop That Hero! Bringing evil back...

I use libSDL_image in order to load image formats other than BMP, and on Windows and GNU/Linux, everything works as expected.

On the Mac, however, I was seeing a problem. It was as if most of the tile data was not getting loaded correctly. Instead of seeing grass, fields, forests, and mountains, I was only seeing mountains. And structure data was also not loading correctly. The player’s castle wasn’t appearing either, so the game always ends in defeat.

After ruling out endian issues (Intel-based Macs aren’t going to require any data-parsing changes from Intel-based Windows or GNU/Linux), I found that the pixel colors being returned from a loaded PNG weren’t what I expected.

I expect red-green-blue(RGB) data to be (0, 255, 0) for grass tiles, but the color that I was seeing was slightly different.

And it turned out that I wasn’t alone. A thread on the libSDL mailing list discussed a similar pixel bug on Mac OS X, and it turned out to be related to libSDL_image’s use of Apple’s ImageIO for the backend. I’m still not quite 100% clear on what the actual problem is, but the best I can figure out is that ImageIO tries to helpfully convert the image you’re loading so that it is more optimized for rendering on the specific Mac running the code. It’s not a problem if all you want to do is render images to the screen, but is a problem if you’re depending on the pixel data to be accurately decoded.

Last week a fix was introduced to solve this issue, but as it isn’t in the release version yet, and I didn’t want to convert my data or change how I was doing things, I decided a better way would be to replace libSDL_image in my own code. Thanks to a conversation on Google+, I was introduced to stb_image and LodePNG, both of which are liberally licensed, comprehensive, PNG-handling modules of code. By comprehensive, I mean that unlike libSDL_image, I don’t also have to require zlib. You just drop in a couple of files into your project, and you’re done.

I opted for LodePNG because unlike stb_image, it not only loads PNGs but also saves them, and I want to make sure I don’t have to switch libraries again when I get around to creating a level editor. Also, quite frankly, it was less intimidating than stb_image being a .c file that leaves the production of the associated .h as an exercise for the programmer.

LodePNG had some examples associated with it, and while one example uses libSDL, it wasn’t clear how to load a PNG into an SDL_Surface. The example simply rendered the PNG to the screen. It was not what I wanted, and I could not find any code out on the Internet that used LodePNG and libSDL together.

So, in the interest of filling this gap, here’s how to load a PNG with LodePNG and store it into an SDL_Surface:

SDL_Surface * loadImage(const char * filename)
{
    //Using LodePNG instead of SDL_image because of bug with Mac OS X
    //that prevents PNGs from being loaded without corruption.

    std::vector<unsigned char> image;
    unsigned width, height;
    unsigned error = LodePNG::decode(image, width, height, filename); //load the image file with given filename

    SDL_Surface * surface = 0;
    if (error == 0)
    {
        Uint32 rmask, gmask, bmask, amask;

#if SDL_BYTEORDER == SDL_BIG_ENDIAN
        rmask = 0xff000000;
        gmask = 0x00ff0000;
        bmask = 0x0000ff00;
        amask = 0x000000ff;
#else
        rmask = 0x000000ff;
        gmask = 0x0000ff00;
        bmask = 0x00ff0000;
        amask = 0xff000000;
#endif
        int depth = 32;
        surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, depth, rmask, gmask, bmask, amask);

        // Lock the surface, then store the pixel data.
        SDL_LockSurface(surface);

        unsigned char * pixelPointer = static_cast<unsigned char *>(surface->pixels);
        for (std::vector<unsigned char>::iterator iter = image.begin();
                    iter != image.end();
                    ++iter)
        {
            *pixelPointer = *iter;
            ++pixelPointer;
        }

        SDL_UnlockSurface(surface);

        SDL_Surface * convertedSurface = SDL_DisplayFormatAlpha(surface);
        if (convertedSurface != NULL)
        {
            SDL_FreeSurface(surface);
            surface = convertedSurface;
        }
    }

    return surface;
}

Technically, the piece of code related to convertedSurface isn’t necessary, but SDL_DisplayFormat and SDL_DisplayFormatAlpha convert the surface to one that is optimized for rendering. And it doesn’t modify the pixel data, which means that if you depend on it for map layout or for doing interesting effects at run-time, it just works, like you expected.

Prototype-ready Art Assets for Game Programmers

Prototypes are tough for game programmers. If you have a competent artist involved on your project, your game might look way better than it is, which makes it easier to show off the potential of your designs, but it also sets expectations higher. Since most programmers haven’t honed their art skills, programmer art tends to look pretty lame, which makes your game look pretty lame, even if it isn’t. Still, you probably want your game looking its best if you want to attract not only customers but talent.

So where do you turn if you can’t afford an artist’s help yet and don’t want to spend the time plotting pixels yourself? Here’s a few options.

Dave Toulouse of Over00 offered up some free spaceships graphics for your prototypes. Originally made for Star Corsairs, Toulouse is offering them up for no charge for non-commercial use.

Dan Cook has offered lots of free game graphics in the past. There is a fairly complete futuristic RTS graphics set (Hard Vacuum), hand-drawn textures, a Zelda-ish RPG set, and more. So long as you credit Cook and don’t use the graphics in a clone of one of his games, you’re able to use these high-quality assets.

Chris Park released some free graphics for indie developers from an older version of AI War. Some of the art is Dan Cook’s (see? Free assets are great!), some revised and updated. Others are original.

OpenGameArt.org is interested in providing a resource for quality, freely available art for games. Since some of the licenses aren’t ideal for people who don’t want to release the source of their game, you should make sure that the art you do find is something you can in fact use.

Reiner Prokein offers Reiner’s Tilesets. Besides 2D tiles and sprites, you can find 3D models and textures, and sound effects.

Having ready-to-use, high-quality art is great for non-artist game developers. You can concentrate on your strengths instead of trying to struggle through a weakness. Plus, you can always pay someone to replace the art later when you have enough interest.

Do you have a favorite art resource not listed here? How do you make your prototypes look good?

Reviewed: 2011; Previewed: Next Year

Welcome to 2012! I hope you enjoy your stay!

How was the last year for you? Mine was a mixed bag.

First, the good:

  • I went to the Game Developers Conference for the first time, meeting and hobnobbing with the best and brightest of the game industry. GDC was a blast!
  • I got engaged on the balcony of Neuschwanstein Castle in Germany while taking a once-in-a-lifetime trip through Europe with her graduate class.
  • On the way back from that trip, I learned I had a new niece. The last time I saw her, she was already starting to walk.
  • In January, I started my term as a new board member of the Association of Software Professionals and ended up becoming the President two months ago.
  • I finished a game for the Ludum Dare #20 Jam in May.
  • I started taking pre-orders for Stop That Hero! at the end of September, and I released the alpha version of the game for sale a few weeks ago.

Now, the bad:

  • I’m probably in worst shape than when I started the year.
  • I missed the IGF deadline.
  • I’m out of money.

While 2010 saw me make the leap into full-time indie game development, 2011 saw me struggle to stay there. My burn rate estimate said I should last through to October using only my savings. Years ago, I bought a few shares of stock, and I had to sell those recently at a loss (Thanks, economy!) to cover my expenses. While I’ve sold a few pre-orders and a couple of alpha versions since its release for Windows and GNU/Linux, Stop That Hero! isn’t finished and won’t likely pay the bills anytime soon. And I still need to find a way to get the Mac port made for the Mac pre-order customers. I feel terrible about not having it made yet. B-(

So in terms of my business, was 2011 a failure? Yes, in the sense that my project was really late and overbudget, ruining any plans and revised plans continually throughout the year. Yes, in the sense that I no longer have my savings to allow me to focus on my business full-time. And yes in the sense that I feel I wasted my opportunity.

But no in the sense that I’m wiser for it all. I got an education without being saddled with student loans, at least.

Now, I learned a lot. Yes, I learned more about the technical details of making games. I gained some valuable, in-the-trenches experience in running a business on a scale I’ve never seen before.

But to be honest, that’s small comfort when I need look into contract work to make ends meet now.

I got a lot of advice throughout the last year. People told me that I was focusing too much on the technology and not enough on the game, that my insistence on making a downloadable game for GNU/Linux was a poor business decision when I should be targeting mobile and web-based platforms, that C++ was a poor language to use, that I should be focused on making quick games to see if one becomes a hit, that, basically, I was doing things wrong. In other words, I was being way too indie for their tastes, that I should be indie their way instead. B-)

It was all good advice, but I ignored most of it. It was my decision. And if I had to do it again, I’m not sure I would have done it differently.

My problems did not come from the technology I used or my target platforms, even though I could have done more to leverage existing libraries and to learn from open source games. My problems were not a matter of not using Flash or Unity, or of insisting on using GNU/Linux as my base development platform. If any of these were problems, they were mere symptoms.

My real problems stemmed from:

  • a lack of experience.
  • a lack of collaboration.
  • being undisciplined in producing results.
  • ignoring cash flow.

That last one sinks more businesses than any other issue. And I KNEW this fact, yet I kept pushing forward to get my game out as soon as I could, figuring that I would stop then to figure out what I was going to do. Every month ending without a released game had me thinking that I just needed a few more days, and a few more days, and the next thing I knew, it was a year later without a released version of the game to show for it.

When my business plan fell apart, I shouldn’t have put off fixing/rewriting it until after the product was finished. It seems obvious as I write this, but I guess my head was buried in my work, and I wanted to have something to show for my efforts. Instead of running a business, I was only focused on trying to make a game. There’s a lot more to running a game development business than game development.

Sadly, the one piece of advice I took to heart was probably the worst. I stopped writing so I could focus more of my time on game development. My writing is one of my biggest strengths and providers of value, and the less I wrote, the less chance I had of gaining an audience, getting feedback, and interacting with other game developers in general. I used to be the orange juice-drinking indie game blogging guy. Now I’m just another obscure struggling indie.

To the future!

So what’s 2012 going to look like?

Honestly, I’m not sure yet. I’m still figuring out my game plan, but here are some major themes.

I’ll be married in a few months. Woo!

Of course, it means it is even more important for me to figure out how to pay the bills. My expenses are already very low, so it is a matter of getting more income, and right now I don’t see how my business is going to provide it. I’m going to be looking for contract work, but I am keeping an eye out for creative funding opportunities.

As a result, I’ll once again have less time than I like for my business, which means I’ll need to make sure that I spend that time wisely. I intend to focus on creating results more rapidly than I have. Perhaps it means collaborating with other developers or using other technologies, but it will mean holding myself to deadlines and focusing on providing value consistently.

And you can bet that I’ll be writing about my progress.

I hope 2012 is prosperous and full of opportunity for you. I’m figuring out my plan to try to make the most of mine. Happy new year!

Merry Christmas!

Since I’m driving six hours to visit family, a lack of snow makes for safer travels, but it sure didn’t feel like Christmas.

That is, until we had our traditional Christmas Eve dinner. Lots of family, seafood, movies, and poker made it feel like home. B-)

Before family arrived, I spent some time checking out the Ludum Dare 48-hour game development competition entries. There were over 891 entries this last time! Imagine the effort to judge all of those games in a matter of weeks!

I’m also a bit antsy. It feels worrying to me, but I need to take advantage of this rare break from work. Stop That Hero! might have had its alpha release in the last week, but there’s still a lot of work to do.

I hope you and yours are having an enjoyable holiday season!

Association of Software Professionals

Twitter: GBGames