Dungeons & Dragons Online: Stormreach

I purchased Dungeons & Dragons Online: Stormreach Saturday evening before catching Ultraviolet. Upon creating my account and logging in at midnight, ALL 14 servers went down at the same time. Upon reading the forums the predictable bitching, threats, and sarcasm ensued. The posts grew at a exponential rate in response to the vague “we don’t know why all the servers went down, we’re currently investigating” announcement.

I figured, however, that this was a good sign. Star Wars Galaxies had a lot of server glitches in their initial 6 months with a scathing forum used as the sole place for customer support, announcements, and feedback. Additionally, I had gotten beta notices months ago about 3 distinct server peak tests so I had assumed it was either a code problem they knew about already (since they were taking them offline Tuesday for half of the day), or that all of the TV advertisting starting from Sci Fi Friday coupled with Spring Break meant they were vastly overwhelmed in the amount of players.

However, upon logging in, there was a lot to be desired. Some are my opinion but some are fact. For starters, there are no text bubbles. This has been debated since the days of Ultima Online & Everquest. Ultima Online had text that you spoke that would appear over your head. This gave you context to who spoke, and clearly defined (expect in a crowded town) who was saying what, and when. You could view the chatlog if you missed something. Everquest didn’t have this and made the visual part of the game really lacking because you interacted with this horribly ugly chat text window littered with colors to seperate content. For a social game, one would think this was old hat. My guess is they assume parties would be formed by those who know eachother in real life, and would use the built in voice chat.

Secondly, there really isn’t isn’t much in terms of public information and control. For examle, NPC’s are differentiated by yellow text for their name which appears above their model, whereas player characters have blue text. You have to physyically click on the characters to get information about them, which is a small thing, but it was a lot easier to see stats for someone in SWQ.

They implemented the concept of world instances. Meaning, if a public town gets too crowded, they’ll spawn a new instance of it. You can even switch between instances if you’re friends happen to be in the “same town, different instance”. Town population is definately a problem that needs to be solved. SWG suffered from this pretty bad. If you went to any main town on Tatooine on a Saturday night, lag was prevalent and and your fps low. However, while this may be a great technological solution, it kills the connectivity aspect. Suddenly, you’re town is meaningless, and the feeling of connectivity is lost. This is excercabated by the “private dungeons”.

One problem in massively multiplayer online games is if a particular dungeon is popular, suddenly overcrowding becomes a problem. It’s a race to battle over who gets to kill the monsters, usually resulting in hordes of well equiped individuals unleashing hot fury onto any monster or villian unlucky enough to “spawn” in their midst. Since they do, this spawn -> pounce -> process is repeated since most games provide powerful monsters in remote dungeons as gaining a lot of experience and treasure. Since it’s overcrowded you have to work that much longer and harder. Going at remote hours doesn’t help since in this 24 hour world, there is always someone awake in the US, UK, Australia, Korea, or Chinese farmers.

DDO’s solution is to spawn a unique dungeon just for you and your party if you have one. While this really adds to it, also removes yet another feeling of connectivity for the MMO world. It seems to me that DDO was really aimed at providing a small group of people the ability to play online together vs. creating an online world like other MMO’s. That being the case, they really did it wrong. They should of just spawned an entire world instance for a set group instead of mixing the public worlds to private dungeons. The concept just doesn’t work well, and removes a lot of the flavor. The one success of SWG over Everquest was the “no loading screens” while traveling around. Granted, travelling to a planet did generate one, but one could wanter the entire planet of Tatooine, visit a multiude of towns and enemy bases and not generate a loading screen once. It really helped give the world a feeling of connectivity and being alive and growing.

