# Tuesday, June 06, 2006

It's been a while since I've said anything about Decal so today I've decided to share some things about the next public release of Decal.  We've come a long way with Adapter and our new rendering code so this upcoming release will likely be the last time you guys see the old view system.  You can also expect a few other components to be completely redone and at least one to be gone forever.

There are two new features in Adapter that will be the focus of today's article.  One will make life easier for devs, the other will make things much more interesting for them.  Firstly, to make development and maintenance easier, I've added another code hook-up attribute to the system, BaseEvent.  The purpose of BaseEvent is very much like that of ControlEvent.  It works on the protected 'system' events that exist as part of PluginBase (which mostly come from ACHooks in the Decal core).  When applied to an event handler, these attributes will automatically hook up and tear down the connection to that event.

[WireUpBaseEvents]
public class Test : PluginBase
{
protected override void Startup()
{
// Network events
// this is the old way of doing it
//this.ServerDispatch += new EventHandler<NetworkMessageEventArgs>(Test_ServerDispatch);
}

[BaseEvent("ServerDispatch")]
void Test_ServerDispatch(object sender, NetworkMessageEventArgs e)
{
throw new Exception("The method or operation is not implemented.");
}

protected override void Shutdown()
{
// old tear down
//this.ServerDispatch -= this.Test_ServerDispatch;
}
}

This may not look like much since once you add the attribute, you only save one line of code.  What it does for you, is guarantee proper shutdown of all of your events.  I've found many times in my code where my tear-down code missed several events.

Now for the more interesting stuff.  Plugin devs often want to share the functionality of their plugin with others.  They also sometimes want to get information from other plugins.  This can't always be implemented to suit all (depending on language/knowledge/etc) so we've added a message notification system to Adapter to help things along.  With the next release of Decal, all Adapter plugins will be able to consume a single event "AdapterMessage", and they will be notified of all messages sent between plugins.  Sending a message is very simple as well, you just derive an object from AdapterMessageEventArgs, add in the information you want to share, and call SendAdapterMessage.

I'll talk a bit more about messages tomorrow, along with some examples on how to use it.

posted on Tuesday, June 06, 2006 9:30:53 AM (Central Daylight Time, UTC-05:00)  #    Comments [0] Trackback
# Friday, December 09, 2005

Brain drain's kept me from generating as much code as I'd need to start the series describing the rewrite of ACAim.  I'm slowly chugging along at it and will start posting once I'm a bit more comfortable with my progress.

posted on Friday, December 09, 2005 1:52:32 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback
# Friday, December 02, 2005

My head's a little clearer now, so tomorrow I'm going to start a series on writing a plugin for the new Adapter in Decal.  Be warned now:  this series will be covering the redevelopment of ACAim from the ground up.  This will include all of the network code and message parsing.  The actual decal code will be very minor compared to the rest.  It should very much prove to be a learning experience for everyone.

posted on Friday, December 02, 2005 1:56:13 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback
# Tuesday, November 08, 2005
A little something that's been stuck in my head of late.
posted on Tuesday, November 08, 2005 6:44:20 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback
# Monday, November 07, 2005

I've almost always been behind the times with my computer hardware.  It wasn't until this past tax season that I was able to have a modern desktop (Athlon64 2800+).  As the holiday season approaches, I find myself wanting to upgrade my workspace again, even though there's no chance in hell of it happening, to include something to make me more productive or something fun.

For productivity, I'd like to see a pair of these sitting on my desk.  I was lucky enough to have a pair of them with a previous customer, and absolutely fell in love with them.  The amount of space the save compared to CRTs and the extra productivity from having that much screen area are wonderful.  I honestly find it hard to work with my CRT combo at home, and almost impossible on the single head setup I have at the office now.

For fun, it would absolutely have to be an iBook.  Either the 12" or 14" model.  With the power of BSD and the simplicity Apple is famous for, not to mention the design put into the new models (durability, battery life, etc), make it hard to not want one.

Ah well, I suppose new toys will have to wait til next taxmas, unless some nice, generous users happen across the paypal button on my projects pages and show their appreciation.  In the mean time, I shall return to my attempts to ressurrect NB2.

posted on Monday, November 07, 2005 10:08:24 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback
# Thursday, October 27, 2005

This is one of the reasons why we hate dealing with the rendering system:  It's hacked.  We take over the call to create that AC makes and "do things" to the object so that Decal knows when to draw.  Well it turns out that our repeating textures were directly related to this.

In the previous version of Decal, the rendering hack consisted of a proxy object, a complete reimplementation of the DX object, that told us what was happening.  Under this model, AC had a reference to our proxy, and we had the real object.  In the new system, we decided to go with another method, vtable patching, which only alters the particular functions we want.

Well, as things would have it, Checksum created the initial hooking setup for Decal3, not Haz or myself, so this little detail wasn't exactly fresh in our minds.  So here we are, testing various ways of drawing to the screen, expecting the DX object to behave normally, but we keep getting this weird repeating effect.  We found a few methods to, ah... minimize the visible effect, but this backfired when multiple huds were generated.

