Blog

  • 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

  • XBox: Forgotten Realms – Demon Stone

    This game slipped under my radar. I don’t follow a lot of gaming blogs, nor sites, so do sparse research on what’s good and not; usually by talking to other gamers.

    Not sure how this one slipped so far, though. This was one of the games my wife bought used, but damn it is good. It takes place in the Forgotten Realms, a D&D specific fantasy land that book readers are familiar with; a place of magic, monsters, and deep characters.

    One book writer in particular, R.A. Salvatore, wrote the game’s storyline, proving any good writer can transition to game writing, which the game industry really needs.

    This point, however, is key since he made some of the Realms most memoreable characters, and I own all of his books in the Drizzt Do’urden line.

    You basically play 3 characters thrown together in an adventure to save the land. Each character has their speciality in fighting, and each is essential to winning the games levels.

    The cons. From the title, I scoffed it off in the past. I didn’t like the writer’s storyline from that series he wrote, Demon Wars, and wrongly associated the title with that series. Secondly, the Forgotten Realms logo was soo small on the box and online ads, I didn’t associate it with that. The box does not show the best screenshots from the game, nor imply the gaming style really well. The game itself, at least for me, does not give enough need to block & defend against attacks, nor give you many moves to utilize when you are surrounded by a throng of vicious enemies. You basically hack and slash your way to a super move to break free. Any good gamer would call this game really short.

    The pros. Wow, very good cinemtography. I felt the same way about the introduction of the game that I did about the Playstation 2 Medal of Honor port. Medal of Honor is a World War 2 game for PC that Steven Speilberg helped direct. He apparently point more of his touch on it for the Playstation 2 version because from the get go, you feel immersed and blown away. This game had that magical, epic introduction where you are literally thrown into the action, un-ready, ill-prepared, and fighting for your life. It exactly mirrors what is going on in the game so it gives you this feeling of “wow… holy $H$(*)&$E!” as you feveriously push buttons.

    The graphics are great, and push the XBox to the limit. D&D never looked so good.

    The characters in the game, those that are in books, are just like I’d expect them to be (my wife said that the same thing about those she knew), which is extremely risky to do; you can either do really well, or really bad thus ruining the game. They took the risk and won gloriously.

    The party itself is cliche, which is really good; any good D&D party is cliche by having balanced races, complimentarely classes, and overall a good team. I usually find it hard to identify with some characters in games, namely the ignorant, ogrish brute in FarCry; while I did like him towards the end, that was just out of respect for the tribulations he had to go through.

    Throughout the game you are exposed to each characters flaws, and learn of their history, and how they deal with it. It really adds the suction this game has at pulling you into the story.

    Some monsters have a creative twist, while others are exact to the D&D book rules, giving you a really good feeling about how this game is unique. Buying equipment & skills to pimp your character out feels really cool.

    Finally, they got Picard to do voices! There is one major surprise for Forgotten Realms fans I won’t spoil, but pretty much makes this game worth picking up and playing just for that 1 fact alone.

    Overall, while short, the game rocked, and you can at least play the game again with all of your equipment and skills if you start over. Some of the camera angles get weird, but overall you can tell each level and battle was planned with good shots in advance making this a great weekend ride.

    Demon Stone

  • XBox: Dragonball Z – Sagas

    Last week, my wife felt bad I was getting my arse kicked (and still am Flash Player Team!!!) by an .ocx problem with Flash and having to write 50 billion commands for work. She got me 2 games, one of which was Dragonball Z: Sagas for XBox. It basically follows the part of the famous TV show I started on while in college; where planet earth is getting attacked by Vegeta and everyone is training to make sure they are powerful enough to stop them.

    The cons. If you hit a level boundary, like a side, your character goes into mega-slow mo and stops. So, if you are running full speed, you stop even if you brush it. I could code collisions better than that mess. The game as hard as nuts fighting bosses, even though I put the diffuculty level to Normal (Easy/Normal/Diffucult). I made it all the way to the 3rd level in one sitting, and got owned by Vegeta. There is no physical way to get through mortar attacks, and plasma blasts that could level a house without going to Google to figure out how to beat him. Also, some of the battles are one on one, not what the cartoon storyline usually had happen. More often than not, it was 5 good guys vs. 1 super bad guy; in the game, they usually show real cartoon shots at the end of the battle to give context.

    The pros. Just… like… the… cartoon. They did a very good job. The levels, the style of look, the characters look; it’s all exact. The sound effects as well as the explosions and screen shake all are that insane, epic, larger than life feeling you get when you follow the cartoon’s storyline. They actually show the bosses’ power levels. They hardly ever did in the cartoons, just gasping, “OMFG, his power level is huge!!!!” but never actually showing the #, nor the scale.

    If I can’t beat Vegeta today, I’m trading it back in since it was used for another game.

    Dragon Ball Z: Sagas

  • Test Flash Remoting Services w/ ARP

    If you are developing service calls, but the back-end (Java, .NET, ColdFusion, etc.) isn’t done yet, you can still be productive by setting up test services. Utilizing what the ServiceLocator in ARP does best, you can point to your test service class instead of the real service, which would be a server gateway.

    Your test service is merely an ActionScript class that has all of the methods that your back-end service would have. So, if you plan on calling “createItem” and passing a string as the only parameter to some Java method on the backend, you merely mirror that in ActionScript.

    You do this for all of your methods. That way, you can continue writing your Commands and Business Delegate server calls as normal with plans to use them as is. When the back-end is ready, you change 2 lines of code in your ServiceLocator from this:

    var CreateItemsService = new TestService("", null, "CreateItemsService", null, null);
    addService("CreateItemsService", CreateItemsService);
    

    to this:

    var CreateItemsService = new Service("http://server.com/gateway", null, "CreateItemsService", null, null);
    addService("CreateItemsService", CreateItemsService);
    

    Notice the only thing that changes is you instantiate a real Flash Remoting Service class (Flex RemoteObject’ish), and put in a real gateway URL.

    That’s it!

    Here’s an example of the TestService.as file. This class extends the mx.remoting.Service class so it operates like a real remoting class. It’ll create Operations, return PendingCalls to server method calls, etc. All you do is make an interval so the method call “waits” 2 seconds before responding so it “feels” like it’s taking some time to talk to the server, where in reality there is no server at all, just ActionScript acting like it.

    Bottom line, to avoid the waterfall effect where a client developer is waiting on a server-side developer before she/he can proceed, this allows you to continue coding without a server, and if the server gets fubarred during development, you can merely toggle this back on to continue testing.

    I reckon this would work in Cairngorm too if you chose to use straight ActionScript instead of RemoteObject tags.

    import mx.remoting.Service;
    import mx.remoting.PendingCall;
    import mx.services.Log;
    import mx.remoting.Connection;
    import mx.rpc.Responder;
    
    class com.company.project.model.testing.TestService
    {
            private var speed:Number = 2 * 1000; // milliseconds
            
            private var createItemID:Number;
            private var createItemPC:PendingCall;
            
            function TestService(gatewayURI:String, logger:Log, serviceName:String, conn:Connection, resp:Responder)
            {
                    super.apply(this, arguments);
            }
            
            public function createItem(itemName:String):PendingCall
            {
                    clearInterval(createItemID);
                    createItemID = setInterval(this, "onCreatedItem", speed);
                    createItemPC = new PendingCall(Service(this), "createItem");
                    return createItemPC;
            }
            
            private function onCreatedItem():Void
            {
                    clearInterval(createItemID);
                    createItemID = null;
                    delete createItemID;
                    
                    createItemPC.onResult(true);
                    createItemPC = null;
                    delete createItemPC;
            }
    }