This makes the server crashses worse. If you’re game isn’t to that caliber, then I’d expect your hardware to work as good or better… but it doesn’t. And the game itself lacks in a lot of areas, mainly small, but they all add up to make it not fun. SWG set the bar pretty high, and although I haven’t played World of Warcraft, from talking to friends it sounds like they got the “working product” part right. DDO’s server crashes are still acceptable considering we’re 2 weeks into the game… it’s still laughable this stuff isn’t caught in beta, but if SWG was any indication, “good enough software” in the MMO world is finding the bell curve of where those will accept sh** will continue to stay even when you give them the most horrendously piece of junk product that works enough to keep them satiated. If you can keep it at, or slightly above that level, you can ignore the millions of frustrated customers because at the end of the month, they still bought your game for $50 bucks and still pay their $10 a month… all 6 million of ’em.

The lack of player created content is pretty bad too. Character customization is pretty low, and clothing from what I’ve seen is standard. All items are purchased from NPC’s, providing cliche money sinks. No character houses, shops, or character created economy. Could it be any more processed & pre-fabricated feeling? Eberron the D&D campaign setting has a dark and extremely magical flavor. The near “commodity” of magic provides ample opportunities for Artificers and Alchemists to build player character needed items. It boggles my mind whey they didn’t capitalize on this concept.

Even crazier sitll is how much of a degeneration this game seems from Never Winter Nights. They were an extreme let down to me since I had high expectations lasting over 2 years waiting for the game. Still, they did a lot of things right. Un-obstrusive interface, awesome tools to allow community created content, and an interesting merging of single and multiplayer servers. Hell, even some of the NPC’s speech was audible (those that were important to the story and justified voice talent money).

Bottom line, DDO is just boring. I’m cancelling my 2 day old account, and putting the game on Ebay. Damn shame that such a beloved brand couldn’t even save it.

F.E.A.R.

F.E.A.R. is a first person shooter game, which I bought for the PC. A friend recommended it for multiplayer play, which I haven’t tried yet, but the single player part is pretty cool.

It’s a combination of movies like the The Ring, The Grudge, Resident Evil 2, games like Max Payne, Half-Life’s Opposing Force, FarCry, and DOOM. At least, all elements from the above are what I saw. To narrow it down, you have the ominous, evil psychic presence of a girl like in the Ring, the ghostly apparations like the Grudge, and the secret government experiements like Resident Evil 2.

It has the slow motion gun fights of Max Payne, the 1-man-army feel of Opposing Force & FarCry, and “scared you shitless” of DOOM. I think the engine looked a lot like DOOM, too, although, I had to play the game at very low settings; first game to ever do this to my comp; time to buy a new one!

I started the game Friday night, and beat it last night. I ONLY played the game at night; although the game didn’t really utilize surround sound to it’s fullest, the audio work was an 7 out of 10 regardless, it made the hair stand straight up on the back of neck, and gave me mad goose bumps many a time.

The flow wasn’t as smooth as it was in DOOM; I just felt the pacing of some of the encounters was a little slower, but it had a weird way of compensating. Like, you’d go through 3 offices with no powerups, no ammo, and no enemeies; my guess is, the level designer did this to have you lower your guard and become complacent. It worked a little bit. DOOM however, barely ever allowed you to get too comfortable.

The in game timing, too, was a little weird. Like, it was a lot like the TV series 24, where in game time doesn’t really pass that fast. Pretty much a second in the game is a second in the real-world. So, even though the game took me 4 days to complete playing at nights, only a full 8 hours in game passed.

One thing that this game did well were the animations and timing. Like, just as the camera automatically pans for you to start climbing down a latter, you’d catch a glimpse of some apparation… crazy, uncomfortable stuff, but impecable timing.

Overall, I’d call this a .9 game. There were a few things that didn’t push this game to the next level, like Doom would. It’s really hard to pinpoint; whether it’s the hodge podge of existing gaming & movie metaphors, the slower pace, the little character interaction, the well scripted character interactions that were too few and far between, while quite funny & believable in some instances.

Bottom line, the game’s depth didn’t really get pushed as much as I’d like. For example, you never go “back to headquarters” to regroup. You never re-asses the situation; your commanding officier is clearly a manager, and you the doer. Everything is planned, and the introductory mission statements feel cold, and un-applicable to your current situation; you know what you to do, you don’t need text to tell you, although, you need SOMETHING to do during a level loading animation.

