Wednesday, September 30, 2015

Going Quarterly for a While

Going to University combined with the other things going on has taken up a lot more time than I anticipated. While I have some homebrew related material and soon to have some game projects as a result of some courses I am taking, I have no idea when I am going to get the time to post these. When I do I will be writing and posting postmortems here. I am hoping to be posting at least once a quarter until the end of next year when I will be (I hope) finished with university and will actually have some spare time to do my own things.

Thursday, July 23, 2015

Kickstarter from an Indie Perspective

The fact that I am not talking about 2600 development should be a good indication to regular readers that I have not yet received my final marks for my Homebrew 2600 project. This means that I am falling back to my rant on Kickstarter.

The idea behind Kickstarter, and it's now numerous clones, is that poor artists/inventors are unable to publish their works because they do not have enough money to fund the development of their dream product. This not only is bad for them but bad for the people who actually like the product that they want to develop. The solution, crowd-funding. The people who want to see the product come to light can vote with their wallets and give money to the creator in exchange for product related rewards based on how much they donated. In the case of Kickstarter, the donations only get given to the creator if there are enough people interested in the project to fund the project past their minimum goal.

This sounds ideal for Indie developers, and a number of Indie projects have appeared on Kickstarter. The problem here is that as more people discovered Kickstarter, the more projects started to appear. Now we are at the point where there are far too many Indie projects so just being on Kickstarter is not enough to allow for people to discover your project. Instead, indies must now be able to market their kickstarter in order to get enough attention so that people will look at their project and potentially donate to the project. Needless to say, many Indies are (like me) totally abysmal at marketing so many awesome projects simply never get the attention that they deserve.

The marketing problem is actually even worse. Scammers, who will always exist where there is easy money to be made, tend to be really good at marketing. They, however, are just pretending to be creating a really interesting project with no real plans on even attempting to create something. Their goal is to get the money and then vanish. This makes it worse for newcomers to Kickstarter as if people don't know who you are they are much less likely to fund your project as legitimate Indies look the same as Scammers. Personally, I think the solution to this problem is to have simple prototypes available so potential funders know that a real product is possible. This can backfire, as many people can't seem to comprehend that a prototype is NOT what the final product is going to be like. Even when there are disclaimers on the prototype!

The next problem that happens is the fact that many Indie developers have never actually worked on a real commercial game so have no clue about costs. As a result, you see projects that have a far-lower estimate than they should. Even if they do get funded, they will not have enough money to actually complete their project to the quality level desired. This leads to either products being released half-finished, or projects being cancelled. Both situations reduce the number of people willing to risk taking on a Kickstarter project.

If things were not difficult enough for Indies attempting to kickstart a project, real commercial companies have discovered Kickstarter. In some cases this is a good thing as you have "dead" game categories such as adventure games being resurrected on Kickstarter. This is however bad for the Indies as why would someone take a chance funding an Indie game when they can fund a "real" game? In cases where the commercial developer is actually funding a game using Kickstarter this is not an overly bad thing but unfortunately, there is a trend towards another type of commercial funding that is starting to happen far too frequently.

Some commercial kickstarters are not actually using Kickstarter for funding but are using it as a type of pre-order system to determine if the game is worth developing. On the surface this may not sound too bad, but most of them do not disclose this fact so their funding requirement is substantially lower than the cost of the game. When you have a AAA quality game asking only for a million dollars, when in reality the game is going to cost 100 million, the game that is properly asking for a million is going to look pretty bad by comparison. This means that indies actually having a realistic budget are still at a huge disadvantage because people who don't know what is involved in creating a game see games costing a hundred times that amount being listed as being the same cost.

Would I do a Kickstarter? I actually am thinking about doing one. This would probably be combined with my final Computing Science project assuming my professor agreed. The idea here would be I would develop the prototype and Kickstarter campaign as my final project. The Kickstarter would then be used to decide if this project would be turned into a proper commercial project by funding the project. Essentially, I would be using it for what it was designed for and get money to finish the project.

Wednesday, June 24, 2015

End of the Game

The steam sale is over.  My ever-growing stream backlog grew slightly but for the most part I controlled myself. Most of the games in my steam account are bundle games. In the early days of steam they had catalog sales where you could buy a company’s library of games for less than the few games you were going to buy. Many other games in the bundle are also ones I want to try when there’s time so on the surface the bundle seems like a bargain. The reality is that there is not enough time.

Making matters worse is the proliferation of bundle sites. The first one I heard of is Humble Bundle. It was made up of indie games and wasn’t that frequent. Now it is every week and there are a large number of other bundle sites doing the same thing.

