Prometheus Update #7
Tags:

Wow, well yeah, so it has kind of ... been a while. There is so much I could say as to the who, what, where, when, why, and how – but I'll just stick to: Sorry for updates disappearing for so, so long. In the past year, Prometheus has changed considerably: new look, new rendering code, redesigned core that exudes awesomeness, a few new team members, and more.

Welcome Wagon

Though they have both been on the team for a while now, a long overdue public welcome for two new members is in order. Followers of the Halo modding community likely recognize both of these names and they are very welcome additions to the team, as they have both brought substantial skill and knowledge to the team. If you don't recognize their names, then just take our word for it – they're a Good Thing™. Without further ado, welcome SwampFox and ZeldaFreak!

Change of Pace

Starting with this update, we are changing our approach to ... well, updates. The evolution is, in part, due to the current way requiring long dry spells between content and in part because we are at the point that if we filled the update with everything we wanted to say, it would be twenty or so pages long and no one would read it. The change should bring a steadier stream of content overall to the site, though I am certainly not promising anything weekly (we are not a company with 100+ employees).

The current approach calls for stuffing a ton of info from months of development into a single post. Not only is that a cumbersome update to produce, it is also cumbersome to read and – if mapped to a heart rate monitor – emanates the approximate pulse of a corpse. The new approach produces a summarized update, touching on all of the interesting changes since the last update and leaving the in-depth look to "Feature Focus" articles that will be posted in the weeks and months following. The bonus to this approach is that by the time a follow-up article is written for a feature, it has likely evolved even further.

Fresh Coat of Pain

No, that isn't a typo – the fresh coat of paint Prometheus received did indeed result in a fresh coat of pain, too. Last time you saw Prometheus, the UI was pretty typical and the menu system was a pretty confusing mess. About a month after Update #6, we decided to make the move to a completely new UI library, literally starting the UI over from scratch. With the old UI being so simplistic, the basic recreation of it was, likewise, quite simple; however, what has been added to the UI, what it has become, has been a long journey with its share of pain, frustration, confusion, and utter joy.

At first glance, you will immediately notice the similarity to Office 2007's new Ribbon UI; I absolutely love using the Ribbon design paradigm and it has worked out quite well for all of the functionality that we have stuffed in it – menu systems of yester-year pale in comparison. The information we can display in the Ribbon tabs, the instant feedback it can provide, and the more logical navigation it does provide makes it a great choice for our needs.

Another big part of the new UI is tooltips. Before, we used them pretty sparingly – they don't really fit in with typical menu systems too well. Now, we have a tooltip for just about everything and they're pretty verbose, too. At most recent count, there are over 350 tooltips written into the UI; many of those are longer than a single line and many are dynamic to provide context sensitive information as you interact with the program and evolve your map project.

All Proper Like

Prometheus' rendering used to be fixed function only. That means, basically, that everything was hardcoded and could run on the most basic of graphics cards. One of SwampFox's first tasks upon joining the team was to work on the design and implementation of the programmable pipeline – rendering engine improvements so we could make use of shaders.

This move improved Prometheus' rendering from "pretty close to in-game" to "practically in-game". All of our shaders implement the full range of shader animation that Halo supports, which means that water moves, stars twinkle, plasma glows and swirls, and control panels light up as expected, but the benefits go beyond that.

Now that we are using shaders instead of fixed function graphics, we have put a system in place that will reflect changes made to shader tags in the viewport; that essentially means instant preview for tweaking shader values. Keep in mind that our shaders are not perfect – they can never be 100% perfect without access to Halo's source code – but we have done our best to ensure that every little value is appropriately represented to the best of our ability.

The move also means that to make use of our sexy shaders, you will need a graphics card that supports Pixel Shader 2.0. That is a pretty basic requirement and any card manufactured in the past three years that had a price tag higher than $100 should support it just fine. However, if you are stuck without a Pixel Shader 2.0 graphics card, your map will still render and you can still populate it – it just will lack that extra bit of prettiness and shader value syncing.

That Was, Like, So Scripted

So, what has that crazy British sensation rec0 been up to since forever ago? Why scripting, of course! Scripting is something that we have only mentioned in passing in prior updates and that's because our scripting support is far more than a fancy editor – getting it to this point was a lot of work and something we didn't want to unveil until we knew we could accomplish it. It is not finished, but it has come a long way and we are now confident as to what we can and cannot achieve.

Bungie's scripting language (BSL) is based on LISP – a powerful, yet syntactically ... painful language. As much as our masochistic tendencies draw us towards pain, BSL scripting was one pain from which we could derive no pleasure. That is why we decided that we would create our own scripting language, Prometheus Scripting Language (PSL). PSL is very C#-like and should just "click" for most programmers; novices should find it easier to pick-up than BSL.