This game is fun, scary, the graphics are hot and I enjoyed it.

Blitting & Double Buffering for Tile Based Games in Flash & Flex: Part 1 of 3

Why should you care? 96% to 6% CPU usage, that’s why.

Flash Player 8 opened up a lot of boilerplate code via the new Bitmap drawing classes in ActionScript. Usually confined to the nether regions of Director via Lingo, one had to utilize the standard vector drawing tools in Flash. With the combination of runtime drawing with the sprite like nature of MovieClips, Flash enabled pretty powerful tile-based & other gaming engines to be created that were very flexible, and eased a lot of the coding pain that was harder in other graphical engines.

Painful meaning, you had to write a lot more code to get the same result.

Performance Bottlenecks – Many Objects

The one issue, however, is performance. The Flash Player has a few performance bottlenecks, 3 of which tile-based games suffer from. The first is object overhead. Because of the way Flash Player 8 handles prototypes of classes, each Object class has a series of slots for functions and properties, 1 of which is for the proto and prototype properties. These allow the class to know what methods and properties he inherits from his base class as well as who his base class is. Walking up this chain of prototype objects to the main parent (Object) is how inheritance works when you call methods on an extended class; if it doesn’t find it on the immediate prototype, it walks up the chain until it does.

There is significant overhead in creating objects, memory wise. Keeping track of all of the objects slot information, etc. results in a extreme downgrade in performance the more objects you create in Flash, specifically MovieClips. The more MovieClips you create, the slower things get, both in code response time and render time.

Vector Drawings – less detail, high CPU cost

A common response is to simply draw everything dynamically. Why create a tile class object directly (extending MovieClip) or indirectly (extending Object, use MovieClip instance via Composition in class’ constructor), when you can just draw the tiles via the runtime drawing tools into 1 movieclip, and handle mouse interactions via hitTest? Since most tilebased games are event-based, using the keyboard as the primary means of interactivity, the only real hardcore math you are doing is keeping track of where the characters are on the screen, the sprites, and determining if they are allowed to move to another tile.

Utilizing meta-tiles, like Grant Skinner & Brandon Hall have spoken about before, you can significantly reduce collision detection if you need it for a smaller area of objects and tiles, thus lowering the amount of code needed to run for collision detection.

This, however, leads to the 2nd issue. The drawing operations, while fast, are vector only. Most tile-based games utilize bitmaps. Drawing bitmaps would require pixel-precision to duplicate in vector, and vector images are extremely CPU intensive. Another option is to merely just attach bitmap tiles as MovieClips, but then you are back to the same problem of too many MovieClips. Even if they are in no way associated with a class (beyond MovieClip by default), you still incur the overhead.

Bigger vector images do not scroll well either. Even if you don’t utilize strokes (since strokes are rendered differently fills, fills being more efficient when compared to strokes), you will notice the larger and/or more complex you make your vector drawing, the lower your framerate gets. The bigger and/or more complicated the drawing, the less responsive your scrolling maps and code gets.

Bigger Drawing Area, Less Performance

Finally, both of the above are contigent upon size of the drawing area. How big is your map, and how much are you displaying. Unfortunately the 2 play extremely little in performance. For example, if you’re drawing is 600×600, and you utilze a mask to only show 200×200, performance isn’t significantly improved, even if the stage itself is 200×200. The reason for this is even MovieClips with their visibility set to false, non-shown, or off-screen are still rendered. While the combination of visibility to false and putting them helps, it doesn’t gain you very much.

Bigger images render slower, as do many small images taking up the same size area. A larger stage size renders slower than a smaller one. Both of the above have an extreme curve; I don’t have the trig for it, but basically significant performance gains can be gleaned from smaller drawing areas and smaller stage sizes.

This doesn’t necessarely bode well for Flash Lite 1.1/2 either. While utilizing vector drawing tools sounds attractive for a runtime that only gives you 1 meg or less of RAM to play with, you must understand the phones CPU’s are not extremely powerful.

