SPX has been built by taking code from OGUR and refactoring portions of it to be more useful for general game development with the XNA framework. One week ago I loaded OGUR onto my XBox 360 to see how it performed compared to the PC version. That test was intended as a way for me to see if the first of two graphical overhauls looked as good blown up on a big screen as it does on my laptop.

Boy oh boy did I underestimate how important that test turned out to be.

Starting out, I couldn’t even get the console specific project copy to build. Thanks to multiple blog postings I was able to find out that the Xbox runs a different version of the .NET runtime than what runs on the PC. This meant that I first would need to implement some features from .NET 4.0 in .NET 3.5 which OGUR needed to run. Only after I completed this task did I realize that the target runtime could be changed in the Xbox project without adverse effect. DOH!

As soon as the game launched on the console, I knew something was horribly wrong. OGUR had run on the Xbox in its early stages, but I hadn’t taken any time over the past two months or so to test on the console. I didn’t think there would be any major differences between the two platforms, especially since OGUR (and subsequently SPX) are built to dynamically handle both PC and the Xbox.

By leaps and bounds the most dramatic problem was lag. A button on the controller needed to be held down for literally seconds before any movement would occur. Don’t even get me started on the lack of response shown by the HUD for each player. This was a crippling blow to my momentum on the project.

Sitting on my couch, I knew there was no chance of me backing away from OGUR. With the engine nearing completion I couldn’t cut my losses and either build from scratch on another platform or simply pursue a different game altogether. There was certainly a temptation to quit in the back of my mind, but in hindsight my obsessive nature over this project wouldn’t have possibly let me stop.

What could have been a trainwreck for OGUR turned into an amazing bound forward for both the game and SPX. Over the past seven days, I’ve run countless memory and processing performance tests for OGUR both on PC and the console. I’m happy to say that after many hours and an entire weekend spent, OGUR is once again playable in the Xbox. In the process, I’ve added a number of useful helper utilities to SPX which I plan on pushing to the repo once I can grab another spare handful of hours.

 

 

SimplePathXNA (SPX) was refactored out of my capstone project last semester. At that time, it was a very messy Visual Studio project that one could start with as a base for creating their own game. In that stage, SPX was used as the foundation for OGUR. Over the past three months extensive work has been done while expanding OGUR to enhance the usefulness of the SPX framework.

My fiancee and I are interested in working on a simple game during our spare time. In an effort to speed up the development of our prototype for that game, I have pulled a huge amount of updates to SPX from OGUR over the couse of the past twenty four hours. All of these updates are now pushed on the master repository stored at Github (link available on the Projects page). Additionally, a 32 bit DLL of the library is now available for download.

On top of all of that, the SPXDemo has been re-written to use the new DLL instead of being coupled to the SPX project. A new tutorial will be coming once I have a few extra moments later this week.

 

RPI has, as always, sucked me into a vortex of working long hours without much time for breaks. However, some critical work has been done on OGUR with some of my free time. Although I do love working on OGUR, sometimes creating simply isn’t the therapy I need after a tough week.

Thankfully, a wide-world of games exist for me to explore and di-sect when I need something different to expend some brain power. Yesterday, I found a spare hour to spend finishing up my first playthrough of Borderlands. I picked it up the GOTY edition during a recent steam sale for next to nothing, and have played it in short increments since the beginning of the semester. After 27 hours of cumulative play-time, I feel as though there are a handful of small notes worth recording on the experience.

To begin, Borderlands is more than a FPS game. It really is the most fun I’ve had with a modern FPS. Not since some other FPS, but more fun than every other modern FPS. That includes Halo, Modern Warfare 2, etc. I’ve heard from a number of sources that Borderlands falls somewhat flat if you are playing by yourself, but I did not find myself within that group of whiners.

There are a ton of places that rave about what makes the game so great, and I concur with many of those points. I rather want to focus on the negative here. A common mistep I’ve seen in a majority of big budget titles these days is a lack luster ending. Be warned, spoilers ahead.

A story not ending well isn’t so much something that concerns me, with the exception of games like Red Dead Redemption where story is used as a tool for immersion. Rather, the gameplay of Borderlands changes drastically in the last hour or so of the game. For the first 25-26 hours, I found the pacing to be nearly perfect. Driving never felt boring once the waypoints opened up. Useful new weapons appear just frequently enough that I never got too comfortable with any loadout. Furthermore, the game keeps the action tight and frantic without dishing out too much punishment for failure.

Sadly, the final approach towards the Vault places your character into a long winding mountainside trail where guardian after guardian needs to be taken down. This process spans over more than three entire maps. I’d already mastered the different guardian types by the second map, which made getting through the back two a chore. To top it all off, the final boss could be brought down by standing in a single spot and shotgunning a tentacle that was strapped to a rock, while all of the enemy’s attacks failed to connect.