So, I have a lot of games, what’s my point? There are a lot of people in the exact same position. This may not be good for the game industry. If all the people with huge backlogs of games start working through their backlog instead of buying new games, game sales could plummet. Free-to-play games are already making it hard to sell games. Making things even worse are the huge number of game making tools on the market. It is now possible to make a game without any programming skills. As a result there are a huge number of games coming out. People claim that the good games will stand out, but I have seen a lot of great games fail. With the glut of games coming out, do people want to find diamonds in the manure pile?


Essentially game development has become a very difficult field to make money at and things are going to get worse before they start to get better. My solution is to keep it a hobby. There are probably other solutions. I had thought that Kickstarter was one alternative, but I am no longer convinced about it. That is a topic for a different rant. Possibly next month, but I am hoping my 2600 project will be marked before then and that I will be able to get into my 2600 material.

Thursday, May 21, 2015

The changing face of optimization

Optimization is simply the act of taking existing code and making it run more efficiently. This does not necessarily mean faster, as it is certainly possible to optimize code for storage size or for end user efficiency (work flow) or any number of other factors that management/clients deem important. For homebrew development, the key things that need to be optimized for are memory use and speed. This makes sense as the storage space on a cartridge is very limited. Likewise, frame rates are always important to maintain. One of the interesting things about doing homebrew development is it brings home how much optimization techniques have changed over the years.

The scariest change in optimizing is the “why don’t you just use the -O3 flag?” response that less experienced programmers give. I find this scary because it is an indication that compilers have become some type of magic tool to some people. Compiler optimization switches simply tell the compiler to take extra time to produce more efficient machine code. When you consider how lousy the code compilers produced use to be, this is very impressive. In the “old” days, your average assembly language programmer could write better code than the best compiler could produce. Now you need to be a really good assembly language programmer to produce better code making writing assembly language a mostly obsolete skill. Knowing how the machine works, however, will always be important so I do believe that all real programmers should know some assembly language even if they never use it.

It use to be possible to write faster code by employing techniques such as code re-ordering and loop unrolling. This is now done by the compiler when optimization is enabled. As code re-ordering and loop unrolling resulted in ugly and hard to understand code this is an improvement that I actually like.

The biggest change that has happened, and will probably continue to happen, is shifting bottlenecks. When I started programming, floating point was something you used as a last resort as is was so much slower than using integers. Integer techniques such as Fixed point math were used as despite the extra instructions and complexity they were still faster than floating point math. Now floating point is just as fast as integer math, and in certain cases may be faster.

Today’s biggest bottleneck is probably memory. We are now at a point in time where RAM access speeds are significantly slower than the speed that the processor is running at. I have heard it claimed that a cache miss will result in over a hundred cycle delay. This means that techniques such as lookup tables may be a lot slower than you would expect. In a few years this will probably change as technological solutions to the RAM bottleneck are discovered. At which point a new bottleneck will appear causing optimizers to have to change their techniques yet again.

Ultimately the best form of optimization is the same as it always has been. Simply to understand the problem enough that you can develop a better algorithm for solving it. This often requires thinking outside of the box which is something a compiler simply can’t do. When compilers get to the point that they are able to do this for the programmer, we should be very worried as the robot overlords will be soon to follow.

Wednesday, April 29, 2015

Still Alive

It has been a few months since I posted here, but I am hoping to get back to monthly postings shortly. My NES RPG project is going to be taking a rather strange detour but I think I am going to try to allocate at least 10 hours a month towards that project. Before I get into the detour, I think an explanation of my tardiness is required.

When I went to post my January game I was told that I reached the limit for One Game A Month. This got me thinking and I decided to focus on University. I am in the process of upgrading my associate degree into a bachelor degree. I am hoping modern credentials will offset my age when looking for work in the future. I do still plan on occasionally participating in game jams when the topic is of interest and I have no pressing deadlines.

As being in a classroom filled with teenagers and twenty-somethings is not something I want to do, I am doing my courses online (through Thompson Rivers University and as a visiting student at Athabasca University) which gives me a lot of flexibility with my courses. I made the newbie mistake of taking 6 courses at a time with the idea of finishing my degree quickly. In hindsight this is not the optimal way of doing things as jumping back and forth between numerous courses results in slower progress than focusing on just a couple of course would. As most online courses can be completed at your own pace, what I am going to be doing in the future is to just have 2-3 courses going at a time but complete them quicker. This will result in less stress and the ability to take advantage of other opportunities that may pop up.

