Instead of developing games on the side for the past couple of years, I’ve been deep in a lead UI development position on a product called Intel Visual BIOS, which is the BIOS setup interface one would see after hitting F2 while the 7 or 8-series Intel-brand desktop motherboards are booting. Since Visual BIOS 1.0 released last year, the small development team has been hard at work on Visual BIOS 2.0, and we’ve added a wealth of new features that I like to think of as Intel’s last hurrah in the desktop motherboard area before we stop making boards (however, the Next Unit of Computing will live on).
In addition to the new features, I think we’ve accomplished some excellent things from a software usability perspective. But before I talk about that, the new features!
Screenshot capabilities were one of the most highly-requested features we had on our list, so the capability to take screenshots in Visual BIOS has been added. The interface turned out very nicely, and on selecting an area or taking a full-screen capture, you’ll see our new file explorer.
File Explorer (NTFS and Fat32)
We are still working on expanding the capabilities of what you can do in a pre-OS environment as rapidly as possible, but this is the current interface you will see when you are updating your BIOS or browsing files in general. We’ve tried to make this as smooth and easy as possible, and hope to expand its feature set over the lifetime of Visual BIOS 2.0. It includes a real-time filter for files in folders that are currently being shown.
Enhanced search and right-click Menu for options
Start typing in this globally-accessible search bar and you will see all of the options that match your query, as well as where in Visual BIOS they are located. And if you want to jump to where an option is, a button that appears next to the option you’re looking at will take you to the page of the application where it can be found. As much as we’ve attempted to make settings as easy to find as possible, there is no hiding that the BIOS is still a complex place, but hopefully this makes it much easier to get where you need to go.
More keyboard shortcuts!
This screenshot doesn’t actually show all of the new shortcuts we’ve added yet. Things like Alt-Left/Right now change pages quickly and easily. Arrow keys intuitively move around the application, as does tabbing.
One of the features I thought would be helpful to power users is the ability to create a custom list of options that are accessible from anywhere in the application. It has the same look as the search capability, but shows only the options that have been right-clicked (or CTRL-D’d) and added to favorites. Favorite options are removed the same way. If you’re trying to overclock your system, getting to a list of the settings you care about quickly is best done through this new capability, and they’ll be there whenever you return to Visual BIOS after a reboot and some testing in your OS.
Enhanced fan speed, temerature, and voltage control
In the desktop boards group we’ve always been very proud of our powerful system monitoring and controls. The settings that have always been present were somewhat hard to manage all in one place in the past, and in addition, before Visual BIOS came around they were nested deeply in a text-based setup interface. We really wanted to provide a more modern interface that would allow quick management of individual fans, temp sensors, and voltages, and I think we’ve finally accomplished it through a listing of selectable fan headers and sensors that, all in one screen, allow total control of the system. The little eye icons allow graph lines to be turned on and off so that you can isolate any data you are particularly interested in.
Enhanced Performance Interface
One of the biggest and most important changes to Visual BIOS is a somewhat experimental new interface for the performance settings on Intel boards. I will post images of this interface after our new boards are released, and let users and reviewers discuss its merits, faults, and ultimate usability, but before the new line of processors launches, all I can say is that it is tightly integrated with the new Intel Architecture and quite different from what users are used to, hopefully for the better! Overclocking is quite different conceptually on the new architecture, and the way the settings are presented will be quite different as well.
There are a few more features here and there throughout the application that should make everyone feel comfortable with the new interface, but many of them are user interface tweaks that make navigation quicker and easier, which leads into the usability we’re so proud of with Visual BIOS 2.0.
While developing the UI for VB2.0, keeping in mind navigation and ease-of-use has always been a primary focus. To that end, one will notice many different ways to get to the same place in the application. For instance, searching for an option and “jumping” to another page with an option’s arrow button will take you to wherever you’re trying to go. A similar concept was implemented for the transition between the three home pages of Visual BIOS, where general things like boot order, the Overclocking Assistants, and performance monitoring information can be found, and the Advanced section of Visual BIOS. We’ve added a dropdown that will quickly let users jump to any page within the Advanced section.
Right next to that Advanced button are four global buttons that are present throughout the entire application – screen capturing, favorite options, profile management (including loading defaults), and a sort of meta-BIOS collection of abilities under the wrench icon like File Explorer, Update BIOS, and an “About” section. This makes it incredibly easy to access profiles and favorite settings anywhere, which should in turn make it as easy to “get in and get out” of BIOS as quickly as possible. As proud of we are of the interface, most users will never want to spend more time than is necessary in Visual BIOS, and we’ve done our best to minimize the time it takes to accomplish setting changes or updates.
One final capability that we’ve added to Visual BIOS is the ability to launch EFI applications. This feature is not fully-realized yet, as in general running an application will most likely intend to use a directory and external files, and support for this is not yet fully present. However, for EFI applications like RU.EFI (http://ruexe.blogspot.com/), which take control of the screen and run in their own visual environment, the process of running an application and returning to Visual BIOS is very smooth. Of course, this is always possible from the EFI Shell as well, which can be booted to directly from Visual BIOS by double-clicking it in the boot order list after enabling the “Internal EFI Shell” option.
Intel Visual BIOS 2.0 will launch with Intel 8-Series Desktop Boards later this year.
Intel Visual BIOS 2.0 is an EFI application built into the flash chip on your motherboard, so space limitations have been a big consideration from the beginning. To that end, much of the artwork seen in the application is created dynamically each time the application is run. Things like the gradients and animations are all done at a software rendering level, but given the power of modern Intel processors (and some fancy code optimizations!) the speed at which the application runs is not an issue. Without an operating system, rather, using the UEFI environment, many of the UI controls like draggable boot devices and animated menus and transitions were built much from the ground up out of necessity. Even though this is the case, it’s easy to see how powerful the UEFI environment is when development effort is focused into that area.
The BIOS has typically been an area that is sorely lacking in usability and modern interaction, but that trend is starting to disappear as competition is fostered through increasingly enhanced UEFI applications for controlling motherboard configuration. Although UEFI is primarily written in C, Visual BIOS is essentially a pure C++11 application running in that environment, and the bulk of development occurs in Windows with Visual Studio 2012. An ambitious but completely feasible project would be to run the very same, fully-functional BIOS setup interface in both UEFI and Windows or other operating systems.
When the application is compiled and built into a BIOS, the standard UEFI build process compresses Visual BIOS to just over a megabyte, which is a size we’re very happy with considering the level of graphical fidelity we’ve reached, not to mention the fact that Visual BIOS has three different visual incarnations for Intel’s Performance, Mainstream, and Next Unit of Computing products. All this said, for the time being Visual BIOS is locked at a resolution of 1024×768, which is a substantial area for improvement down the line.
VB2.0 is largely a completely re-written application compared to VB1.0, and as such one of the biggest and hardest sacrifices was backwards-compatibility with 7-series boards. The 1.0 architecture was not fit to handle the features we have been working on for 2.0, and in addition features like our new performance interface are tightly integrated with the upcoming line of processors to ensure that changing performance settings with this new architecture is as intuitive and educational as possible. This, coupled with the closure of the Desktop Motherboard division, made it impossible to maintain that compatibility, and our deepest apologies go out to users of the original Visual BIOS, whom I know were very interested in the expanded feature set.
Where to begin?
According to WordPress, 323 days ago I posted a development video of what I was calling Ne+. That whole idea/game perished shortly after. There were many reasons why I never saw it through to completion, but at the end of the day I gave up and it was my fault.
One of the reasons was that I started working for Intel. Even now I can’t say what it is I’ve actually been doing professionally for the last year, except to say it’s certainly the best work I’ve ever produced and it’s been a very exciting and interesting ride for me. Hopefully I’ll be able to link to some images and videos soon.
A few weeks ago I was looking over the code I had written for my senior project. There was a lot of good stuff in there, although a lot of it needed to be cleaned up. Getting lighting, shaders, 3D audio, a tile engine, and other components all working was no small task. And a lot of it can be used to a greater purpose, I hope. So with that in mind, I’ve started working on a new project. Mistake number one is that it’s already far more ambitious than my first project, and we know what happened to that one. I won’t claim it’s going to be great, I won’t even give it a name, but I am going to keep putting time into it here and there.
The first big thing that I did was implement a different tile engine, so that now the senior project code I wrote is being used to create an old-school top-down tile movement system. You can draw boundary tiles in Tiled and be able to run into them with your character, and just yesterday evening I created an NPC class that you can also run into, although the way I implemented the collision checking for those was a little hackish. Movement speed is isolated in a configuration file as it should be. I also have a space skybox with a nice 3D camera to play with, currently used as the background of my main menu. I think I should be able to get a lot of mileage out of it for many different pieces of the game.
So, I really won’t say too much more now, as I just want to have something to show at this point. But there are still things in the works, and right now I am more productive than I’ve ever been.
Having deployed my first Processing application on my web comic, I now am pretty into Java development. This is not to say that I’m great with Java, however, I really do value cross-platform material and web games more than being able to deploy to the Xbox 360, and having stated that value, yes, I do think I made a bit of mistake on how I chose to approach my senior project. Like this excellent blog post’s revelation, there are just clear disadvantages to XNA. Yeah, we all know that. It’s nothing new. But XNA makes things so easy.
One of the main things that indie developers struggle with is ease of development. XNA makes things easy, and on Codeplex there are tons of open-source projects, which I have had the pleasure of using. I’ve rubbed up against some excellent indie game developers, who I suspect have a lot more industry experience than I. And it’s really fun working with them, really fun using the Farseer Physics Engine and Krypton XNA, and really fun seeing quick results.
But while those results exist, I know, while I’m making them, that not everyone gets to see them and experience them. If I could do my senior project all over again, I would do it with Java, LWJGL, and whatever other technologies exist to help me in that space. Why? Well, why should anyone even have to download my project to play it? Having Java is the only requirement that users need comply with, and they can play things in a browser. Minecraft, the current rage, is doing just fine with Java, and there really doesn’t seem to be a disadvantage that would actually affect any ideas I would want to pursue. And not only does there exist web development, but the option to create a downloadable application as well.
I’m saying things that most developers already know. But I’m really figuring it out early on, I feel, that I need to work with technologies that span all platforms. I wanted to use Unity way back when I was starting, but like many great things it costs money to use the version with the features I wanted to use. I want to be able to really quickly mock up ideas I have and deploy them directly to my website, so that a link is all anyone needs to check out my work.
So that’s exactly what I’m going to do. I’m going to start using Java, LWJGL, and whatever else I can find, and from this day forward have web-deployable games. I’m going to start with a text-based interface like Phoenix Wright that I want to use with the web comic, but I do want it to expand into something greater as time goes on. The plan is to develop in iterations that are each end products themselves, not only the text-based tool, but a tool for sidescrolling and top-down movement in games as well, so that I can use them for the web comic and any other ideas I have along the way.
Here are the things I’ve just done…
- Added a new light, the velocity light, which either increases or decreases the velocity of anything under it
- Added bullet animations and artwork and a flash animation for when they hit things
- Added a flashing light to the enemy that flashes and rolls at you
- Added an explosion animation for enemies when they get shot
- Added working 3D sound to enemy sound effects
It’s funny because none of these things were particularly challenging or time consuming, but the game seems way different now that it looks like something. Up until this point, I was playing the game with the debug view from the Farseer Physics Engine on, but now it can function as a visual element without physics debugging to show what’s happening in the physics world.
I am going to start expanding the level I have, adding some actual platforming, and I have been asked by classmates multiple times about adding a light that the player can control, so that seems like an obvious step to take. Moving platforms are something I’d like to have as well. It still isn’t that pretty, but I guess I need to get a video up of what it looks like. I know there are some friends that would love to play whatever I’ve got too, and I’ll make that happen this Thursday to get some advice on where I should go next, and of course to just get some end-user opinion.
I have some news about other projects that I’ll be posting about soon.
I just finished using XACT to create an RPC curve that is used with a distance variable to provide “3D” sound as an enemy approaches the player. Of course the game is 2D, and all I’m really doing is tweaking volume based on distance, but it’s a nice effect and very easy to do once you understand how to use XACT. I also added a shooting sound effect, and next on the list is to add animations for enemies being destroyed and bullets hitting things. I also want to integrate a couple of cool sprite sheets I found into the current test level to see how they look, and hopefully have a more visually appealing demo. Last time I played with creating level artwork I had a terrible visual issue in which tiles had line artifacts in-between each other; I might run into that again, and will have to spend some time figuring it out if that’s the case. I know it has to do with how scaling affects the sprite drawing, but I’m not yet sure what the remedy is.
So my work with Processing turned out to be immediately helpful in my XNA work; one of the things I did with Processing was create a sort of player that had a few different states with corresponding animations, so I basically ported that idea over to my Ne+ player. Now I have walking under its corresponding animation, and sprites for standing, jumping, falling, and crouching. I think that crouching is turning out to be pointless right now, although only because I’m not moving the physics object in such a way that it would dodge anything. I’m not going to worry about it at the moment, it can be a purely visual thing for now. The next thing I did was create a simple sprite for bullets, and start attaching lights to them as well. I hit a snag that I thought might be a Krypton issue for just a moment, but really what the problem is is that I am currently letting the player hold fire and shooting a bunch of bullets; the lights overlapping made them look like big red circles rather than a lit area, and I spent a couple moments tweaking Krypton values before realizing I just needed to add some limitation to the firing.
I’ve successfully finished my first Processing experiment. I’ll be sure to link to it when it goes live, but for now, I’m not exactly sure how I feel about it. I do think that it’s a worthwhile venture, but it’s kind of a solution waiting for a problem sort of thing. There is potential; I just have to come up with some ideas on how to utilize it. Now that I’ve finished it though, it’s time to get back to Ne+.
The new project I’ve started in Processing is going extremely well. I did have a bit of a rough time last night; I stayed up until 3AM figuring out how to make a project that would work in both Eclipse and the Processing editor, as well as provide me with a workable workflow. I still haven’t really figured it out; basically I need to keep the library I’m developing for it updated in two places. I’m sure I could write an Ant script to do this for me, but ugh… and the Processing plugin is okay, but for some reason I’ve lost out on autocompletion in the sketch files. I don’t know, there’s a couple issues I still have, but I definitely know what needs to happen to make everything work in the meantime. I should mention that I made a big step as far as deployment goes too; it’s another process I’m not entirely happy with, but after I follow it I am basically able to deploy whatever I’ve done to a blog post. I should also mention that it didn’t work on Internet Explorer… I’m sure there’s a solution for that, but… I’m just not going to deal with it right now.
Isn’t that interesting? Now I can develop things and then put them on my website! Of course we all knew this was possible, but I had just avoided diving into Java and Processing until now. I even ported over the component system that I’m using in Ne+ and have a sprite library that should handle animations for me, although I haven’t made an animation to test with, and I also polished the dialog box I made so that it works pretty well. I still need to figure out how I’m going to make the little triangles that come out of it and point at who’s talking… What could I be up to, I wonder?
I just started playing with Processing, which seems to be a really cool Java-based tool for quickly writing simple applets and applications with a visual element. I have an idea of something that I’d like to try doing with it, so I’m going to grab Eclipse, configure a little environment, and see what I can do with it. I coded a little text function that writes character by character over time in basically no time at all, with easily customized options. Pull that into a class, and I’ve already got the beginning of a dialog box. And I should mention that I really don’t even know Java, but it’s easy enough to go between it and C#. I can see things getting confusing as I want to do more complex things, but really Processing aims to keep things simple and I’m all about that. My idea is an extremely small project, and I think that if I throw myself into it I could have it done really, really quickly. Which would be awesome, as I haven’t been able to look at any of my work and say “I definitely completed something here,” in a really long time. I hope this works out, my idea is actually kind of novel. If done right, it could be very neat. I’m going to wait a week or two before spilling the details, but for now know that it’s web based so that I can just rely on everyone having or downloading Java and relax knowing that my stuff probably works on most configurations.