Well it just so happened that Check popped up again while we were exploring the issue, took a glance at our code, and "reminded" us about the hook.  We nearly died when we realized what was actually happening.

To keep Decal drawing on the screen on top of AC's 3D, we hook a DX function called EndScene.  When AC calls this function, we send a signal to Decal to do all of it's rendering work.  Well, in our new HUD implementation, we use a technique that renders on an off-screen texture instead of the main window.  As part of that operation however, we have to call EndScene.  It turns out that our repeating texture was actually a recursion issue that somehow fixed itself before causing a crash.  So we reworked the code a bit to call the real EndScene and no more issue.

Just goes to show you how being too close to a particular project can bite you when the bugs creep up.

posted on Thursday, October 27, 2005 12:09:23 PM (Central Daylight Time, UTC-05:00)  #    Comments [1] Trackback
# Thursday, October 20, 2005

Well,  I wanted to officially give an update on the status of my various projects.  First, Plugin Manager has been updated and works the same as before.  Second, I've started a project to redo the "engine" portion of NB2 in c#.  I'll be releasing this once it's stable as a profile-runner.  It won't have any edit functions, but at least you'll be able to use what you have.

I may continue this project as a replacement for NB2 in the future.  I haven't really decided yet how to progress on that particular matter.

Lastly for the developers, we've been working hard on getting a new and better HUD implementation, and I can honestly say we've made some progress.  Some of it more humorous than others (There should only be *3* images in the shot).

posted on Thursday, October 20, 2005 8:47:52 AM (Central Daylight Time, UTC-05:00)  #    Comments [1] Trackback
# Monday, October 17, 2005

Well, after much pain and suffering, mostly on Haz's part, the new HUD system is finally making progress, and since I'm in a mood, I'm going to talk a bit about how it will work in the .NET Native Framework in an upcoming alpha release.

Firstly, creating a HUD:

// hudRect defines the area of the screen on which we draw
Rectangle hudRect = new Rectangle(10, 50, 300, 16);
Decal.Adapter.Wrappers.HUD hud = Host.Huds.CreateHUD(hudRect);

Now that we have a HUD, lets make it colorful!

Color myBGColor = Color.FromArgb(64, Color.Gray);
hud.Fill(myBGColor);

This gives us a nice, mostly transparent grey background.  Lastly, we'll render some text:

hud.BeginText("Times New Roman", 16);
hud.WriteText("SomeText", Color.White);
hud.EndText();

And that's IT!  Of course there are other neat features that need to be tweaked a bit, and some issues that need to be solved, but we'll have progress or kill someone trying!  Lastly I leave you with a potential outcome of the above code, of course with some additions.

working hud

posted on Monday, October 17, 2005 11:29:40 PM (Central Daylight Time, UTC-05:00)  #    Comments [0] Trackback
# Thursday, October 13, 2005

I've often had trouble sleeping.  I've usually shrugged it off too.  Until recently it hasn't turned out to be that big of an issue, but I can honestly say I should have taken care of it ages ago.  My ability to focus is almost completely gone now, and I can barely get any work done.  Even after taking ambien to help me sleep, I'm still exhausted and unable to concentrate.

Oddly enough though, in the middle of this, I've never had more dreams (which I hear is a side effect of the ambien) or inspiration for stories.  I've penned a few paragraphs of a tale that really intrigues me, and I hope that I can do it justice while writing it.  As the stories, or even the chapters, find themselves whole, I'll be posting them for all to enjoy.  I'll probably post a teaser in a few days after I flesh out some of the direction better.

posted on Thursday, October 13, 2005 12:28:39 PM (Central Daylight Time, UTC-05:00)  #    Comments [0] Trackback
# Wednesday, September 21, 2005

Since it's been quiet on most fronts with the alpha, our continued development, and the impending patch, I just wanted to let everyone know things are rolling along.  I've been having some trouble with my development setup the past few days that has hindered me, but I've mostly solved that as of a short while ago.  Tonight I'll be hitting the new rendering system hard, and may even have some good news or screenies by the end of the week.

Also, here's a quick overview of the status of the plugins/utilities that I maintain:

Zone Launcher -- Retired.  I did however hack up a quick version that works with the new launcher.  It apparently has a naming conflict with some other app that was announced a few days after I posted the update.  Oh well.

Plugin Manager -- Limbo.  I will be updating this as soon as I figure out how.

Mouse Wheel 2 -- Actually updated already.  It just needs to stay current with our changes.  It's also waiting on QueryKeyboardMap to work again.

AC AIM -- Planning.  I will not exactly be updating this;  I'll be completely rewriting it using the new .NET framework.  I'll also be using that time to write a series of articles detailing the development process using the new framework.

Nerfus Buffus 2 -- In Progress.  NB is broken.  Very broken.  I will be updating it, but I'm having to rewrite large chunks of it.  I don't really have an ETA other than to say it will NOT be ready when decal releases.  If time permits, I plan to do my best to have it out with in the month following decal.

posted on Wednesday, September 21, 2005 12:47:50 AM (Central Daylight Time, UTC-05:00)  #    Comments [1] Trackback