Welcome to Victory Road...
I'm expecting major inroads into this come the next version 3 (in beta but I've not had the time to look), in the meantime I've been mixing my own ajax & client API with the library with good success. Microsoft were kind enough to design ASP.NET Ajax so it would not clash with other, well know client libraries like Prototype. It just so happens that my Ajax Engine drew some inspiration (and a couple of lines of code to be honest - the "bind" method IIRC) from Prototype. This has meant that with only some minor (although annoying) modification my Ajax engine seems to be able to sit quite happily next to Microsofts and both remain 100% operational.
So without further ado, perhaps it's time to show my Ajax Engine. This has NOTHING to do with MS AJAX but is wholly my own project.
The idea of it really is to provide both an Ajax engine and a client side API for common windows like widgets, such as Treeview and Menus. With the inclusion of a drawing API, this was on its way to becoming a framework by which developers could program applications that work in the browser, without plugins of any kind but would look and act much like a "normal" desktop application.
Previous versions only addressed the developer productivity (and thus, to an extent, functionality) whilst leaving the actual user experience severely lacking in most scenarios. Fine for proof of concept and putting-it-together-quickly jobs to keep the boss off your back but put up any ASP.NET app next to a hand coded one, using Ajax and "tricks" (which no doubt took much longer, and more programming skills to build) and, to a user (the important person!), the hand coded app is always much, much slicker and user friendly. No annoying page "flicker" (or worse, much, much worse) when the inevitable postback would happen, no "losing of scroll position" when the inivitable postback would happen, much greater speed and much less bandwidth usage.
The poster child of the ASP.NET application for me was always Microsoft's own Developer Network (MSDN) 2, a developer site where we can access documentation for various Microsoft Application Programmer's Interfaces (API's). A simple looking page, with perhaps 2 paragraphs of text could equate to a 1.5MB+ download, such was the overhead of the framework and inefficiency of the client interface. If this wasn't bad enough, each and every navigational click could mean yet another 1.5MB download. Even in the broadband era, this is completely rediculous, and yet this was precisely was where Microsoft wanted to take us Web Developers.
Of course these side effects were not made clear to the development community, and I myself used it for a while (ASP.NET 1.1) but just could not justify the usage of it, over and above what it did for *me*. Applications are useless if no one can/wants to use them.
To be fair, Microsoft's argument was always that if you wanted good client interaction, then you should develop "Rich Client" applications. This basically transates into "applets" or Applications that run directly from the web (see Click Once examples below - if they even work for your set-up, that is!). The big drawback there is always the fact that this takes your application out of the browser and has it now rely on other runtimes to be installed on any user's machines. This includes .NET, Java and Flash applications (anything else really and it just isn't a web app at all). It doesn't sound a big deal on the face of it but in these days of security concerned sys admins, any reliance on software that is not installed as standard is a weak point in your ability to distribute your application. Sometimes, not always, this is crucial.
Would Amazon or Ebay have succeeded if users where required to install a program to use them? Probably not and especially not if there was a web based alternative.
Using a Rich Plugin solution, some users will simly not be able to run your software because of admin "Lock down" on their system, some will choose not to because of security warnings, and some will simply not be bothered to download the components or runtimes needed. This can easily mean the difference of success and failure for any business.
Last year, ASP.NET 2 was released, and included some limited abilities to be able to leverage some Ajax like functionalilty without completely breaking the ASP.NET programming model (the entire point of using it in the first place). Gradually, ASP.NET sites have started getting a little better as a result but still the overall postback architecture remained and still I couldn't recommend it for client orientated Web Application Solutions.
Yesterday, Microsoft released Release Candidate (RC)1 of their ASP.NET AJAX product. And hats off to them for recognising that this is the way web apps are going.
"At Last!", I say! Strange that "Atlas" was the code name for this product...an "in joke" perhaps?
For me, this makes ASP.NET finally a viable choice for web app development. And this is a big, big deal as there has never been any question that ASP.NET empowers the developer, it was always that it was at the expense of the user.
Over time, despite the Microsoft marketing engine, it has become clear that the "Rich Client" via "Richer Plugins" solution is only viable when the audience is a known quantity, such as an intranet environment or possibly a public web app with "System specs" attached. This goes for .NET or Java based solutions. Even Flash but to a slightly lesser extent.
The thing is, you must be prepared for when your boss, or the client, questions your decision on the technology you have used to create the software application. If your answer is merely, "But fat client is easier for me to program in" and the spec says "must reach as wide an audience as possible" then you may well be in trouble. On the other hand, if you answer "But the application required high speed 3D graphics" then you are probably safe
The decision to use Ajax or a rich client is one we can make as software designers based on an informed decision, who our target audience is, application scope etc etc. One is not "better" than the other, only more applicable to certain scenarios.
Still not nearly as easy as a straight Java or C# application, but a great leap forward all the same.
But that still leaves a great deal of scope for the Ajax application to work in.
Microsoft now seem to have covered all the bases, from traditional client apps, Smart/Fat clients and now ASP.NET with AJAX. I understand that their AJAX library will now form part of the full .NET framework for Version 3 (which only needs to be installed on the web server, the client only needs their web browser), validating Ajax as a standard model to produce Web Applications. The next version of Visual Studio will likely also support Javacript Intellisense of the client Ajax library.
I believe that this kind of development will push Ajax more and more mainstream (if it isn't already) and will further marginalise the Rich Client back towards the Intranet arena.
The amazing thing is that Microsoft have not only done a "U" turn on their rich client focus, but have also done a "U" turn on the purley postback architecture of their flagship web app framework, ASP.NET. I'm stunned by this but am also delighted. Who would have thought this would be the case just 18 moths ago? This is what I thought ASP.NET was going to be when I first heard of it, back in 2000 or so. How disappointed I was when I finally saw it (and saw through the marketing)!
Put simply, Ajax gives the most, for the least.
This one was a one off I made using the (now defunct in favour of Microsoft's XNA) Managed DirectX 1.1 library and (also defunct) Managed wrapper for ODE, "ODE.NET". Also, there is no DirectX "Engine" here as such, I just wrote this from scratch in C# 2 using raw (well, as raw as it ever gets in C#) DirectX. The car model (Virtua Racing inspired) & track were just created by myself.
The idea was simply to try to get a decent vehicle physics simulation using C#. And you know what? I think it does! Its way better than my previous attempts although it's not perfect but the handling IS realistic, even at high speeds.
The demo uses Microsoft's verion of Java "Web Start", a "one-click" deployment making any new versions of this demo automatically notified to the client (you) so you can either choose to automatically upgrade to the latest version of the demo, or not.
Know requirements are WinXP, .NET Framework 2, DirectX 9.0c etc blah.
You can access the start page here (just follow the on-screen instructions) and the controls are LEFT, RIGHT & UP to accelerate, SPACE to brake and 1, 2, 3 to change Camera Views.
As I write "Web Applications" for a living, it's interesting to me to see that Microsoft have copied the Java way of (effectively) launching an application from a web page. This also gets one over the Java mechanism as .NET programs are listed as normal under "Programs" where Java are listed only in the special Java admin area.
Its hard to get too excited though as, unless the developer is willing to stay within the tight security sandbox of "no-touch" (see previous entry), then the user is always gonna be nervous about clicking that "install" button, verification certificate or no. Still, it wraps up deployment for Real Apps quite nicely and allows them to benefit from automatic updates, without placing any extra burden on the developer to add the functionality (thus are more like Web Applications that can also be launched from the desktop).
With this, Flash, Java and AJAX, all offering Richer Clients for web applications, it remains that only AJAX (when supporting all browsers) is truly open to all and does not open up any extra security risks to the user (as happens when installing ANYTHING new these days).
Its kinda frustrating that there is all this cool tech out there, and the line of Web & Real applications has never been more blurry, but if you want to reach *all* the people *almost all* the time, you still have to jump through the HTTP hoops and operate in the confines of the web browser, using little more than notepad.
Java Games and demos:
I am/was quite chuffed with this engine, it had collisions, a scene graph management system, and the design of the API was based upon my knowledge of Managed DirectX, so a sortof DirectX Lite for Java (in its most recent implementation). To show the similarity with DirectX, here is a code snippet from a typical rendering loop where "m_RootNode" is the root node of the scene management and can be rendered directly (calling all visible children in turn) and "m_Cam" is defined as a "movable thing", and notice how we invert it's matrix so it can act as our camera position node!
this.Device().Clear(ClearFlags.Target | ClearFlags.ZBuffer, new Color(0x00));
this.Device().getTransform().View = CMatrix.Invert(m_Cam.getLocalMatrix());
Of course, not being C#, the syntax is not nearly as pretty, all those horrid C++ style "gets and sets", but basically the API follows the DX design. For anyone interested, here's a full code listing example of the source code used in the Java engine demos below:
So what next? Well you'll notice that my Java 3D engine is lacking a Z buffer. This is because I decided it would not be needed (as this was to be a wireframe engine, not a flat shaded one). However, the flat shading looked so good that I had to have it, but moving over to a "Scan Line" rendering engine is a big step that really also should include a texture mapper. I would fear for the framerate also.
Why? I was just frustrated that a "no touch, sandboxed" C# Control cannot play AND stop even a single sound when embedded in a web page. See Prototype HTML engine here To be more precise, .NET 1.1 cannot play sound without interop (which is forbidden by security, and rightly so). .NET 2 CAN play ONE sound at a time, but trips a secuity exception when you try to STOP the sound. So the new "C# soundplayer class" of .NET 2 ends up being no better than the old style interop to "Winmm.dll". Pointless, and no good for games at all. So then I thought, "why bother with this crap, everyone knows that the best web games are written in Java anyway - and now I can see why!".
This was when I junked C# and moved over to Java (see above) for this sortof thing.
Don't get me wrong, I love C# as much as anyone, its such a pure, clean and modern language but I ended up frustrated that although I could write "Web Applets" using it, the "sandbox" security restrictions imposed on anyone not writing a simple windows control (ie a game with sound and graphics) were too much to live with.
This was the kindof thing I was working on at the time, a "Web Control", written in C#, that could be used to write Web based 3D Games that did not require any installation (or DirectX). A 100% software 3D engine with a small footprint and an API similar to DirectX.
Here are some screenshots of the software 3D Engine while it was in C# development:
C# Software 3D Demo
C# (Managed DirectX) Demos (all MSI installers):
No doubt I will upload the demo in the next few days (after xmas) but wanted to get the screenie up now as it looks OK and represents alot of work & research to get this far. The programming of this version of a collision class was surprisingly straight forward, mainly because the code converted (and simplified from) my existing C++ code.
The biggest headache I had was the fact that when I coded this originally in C++, I created my own Math functions as I was not familiar with the existing C++ libraries (still am not). The plus of doing this was that I knew exactly what each function did and how it worked. This time however, using C# I decided to use the "Math" namespace library as well as the static Vector and Matrix functions where needed, as well as my own stuff. Everything was fine until I noticed that the collision detection failed to work under "certain conditions". Much head scratching later, I found the cause of the problem: Microsoft's Math.Sign framwork function, which I assumed would do what my original did and return a 1 (positive) or -1 (negative) depending on the Sign of a given number.
It turns out that it actually returns a Zero if passed a Zero as an argument!
And a zero is neither a 1 or -1. Totally unexpected by me and caused a weird failure that only a step through the code (not easy in an app that loops at 60 frames per second!) allowed me to see (definately a eureka moment!). Technically I don't suppose its the Math function's fault, a zero is neither a negative or positive number, so I guess it returned a correct answer, but for what I was using it for it was no good, I needed 1 or -1 as part of my check for "PointInPoly"! Anyway, I made my own "Sgn" function, which I can trust to do a good job and testing it has cured the problem 100%.
And then there is Sascha, who seems to be all over the Expert Track a couple of days ago!
A best lap time over THREE seconds better than mine (DickD)?!! Way to go rubber burner ;-)
Anyhow, I picked up my copy from WHSmiths in Newbury. The coverdisk features 50 top shareware & freeware games including: Victory Road, Centipede25 and Space Pong. The Victory Road game is also mentioned on the cover of the CD jewel case. Also it comes with a free copy of The Game Factory (worth £15.99).
I should also say that it was a total fluke that I saw this, I was never contacted by Live Publishing and picked up the magazine while browsing the mags in Smiths (as you do). Sitting down to read it this morning I was interested that the cover of the CD said "includes PC remakes of ..... Daytona USA". Well naturally, being a huge Daytona fan I had to slip the disk in my PC to check it out. While scrolling down the list of games I noticed that the "faithfull" centipede game garnered the "25" monicker. "Hmmm" I thought, "that looks familiar" so I paused while I opened the zip file. I recognised the set straight away. This was my game! Then the penny dropped, quickly scrolling to the last in the list I saw that it was indeed Victory Road that was the "Daytona USA" remake. My disappointment that I didn't have a new Daytona game to play was quickly replaced by my excitement that not one, not two, but three of my games were on a CD compilation sold in the UK :-D, even if the advertisement is a little misleading!
There is a screenshot of Victory Road in the magazine also. Centipede25 is described as "an extremely faithful remake of the classic Atari Coin-Op" (which it kinda is), while Space Pong recieves a "You can't really have enough Pong remakes, especially when they're set in space". Bless!
With "Victory Road" acts it around a running play in the style of "Daytona the USA".
The play offers outstanding 3D-Grafiken, which looks for their-same on the Freeware sector. Naturally also the play passport comes not too briefly and can be even still increased owing to the ONLINE functions.
Let you this play in no case escape!
Couldn't have put it better myself! Thank you FreeGames HQ and google for the translation :)
Another interesting point is the way DirectShow has (not) been implemented into the Managed DX API. The functionality that is available is accessed at an extremely high level but offers little flexibility. On the plus side it makes doing simple things very easy, like ONE line of code to load an MP3 or MPG file and play it!
Also beware the value types! The secondary image in these renders comes from a render to an off screen surface. I made the mistake of continually grabbing a "pointer" to the surface the texture sat on, without realising that I was creating an orphaned handle each time. This caused the program to eat resouces for a good while after the application was closed, as the garbage collector cleaned up the sufraces once the Direct3D device had been destroyed.
So, whats prompted this "news" item then... well I'm delighted and pleased with myself because I've been working my way with Managed DirectX and C# and have started putting together a new "improved" game engine, this time using the newer technology. My god its sooooooo much easier than previous versions of DirectX, or rather, its soooo much easier than the old books would make out.
I'll explain in a tick but how about a screenie from this new engine.. its 3D y'know ;) This is to celebrate getting the "Free Flight" movement working correctly, and what better way than to load an XWing and take it for a virtual spin?
Ok, so, the old books...I've not read them ALL of course but the theme in each of them seemed to be that they were written around the time of DirectX 7 / 8 and they each ignore the D3DX classes that come with DirecX now. What this means is that you always have to do things the hard way, write all your own code for every little thing - loading bitmaps, sounds, models, create your own file structures - you name it. The D3DX library has been around for ages as well but it tends to get ignored by book authors.
It shouldn't be that hard and really it isn't. You learn about vectors and matrix math but when it comes down to it, you only need some basic concepts before you can happily dive into microsofts supporting classes (D3DX) and off you go, maybe write a game. Thats not to say that your time with the books and the hard labour code has been wasted, far from it, just that all that time you have your "eye off the ball", its a distraction you, I, or anyone, as a learner can do without.
Yes it's only a Pong Clone (like we need another one!) but it has an added twist of Flying Saucers coming to deflect the ball and generally put you off! :) I like! System requirements can go very low indeed, a Pentuim class processor with Win98 & DirectX7 should do the job OK.
Game (and engine features):
Firstly that Victory Road has now attracted in excess of 3,000 downloads! Now thats alot! Its a 33MB file so that's approximately 99GIG of data been downloaded since 4th July.
Secondly, I've spent some time adding DirectX capability to my 2D game engine (as used for Bing-Bong, see below) and intitial speed tests put it waay out in front when compared to DarkBASIC's 2D operations, I'm talking powers of 10 differences in speed here! I may post a few demos in the coming days...
Bing-Bong (58K with media).
VR Back on the front page of the Indie Game oriented site "Game Tunnel".
I hope you enjoy.
Featured link: www.ExpressionSolutions.com
This site is regularly updated using