Blitting

Solving the 3 problems above can be solved via blitting & double buffering in combination with cacheAsBitmap and scrollRect.

Defined succintly, blitting is taking 1 or more bitmaps, and combining them into 1 bitmap. So, if you remember the arcade game Pac-Man, imagine the game itself as 1 big bitmap and each element; the maze walls, the dots, the ghosts, the score text, and Pac-Man himself, as individual bitmaps, or pixels. Each is painted onto the same background, in order: walls, dots, Pac-Man, ghosts, and score. To the end viewer they appear is different elements because every frame some of the elements appear to move. In reality, it is just redrawn every frame, and only those areas that have changed.

This is important for Flash Player because of a few reasons. First, Bitmaps take far less CPU to render. While Flash Player since day 1 has been a vector-to-pixel renderer, you now have true bitmap objects that are just that; a series of pixles with different colors on the screen. Drawing & displaying these on todays machines takes very little system resources. In all fairness, bitmaps take more RAM to display vs. CPU.

Secondly, to create a scenario like the above, you are still just drawing and displaying 1 bitmap for what would of been a large number of sprites in Flash Player 7 or below. While sprites (Flash Player’s MovieClip) offer an easier way to animate and code, they are not efficient, ecspecially for an exteremely small runtime web player that utilizes no hardware acceleration, excluding some for newer Macs.

Double Buffering

You can accomplish blitting in Flash by using the new Bitmap classes. You can accomplish blitting for games by using something called Double Buffering.

Defined succinctly in a Flash Player context, double buffering is a technique used display a bitmap on screen that contains a plethora of other bitmaps. One bitmap is drawn in RAM, with additional bitmaps blitted, (copied) onto it. Then, you copy the finished bitmap from RAM and display it on screen as one bitmap.

This is done in screen drawing in other applications to prevent redraw issues, such as seeing the drawing as its being drawn. However, because of Flash’s single-threaded nature, this is mainly done to simplify coding and still getting the performance increase of only displaying 1 bitmap to the screen.

Conclusion

Thus, a developer has the opportunity to create some really compelling tile-based games in Flash Player now that the performance bottlenecks can be overcome via blitting and double-buffering.

Part 2 will show how you utilize blitting and double-buffering in ActionScript 2 in Flash Player 8, and ActionScript 3 in Flash Player 8.5. Additionally, I’ll show you used to do things, and how you can get your CPU usage while scrolling the map to go from 96% to 6%.

Half-Life 2: The Lost Coast

The long awaited missing level from Half-Life 2 was finally finished this week; you could download Thursday, although, I couldn’t till Friday.

Gotta say, not impressed. I understand the amount of work they put into levels; dabbling a bit myself, I’m amazed they actually completed Half-Life 2 in my lifetime.

However, I failed to see how the new lighting effect (HDR?) was cool, some of the reflections on my box were off, and the level itself had some issues. Re-spawning, Combine soldiers you had killed previously would be stationary, standing models upon reloading the level.

While the level itself was one of the most challenging, it was extremely short. After crashing 5 times, I couldn’t believe it ended that quickly.

I hope the CEO of Valve sends another email like he did the first time and asks why I never log into Steam.

“Because bro, I beat all of the games, and it’s time for something new. Releasing a new Half-Life level, while cool, only occupies 2 hours of my Friday night. Even if I were to play it again, that’s 4.”

While I believe Steam is a great program to purchase and deliver games, it’s only 1 engine; Source. And all of the games are extremely old. While I still enjoy the occasional Day of Defeat game since Battlefield 2 has lost it’s joy, I fail to see how Steam has longevity on my computer other than forgetting I had it installed. I feel they should spend more time making additional games and levels than re-skinning the interface. Spending time on improving/fixing the friends network is dumb too; you all already missed the boat, there are better programs out there to faciliate finding friends in games, and you should use existing presence communities like AOL, MSN, and Yahoo instead of creating your own.

At least I didn’t have to pay for it!

Half-Life 2: Loast Coast