This left a really sour taste in my mouth about Borderlands, but like Indigo Prophecy, this didn’t take away from all the great moments up until that point. Its merely a lackluster tip of a spectacular iceberg.

In stark contrast, I have The Binding of Isaac from Ed McMillen and Florian Himsl. I’ve been loosely following this game since I first heard news of it some time ago. The story was a completely original direction to me, and the gameplay looked to be that perfect balance of new, but not too new.

I’ve spent a little over two hours with it now, and have collected two major complaints. Firstly, the game started for me in a windowed mode. There was no indication of how to get it into full-screen. This may have been a Steam issue, but none-the-less a quick google revealed that the ‘F’ key would get me into full-screen. I had hoped that would solve my second issue with the game, but it did not.

That second issue, has to do with what’s going on with the game logic behind the scenes. The game’s performance ranges from highly reactive to sluggish depending on the number of enemies in a given chamber. We aren’t talking hundreds or even dozens of enemies. If more than three appear for me on screen, then the game lags nearly to the point of making it impossible to play.

To top it off, the game has crashed for me three times now. Once when I was one dungeon away from what appears to be the final dungeon. The game prevents any game state save mechanism, so that programming error resulted in me losing a possible first completion of the game.

I bring this up not to tarnish anyone’s reputation. I don’t even bring it up to complain. Rather, I mention this because I understand how difficult it can be to debug a game that is heavily grounded in randomly generated content and game play. Its a challenging task, but after my frustration with The Binding of Isaac it is a top priority that no one playing OGUR will walk away annoyed simply because I forgot a test-case.

With that said, it appears as though Ed McMillen is currently shooting out a plethora of Tweets to early buyers that are having similar complaints. Its great to see a developer who cares enough about the project’s he puts out (even the one’s that come from a game jam) to interface with annoyed players.

 

There exist two good reasons to build a piece of software:

  1. Someone needs it
  2. Someone wants it
While reading In The Plex there are a number of times where Brim and Page seem to rub the majority of people the wrong way. This has been a major aspect to the company’s history and sticks out in my mind at almost every turning point.
Their difference in viewing life seems to frequently defy commonly accepted truths and carries a sense of certainty in things that others deem impossible. It is in this segregation from commonly sought after goals, such as money or fame, that they are able to truly innovate. They don’t read the latest research papers and implement the theoretically explained algorithms. Instead, they create brilliantly insightful algorithms around real-world data.
My takeaway from this is that I see too many people working on projects simply because they’ve been told to work on them. They might not find the product useful or believe anyone wants it, but they desire a paycheck at the end of the day. Certainly that’s a reasonable expectation to have of the software you pour yourself into, but those ideals will always be an obstacle to both fulfilling a passionate love of software engineering and creating truly remarkable applications. Software isn’t just about what can be done today, its about creating the tools needs to build a better tomorrow.
 

“All work and no play makes Jack a dull boy.”

Truth.

An easy mistake I’ve fallen into time and time again is giving too much energy to a project I love. Without fail, this leads to burnout. OGUR is a very important game to me, so the time spent doing other things is equally important to the amount of time writing  the game’s code.

Now the underlying architecture behind OGUR is nearly finished. All basic functionality is there and time is mostly spent on both cleaning up implemented features to ease their extension, and imagining awesome things to build for the game using my newly polished tools.

In an effort to prevent any burnout on this project, my calendar has a lot more from 9 to 5 than building an awesome video game. Other activities include: watching my soon to be nephew-in-law, cooking, running, playing a new instrument, reading books that have nothing to do with programming. Additionally, I’ve been playing video games…and lots of them.

With all that said, here is what has been implemented in OGUR over the past two weeks:

  • Made a lot of code follow better design principles
  • Implemented a customized path-finding algorithm based on A*
  • Built the different skill classifications (Ranged, Self, and Cloud)
Mind you, that clean up was the majority of the work I’m doing right now. The plan is to have this foundation fully in place come next weekend when I leave for New Jersey. Then, while at the shore, I can focus solely on adding unique content to the game instead of developing a better game engine.
It is very exciting to see this coming together, and I look forward to actually getting some play-test releases out before too much longer!
 

A majority of my writings are technical notes and updates about projects, but this post is going to be a bit different. You see, today marks my first day of not working for my last place of employment after 14 months of hard work. This came about entirely out of new priorities popping into my life in the past month, but still created an interesting situation.