Creating our own language means we are provided the opportunity to incorporate some pretty cool functionality that would truly be a pain to achieve in straight BSL. PSL provides improved syntax, namespaces, milliseconds instead of ticks, a much less confusing implementation of the begin_random function, and much, much more. Of course, we still have awesome editor features in the works that will make our IDE like a mini-Visual Studio 2005, including auto-complete for references to entities and objects in the scenario.

I'm Into Exploration, Baby

Prometheus has a lot of sources to pull information from – extracted tags, project folders, and the active scenario, to name a few. These three sources can be explored through the following creatively named task panes: Library Explorer, Project Explorer, and Scenario Explorer. Back in Update #5, we showed off the "Tag Explorer", which has since been renamed to "Library Explorer", and the Scenario Explorer. The new Scenario Explorer has some pretty useful improvements but is not ready to show yet; the other two explorers, however, are quite ready to be flaunted.

All of the explorers are built around a very awesome custom TreeView control built by our very own MonoxideC; I am not going to go into details about its implementation – that is for another day and different type of article – but I will tell you this much: it is an amazing piece of work. Basically, it allows us to apply some pretty fancy customizations to a node, depending on its type, state, and other factors. Fancy context sensitive tooltips and right-click menus can (and typically do) exist for each node, providing quick access to information and useful operations.

The Library Explorer will show you all of the tags available for a given game, both extracted and to-be-extracted. These two lists can remain separate or be blended together for your viewing pleasure. There is also an alternative object view that will show tags grouped into object representations, allowing you to quickly find and access specific game objects. Filtering functionality has also been designed and partially implemented, expect to learn more about it in the Feature Focus article.

The Project Explorer is home. It is the home of your project and, most of the time, will be your home in Prometheus. If it involves your map's configuration, contents, or project settings, it lives in the Project Explorer. Since projects are folder-based, you can filter out non-project files or choose to show every file in the folder. Project properties and essential tags – those tags required to make a map run – can be accessed and easily manipulated. All deleted tags will go into each project's own Recycle Bin, so you can always recover deleted tags and only have to sift through what has been deleted from it previously.

Editor Evolution

With the changes made to the Prometheus UI, the Tag Editor needed some minor renovations, too. The look and feel of the Tag Editor still revolves around grouping to make everything a bit more organized, but the presentation has changed a bit. All of the controls for the various Halo data types (i.e. XYZ, ARGB, and Real) have been remade from scratch to better match the new visual style and improve usability.

After the visual and usability updates were completed, ZeldaFreak was tasked with improving the performance of the new Tag Editor, as well as fixing numerous minor issues. The end result is a quicker, sexier Tag Editor UI. Each tab now loads dynamically, so there is no more loading what you do not need to see. Sections are collapsed by default, but their state is remembered when you reload a tag. Fields outside of Sections are now grouped and quite easy on the eyes.

As mentioned previously, tags being edited in the Tag Editor sync up with the viewport so that you have near instantaneous updates when values are changed. The road, however, is a two-way street and the viewport's modifications are also reflected in the Tag Editor. That means when you move an object, rotate it, or interact with it through the context sensitive right-click menus, the tag you are working with will be updated accordingly.

Wait, context sensitive right-click menus? We showed off the scenario palette menu back in Update #4, but we have since evolved the menu system in the viewport a bit further. New menus include: world object, netgame equipment, netgame flags, player spawns, and models – with more to come. The returning scenario palettes menu allows you to browse through the objects that currently populate the scenario's various palettes and insert instances of them into your map; this menu also has a most recently used list for quick access to placing multiple instances of the same object.

Light At Tunnel's End

Over the past year, Prometheus' source code has become relatively massive, almost 200,000 lines of code. That isn't your average, sloppily written code either; it is USDA Prime OO-tastic code, designed all proper-like to be flexible and reusable. It marks some pretty massive progress since the last time you heard from us, and it also means that we will be holding a private beta in the near future. Members of the private beta have already been selected, but are yet to be notified.

There may be an opportunity in the future to participate in a beta, but none exist at this time; please do not contact us requesting to participate in any testing. However, feel free to contact us if you are skilled (at the professional level) in writing clean, OO C# code for either desktop applications or web applications. An extra – highly qualified – hand is always welcome when it comes to finishing up Prometheus and we do need a web developer, skilled in ASP.NET (using C#).

Ahhh, Satisfaction

I must say, it feels good to have a new update out with fresh screens. Doing an update has been something nagging at the back of all our minds for the past year; one of those things you want to do, know you should do, but you feel so guilty for already putting it off so long that you end up avoiding it. Now that cycle is broken, so hopefully we can stay on top of regular content with the new approach we're taking to updates; we have a lot more to talk about, that's for sure.

The Feature Focus articles will be making their way onto the site over the next few weeks, so check back every so often or grab our RSS feed. As always, comments on updates are shut off in favor of feedback via the forums, so please feel free to reply to our Update #7 thread or start your own.