I've been enhancing the material system these past couple of days -- I've added GLSL materials, material rendering stacks and other features. I decided it was time to implement a couple of classes to make material management easier.
I went off and implemented a "material cache," which holds onto materials that have been requested recently. The important thing here is that I'm now loading materials -- they're defined in XML, like so...
<Stack>
<!-- This stack simply allocates the default"droideka" skin and then puts a gooch shader on top of it.
More or less a definition of how to handle stacks and
material file definitions.
This was the first material file to be added to the project.-->
<Shader filename="data/shaders/gooch"/>
<Texture texture="9"/>
<Include filename="data/shaders/pie"/> <!-- Include another material by reference -->
</Stack>
Of course, there's little bugs (Include directives don't catch infinite recursion, there's no support for multiple passes of shaders, and it's arguably pretty useless right now without a material stack added), but it's pretty awesome overall and seems to work. I've also added a multitexture material type, but haven't had a chance to test it out yet.
The end result of all this chicanery? It could be the nice new Gooch shader that I added to my little bag of tricks.
The mission of making Novarunner the most pointlessly gorgeous space trading sim ever is starting to get there. Now just to find some models.
Shaders are back in the game engine as a material. I'm thus sitting in Rendermonkey figuring out some new cool shaders to show off. I do, however, have per-pixel lighting as well as some other cool effects. Look below.
Material "stacks" are implemented, so you can apply many materials to a single entity in stack order. This is actually remarkably powerful, and bypasses a lot of things that I would otherwise have to use a scene graph for.
I really should've used a scene graph with signals and slots. This is insane.
About six assignments in a week. Yeah, I know. I hate university.
Started work on the Amaranth project, which is a significantly less brain-damaged Propane Injector available for .NET (and with tools making it easy to port your Amaranth application to OS X!) It uses 4.7MB Mini-Mono on OS X.
Control "feel" is seriously tightened up. Playing with an Xbox360 pad makes it feel like a console game with smooth-as-hell input and a really satisfying sense of flight. Now the keyboard+mouse mode feels like shit, so I'll have to make the mouse control better.
Novarunner now suspends a large amount of its state successfully to and from XML (including input bindings, global configuration options, and starmap data). Eventually I'll get saved game state going.
Coming up soon: Radar, and system "jump" features. Exciting.
Tightened up them controls. Friction and inertia are tweaked to feel more like flying a starship than a yaw/pitch/roll demo.
Lights, Action, Camera. This stupid pun has been driven into the ground for years by pencil-necked game developers like myself. I perpetuate the pun by showing that you too can control the camera with the second analogue stick on an Xbox360 pad.
Control System Refinement. The game controller class can now detect when you're holding a button as opposed to having just pressed it for the first time. This is pretty important for things like, oh, I don't know, menu systems. Can't believe I didn't have it in there from day one.
Debug Options. I added a bunch of profiling and debugging toggles to the console, so you can start a log dump of the game's performance over time and expose certain variables as "health bars" onscreen.
Tomorrow, on Novarunner: Who knows? I'm hoping to get back in the game code and start rigging up the way to dump and load a new star system for the jump. Once that's loading properly, I'll add the code to handle the "jump" cinema scene and make the transition pretty.
I should probably also get docking with ships working. So much to do!
Perhaps one day I will call Microsoft and thank them for the gift to inspiration that is the Xbox360 game controller. Nothing quite inspires me to work on my game like seeing a lonely, ignored piece of hardware sitting forlornly on my desk, waiting to be wired up to a fifty tonne interstellar death machine.
Finally, as Rob Loach knows, I've been interested in getting Tao working well under OS X. Step one is figuring out how to redistribute Mono so my end users don't have to install it. I've started researching how to construct a minimal Mono.framework for Tao apps.
Everyone likes physics, don't they? Yes, yes they do.
Novarunner
SHilbert and DukeAtreides076 have helped me all week trying to get rotational "friction" and "inertia" going on the spaceships in Novarunner. Now they actually feel like they have mass and influence, and faster ships definitely feel more nimble.
However, right now they don't really feel easy to pilot, so I'll have to be spending some time tightening that up.
I also bolted on some new backend (environment variables) as well as a prototypical console that works a hell of a lot better than Glow's did for debugging, modifying and interrogating the game-state.
_
Not much else going on right now. I have big assignments and just got finished a harsh bank of midterms. Tomorrow might reveal some nice new features, but it seems unlikely.
Holy hell. It's 2:30 am. The Australians can have it. I'm going to bed.
This week, in the journal, we discuss pepperoni pizza, midterms, Windows-based smartphones and shotgun safety. Don't miss it!
SPV
I recently purchased a used Orange SPV. As I live in North America, ass-end of telecom equipment and consumer rights, I now own the most advanced telephone ever owned by a mortal on this continent.
I tried to take some snaps of it running Doom but couldn't get it to work out well on my webcam, but it runs Doom (and NES games) surprisingly well.
Propane Injector Progress
I've been working on the Propane::OS namespace between exams. This is the namespace that will handle all of the OS-specific buggery-jiggery behind the scenes so you don't have to.
For example, you can get CPU info (clock speed, SpeedStep) and computer info (physical memory available, currently logged-in user). Also, you can use the namespace to do certain things with the OS:
So there's some interesting stuff there.
The games front? Ask me about it after midterms. I'm busy working on the state machine that will allow you to watch pretty cinema scenes when you transport from system to system, as well as the system enter/leave methods that will populate a system when you jump into it.
I guess the YouTube "Embed" links don't work properly here. I wonder how other people did it? I just took a screenshot of a random frame.
Forgive the choppiness; I'm still trying to figure out how to use my screen recorder.
Here are some screenshots:
Next up: Getting ship AI in and actually doing the jump sequence. Not shown: Getting the Xbox360 controller to talk to the game. It's more fun with mouse and keyboard right now, because I haven't hooked up ALL the features yet.