In all the time at the company there have been ups and downs. That’s life. That’s any place you work for…ever. Only, there hadn’t been a time until recently when I truly felt like it was time to move onto other opportunities.

Naturally this created some tension. Suddenly I felt a strong conviction to leave on a loud note. Take up arms with my problems at the company and storm out. Make sure my voice was heard and create some interesting discussions after I left.

Why would I be thinking about this? The job I had was the second most fun I’ve ever had in a corporate environment and the people were decent as well. Regardless, as the day grew closer the stress was running high and the push to speak my mind was rising uncontrollably. I walked into work on one of the final mornings and even had a speech all ready to go for everyone.

That’s when I took a mental step back.

“Why on Earth am I so tense? Have things really been that bad here? I thought I wasn’t leaving because of the company?”

Those few minutes of keeping myself in check helped me to realize something very important. I wasn’t really all that frustrated with the company. I was transferring stress induced by some big changes coming up in my life and focusing it on my job, and easy target.

After having that revelation I quickly threw on a real smile and had some of the best days at the office I’ve ever had. Conversations with co-workers were easier to hold, the code I was writing made more sense, and I learned a lot more about the people I was working with instead of just gaining mastery over the code base.

I think everyone feels at some point like pulling a Milton. Even more so if there are legitimate problems at the workplace. Should you ever find yourself in that position, do your best to keep the gasoline far away from the business. Sometimes the people you least expect it will notice your tact and attitude and open some big doors for you on the way out. Worst case scenario, you show some co-workers (and bosses) that you value them as human beings, regardless of their professional ethic.

Remember, take a deep breath and contemplate the true reasons you are feeling so upset. Oftentimes frustration is rooted in issues so deep that they cannot be understood with a passing thought.

 

Creating the framework needed to make OGUR is a task that is nearing completion. In the likely event that the initial foundation is ready to go this weekend I am taking some time to step back and refresh my understanding of the best way to design games.

Practically speaking, the past month or so has been an exercise in wearing my software engineering hat. Late nights drawing up diagrams to ensure that the framework for the game makes sense and will scale as I extend it to new heights. Refactoring chunky portions of the code base to ease development later on. So on and so forth.

However, phase two is predominantly about two things:

  1. Make a lot of content for the game
  2. Test all of that functionality to ensure that it is fun and balanced at the same time
This doesn’t take nearly as much forethought as it does feedback. Hours and hours of playing by myself and with friends as new content gets added, and then talking about the gameplay experience. To help this transition, I’m stepping away from C# to spend some quality time with some of my favorite games. Today will be Roller Coaster Tycoon.
Mind you, this isn’t so much a vacation away from developing OGUR, not in the least. This is a concrete way for me to change the way I perceive the project from here on out. Of course there will be times when I need to tweak the game’s underlying framework, but more importantly now is to gauge the fun factor. Engineers are boring people that think “fun” means organizing their stamp collection. Gamers on the other hand…
 

A Kickstarter is up for funding the development of OGUR.

Until the 30 day mark, this is considered a canary release. I’m releasing the project to a very small number of people over the first ten days in an attempt  to get some very tough feedback. Taking that feedback into consideration, I will be re-designing some aspects of the Kickstarter page (including a complete redo of the project’s landing page video).

Now that  most of the Kickstarter’s ground work is finished, last night was a great breakthrough for the skills framework in OGUR. I look forward to the reactions of early alpha testers and coming up with new ways to combine skills.

One of the major features of OGUR is a skill system that provides the ability for skills to react to other skills being used. Effectively, this builds a robust piece of architecture that brings new gaming experiences to all players in different ways.

Firstly, a single player would be able to create a more complex plan of attack. Perhaps a large creature gets poisoned and then another skill is used to blow up the creature. Instead of that poison going to waste, it is instead transformed into a gas by the heat of the explosion and is then inhaled by surrounding monsters.

That is just a quick example of why the skill system brings an exciting level of depth to OGUR. Obviously this means multiplayer will have new ways for groups of people to work together towards dominating a floor of enemies.

 

A little over a week is a looong time in terms of feature development on a single game. Within that time period I traveled to Virginia to visit my wonderful better half, brought my sister to visit me for this week, and worked full time at my day job.

Did I forget to mention the twenty tasks completed in the Wedoist backlog? There were many minor changes as well as completely new features. These included:

  • A completely functional inventory and equipment system with items that influence every creature in the game
  • A major tweak of the HUD to improve usability
  • Made creatures have the ability to progress through levels of advancement in character
  • Building a framework for creatures to have a class that influences growth over time
  • Twelve major bug fixes
  • Moving into a testing stage with multiple players participating locally at one time.