One of the courses that I am close to finishing is a web design course. The site I am creating for my final project is an Atari 2600 homebrew site. This was chosen so that the JavaScript component could be a TIA simulator. The thought of doing a PPU simulator was there but it is much more complicated than the TIA so the Atari 2600 was chosen. Once I have officially finished the course I will move the site to my own domain but knowing how slow bureaucracies are, this probably won't be until July. This is where the detour comes.

For the next while I want to play around with the 2600. Both are based on the 6502, so much of the work I do on the 2600 will be related to the NES. In particular, work on math functions and random number generation are needed for NES RPG and will be readily portable.

Wednesday, December 31, 2014

2015 Plans

I suppose I should be doing a postmortem of Snowman's Fez, here but since I never finished the game the way I wanted (yes, it's playable, is a game, and has a beginning and an end but it is not the game I wanted to create) I am going to instead take this time to write about my 2015 plans.

I am in the process of upgrading my degree to a bachelor degree through online/correspondence courses offered by a B.C. University. I am not entirely sure this is the best way of learning, but it is the way that most companies who are likely to hire me look for. While I would like the cheaper online alternatives to be viable, they are simply not there yet. This is unfortunate, but unlike the tech industry, change is really slow in the real world. The big disadvantage of going with University online/correspondence type courses is that you don't have the feel for what exactly the teacher is looking for so as a result you must learn much more of the material than would be necessary in the classroom. The ability to work at your own pace (within the time-limits the University puts on the courses) to me is worth the extra work learning.

There are probably many people who think that the extra flexibility means that there should be ample time to finish a game a month. To some extent this is true but knowing how easy it is to procrastinate, one has to take care not to get side-tracked on personal projects. That said, many of the courses I am taking do have some flexibility with the projects that are created. When possible I plan on doing game-related projects. This way I will get to combine my University hours with my One Game A Month hobby. This assumes, of course, that there are no issues with me doing this which I simply don't know yet.

When there are no course projects to use for 1GAM then picking an interesting game jam will be an option. Perhaps a better option would be to take one of the numerous games I want to do more with and do another pass on that game. Implementing the rather neat combat system I came up with for Snowman's Fez, for instance. If anyone reading this has a preference between those two options (original Jam stuff or enhanced existing stuff) feel free to email me with your opinions.

One project I am thinking of doing again is my NES RPG project. I would do a post in the middle of each month focusing on that project, and at the end of each month I would do a rant or a postmortem of whatever game I released for 1GAM. Email me if you are interested in this but I probably won't start doing this until March or April.

So in summary, I am going to be focused on my University work, but do plan on continuing with 1GAM. When/if possible both will be done together.

Sunday, November 30, 2014

Z Escape postmortem

For the zero hour jam, which takes place between 2am and 2am on the day daylight savings time takes place, I created Z Escape. Considering the very short timespan, this is a pretty good game but was not what I was hoping to put on my One Game A Month page. I didn't have time to create anything else so here is my rather late postmortem of Z Escape.

What Went Right

Thankfully the jam has very lax rules which allowed me to make my own rules. My rules are that I could use a template for the relatively generic loading/title/instructions/about screens. I also allowed myself to prepare any art assets that I planned on using. Most of the starting assets are in the zip file I included on the game page (posted the previous day, not that anybody else would ever use them). The only thing I wasn't allowing was the actual coding of the game. This did not prevent me from thinking about the code so I had the code pretty much written in my head before the challenge began. This resulted in me being extremely prepared for the challenge.

Mixed Blessings

 Writing a game, even a simple one, in one hour is a challenge. When you are doing so at 2am it becomes even more difficult. As I am use to going to bed much earlier, I had the a hard time keeping my eyes open. Once 2am hit and I was able to start coding, I found my second wind hit. This, along with a very good idea of what the code would look like, allowed me to finish with time to spare. Still, this is not healthy behaviour so if I ever do this challenge again, will do so differently next time.

What Went Wrong

This may sound like bragging, but I did too good of a job. Now when I have adequate time to create a game but don't do as good of a job as I want then self doubt may kick in. I am going to have to continually remind myself that this jam had a lot of pre-production and things could just as easily gone the other way. Pride is, after all, a double-edged sword. I am proud of what I accomplished but know not to let success get to my head. Lets face it, if I had more time there is a lot I could have done to the game. Still, for spending 0 hours of work on the game it is not too shabby.

I think this jam worked well but if I do it again, I think I would go from 1am until 1am. This still technically works, and allows me to go to sleep an hour earlier.