May 30
Technical tasks have momentarily waylaid gameplay integration. I’ve restructured the graphic rendering routines to make the entire painting pipeline more stable and efficient. Instead of independent timers and redundant repaints, world rendering is now driven on a single timed thread, which carefully coalesces all collected dirty regions to repaint as little as possible on each rendering cycle. Most of the rendering cycle is no longer performed on the Swing/AWT event dispatch thread (only the painting portion), making the client more responsive in general.
The immediate benefit is a reduction in (complete removal of?) some avatar blips and jumps I was seeing during world navigation. Any remaining graphic issues will be easier to debug in the cleaner pipeline. The improved design will allow for future performance testing and tuning, as more sprites and effects are added. In fact, aside from general improvement, the motive for these updates is to begin a graphics enhancement process, which will finalize the handling of sprites and effects in the rendering system, allowing integration of better graphics, with the goal of providing a richer world environment.
May 29
I was just perusing the Java source code (because I don’t read the morning newspaper), when I discovered that java.util.LinkedList.clear() is implemented to operate in linear time. The documentation does not specify its order of growth, and I intuitively assumed that a linked list clear implementation would be a constant time operation.
Could this be an artifact of early Java development, leaving a legacy of poor performance? The remainder of this article explores the potential to significantly improve application performance when using the LinkedList.clear() operation. Read the rest of this entry »
May 19
Gameplay integration continues. Alpha testers will see a timed task queue pop up upon certain actions (such as drinking potions and changing equipment during combat). This functionality provides the game engine with the capability to coordinate character actions based on situation (such as combat) and game rules (such as attack speed). Actions that result in lingering effects (such as potions, spells, and afflictions) show how long they will last.
Under the hood, character navigation and combat attacks are also integrated with this timing queue. As more rules are integrated, this will allow the player better control over the combat situation. The goal is to ultimately provide a more strategic combat experience. Until then, Alpha testers can have fun attempting to break the new feature.
May 11
I’ve been taking some time to solidify the game design. Alpha Playtesters will start to see incremental updates, as I integrate the latest gameplay decisions. Some simple adjustments have rather fundamental impact, such as altering character ability computations. In addition to these enhancements, there are a number of new gameplay features in the pipeline. The goal of this next wave of updates is to bring Alpha a significant step closer to a feature-complete Beta.
Apr 17
First: Unless you’re a Java developer who enjoys weekend threading and locking studies, don’t read this, unless you want your brain to melt. I’m primarily writing this for my own sake (because I am a Java concurrency junkie).
Second: There is nothing wrong with LinkedBlockingDeque. It follows all the proper behavior of a concurrent collections class (of which I’m a big fan). The situation documented here boils down to a classic concurrency scenario I simply didn’t take into account.
The Exploit: The impact to my MMORPG was that a player could force his/her character to translocate over stretches of non-navigable terrain, such as bodies of water. This would constitute a major exploit. To add to the mystery, it only happened on my development platform, not on the alpha testing network (even over the same LAN). Read the rest of this entry »
Apr 09
Working on my own requires me to run the gauntlet of software development. The process exposes personal and professional strengths and weaknesses, which I believe are difficult to discover in a corporate environment. An employee’s job title tends to become a shell, which can be difficult to break out of. Being responsible for every aspect of this software project (not to mention starting a potential business) reveals where I thrive and where I am lacking in experience.
Since nautical analogy is always the best way to describe a complex situation, consider the software enterprise as an 18th century ship-of-the-line. Read the rest of this entry »
Mar 28
Attention Alpha Playtesters: Alpha 6 is live. This is not a public release, but if you’re an Alpha Playtester, have at it. Read the rest of this entry »
Mar 21
When did it become March? This is madness! According to the calendar it was twenty-one days ago. According to my internal chronometer, it should have been sometime this past week. No, this lapse has nothing to do with March 17th festivities; the strongest drink I’ve had is a Shamrock Shake. I’m not losing my faculties, I’m just working hard.
This is the Year of Gameplay. I’ve been implementing features to directly support final (beta) gameplay. This includes weaponsmithing, concocting potions, resource gathering, combat and weapon proficiency, quest construction, and more.
Maybe I need a break. If only there were an old-school inspired, independently developed, innovatively designed MMORPG available… On second thought, I’d better get back to work.
Feb 09
In a previous article, I described a Concealed Controller Pattern, which allows Java classes to be packaged separately, while maintaining access control to certain sensitive methods. In today’s article, I discuss the shortcomings of Java’s package capabilities and present a simple pattern (the Keyed Access Pattern) for overcoming one case.
Read the rest of this entry »
Feb 01
I just stopped coding for a moment and realized we were a month into 2009. I thought I’d better let everyone know that I’m still hard at work developing the brand-new old-school (so-far, so-called) Potential RPG.
At the close of 2008, I evaluated and distilled my game design goals. My recent focus has been to solidify and enhance the core capabilities of my (so-far, so-called) Potential Platform, in support of these desired gameplay features. For example, a new map management capability allows maps to be either persistent (such as mainland continents) or instances (such as caves to clear).
I’m looking forward to (the rest of) 2009 and plan to have something fun to offer soon…