The flight from Virginia back to home in Albany was an hour long, just enough time to crush the final two known bugs in the game.

With every distraction removed from the backlog, its time to move into the final leg of constructing the first version of the game for play testing. Only three major features remain for the game, and they are the most exciting for me to work on…so I’m glad they’ve been reserved until last.

Time will be harder to grab while my sister is in the area, but next week should be the perfect opportunity for me to nab up some free time and put the final pieces into place.

A major thought that I keep reconsidering throughout development is the idea of porting this game to multiple platforms after completion. A lot of work has been done to cram a huge amount of dynamic game play into a minimal control set that maximizes a user’s overall experience with the game. This should translate well should I decide to port the game to, say, mobile platforms.

There might be an entire post devoted to examples of how I approached this problem, and what system I’m using to keep game play exciting in multiplayer while providing flexibility for each player regardless of the actions being performed by any respective person.

 

Over this weekend there was a sensei in my presence. Even more interesting was that he watched from the shadows without my knowledge. A full night into developing a major component of Project OGUR and he sprang to begin a battle that I didn’t want to fight.

A challenge was being held. SimplePathXna never had support for text display, but it was always planned as an addition to the (soon to be) library. Project OGUR finally reached the point of development where I needed to show some fonts, so I did what I’ve done with everything else thus far. And that was my fatal mistake.

SimplePathXna makes use of both a handful of singletons and a number of classes which are effectively useless without their publicly available static methods. As soon as text wanted to join in on the fun, I wrote a TextManager class. Just like there existed a GameplayObjectManager class, an XnaManager class, etc etc.

But something was different about adding this Manager. As if a weighty gaze was keeping my normally dexterous hands from doing the deed. It was here that the teacher came for my lesson. It was time to truly understand the reasons why my usages of the static keyword throughout my implementation of Text wrappers was a terrible, crippling design.

A crux of the  mechanics within Project OGUR is local multiplayer with up to four gamers on one screen, with live drop-in and drop-out. While trying to manage text from a single location seemed like a great idea, it was really a lazy solution to a complex problem.

Text was needed not only for each player, but also for numerous properties about each player. By making the TextManager a chunky singleton, each player’s HUD was stored in the same location. This made managing a single player nearly impossible without stomping on the data of another player.

An entire day of programming was not lost however. One of the principles I’ve learned from Beautiful Code is that bad, procedurally focused code can be transformed. Key applications of OOD will turn a pile of wet sawdust into a mighty oak, ready to grow new branches and withstand the changes of time.

This experience with multiplayer is the first concrete example I’ve experienced where throwing tons of logic into “Manager” classes failed miserably. On the other hand, refactoring that barely functioning code was a great mental exercise, and much of my labor was able to stay. Without too much referencing Fowler’s great book on refactoring, the deed was done. An hours and a half led to a much more OO friendly design that provided any given player with its own TextHandler object, wherein the existence of a player meant the TextHandler existed, so many many technical hurdles were lessened.

More explicitly, the issue was that keeping everyone’s data in a singleton meant that the HUD of every player was flushed when any one player changed their display, resulting in a lot of overhead processing. By splitting management into a more cohesive handler that each object could contain as a member, the difficulty in tracking various properties within the management class went away without much hassle.

Above all the programming experience was the way in which stepping back from the raw code enlightened the entire design process. Drawing out the basic flow of data between different classes, and redrawing a handful of times, on a white board lead to a very fluid workflow where each class had a minimal amount of responsibility. It wasn’t a legitimate UML diagram, just enough detail to help me visualize what needed to  be changed.

There are still going to be some singleton’s in the first full release of the SimplePathXna library (which won’t be until Project OGUR is finished as a project to use as a library’s proof of concept). For example, TextManager still exists. However, the first iteration of the class handled multiple operations. It allowed any logic to add text to be shown on the screen at any location using any font. It could also get a static resource that cached the Font information. That second piece, the caching, will still be the core purpose of retaining the TextManager class. TextHandler steals the other functionality as a means of scoping the text data. When a player issues a command, that command can trickle down through some object logic and manipulate the state of that command’s related text in a place where no damage can be done to other players.

I think a good rule of thumb to come out of this is that for most logic, anything that is more than a simple accessor should not a statically available resource. By that I mean something which should be singly available to any other given piece of logic. Say, the sprite used by an object to represent itself. Why duplicate that memory heavy piece of information more than once if it can be avoided?

This is certainly not anything new to the world of OO, but I like documenting the exact way in which the principle of singleton’s not being the silver bullet became clear to me. Perhaps it will help someone else understand the great disasters singletons will cause when misused.

© 2012 Simple Path Studios Suffusion theme by Sayontan Sinha