|
My brain is built of paths and slides and ladders and lasers and I have invited all of you to enter its pavilion. My brain, as you enter, will smell of tangerines and brand-new running shoes.
| Monday, November 28, 2005 |
 The Habanero Chronicles: Phase 2 |
Posted - 11/28/2005 11:01:47 PM | Phase 2: Engine Framework
After the prototyping done in Phase 1, it's time to take the rough, dirty, and basically entirely stolen code and turn it into a framework that can be used for the future. This means it needs to be extensible, flexible, cleanly designed, and capable of handling all of the configuration and power that we need from the engine (stuff like screen resolution changes, et. al.).
The core framework is currently split into sections for the Win32-specific logic (message pumps and all that), a generic framework for building dynamic application loops, and some various utility classes. There is also the interesting bit, the rendering system. The renderer accesses a DirectX wrapper which then takes care of putting the pretties on the screen.
The most interesting feature so far is the dynamic application loop system, which is an idea I had on the spur of the moment today and decided to explore. Basically, instead of a giant GameLoop() function that calls all of the other systems (renderer, game logic, AI, sound effects, netcode, etc.) there is a single dispatch system that uses generic "callback" objects to trigger specific pieces of code. This dispatch system is currently built to allow multithreading, although I'm not really planning on making use of it, at least not yet.
The dispatchers are basically the while(I_am_still_running) loops for the program; each time the dispatcher loops, it goes through a list of registered callbacks and triggers each one. My plan is to set this up as a std::map that automatically orders the callbacks by priority. Callbacks can be added or removed at any time.
The upshot of this is that the game logic, and what executes, is fully configurable. For instance, I could set up the Renderer and UserInput callbacks at the beginning of the program (as they are now) and not remove them at all. Then, I can add in a MainMenuLogic callback that runs, then is removed and replaced with a PlayGameLogic callback, or a ShowCredits callback. The entire system is configurable and dynamic, and as a (very hefty) bonus, the actual game loop code doesn't have to know a darn thing about what each callback does. I'm seeing a lot of potential in this system and I'm getting excited to start playing with it and see what can be accomplished.
At this point, the engine consists of a paltry 11 classes and 2 POD structures. It is a valid and fully functional Win32 application, as well as a more-or-less operational Direct3D client. It also has a basic rendering loop that draws a little habanero pepper moving around in circles on the screen:

I hereby declare Habanero: Phase 2 conquered. Phase 3 will be to build a scene and camera system for the renderer that lets me set up batches of pretties to draw on the screen, handles shaders, and all of that good stuff. The core framework will be enough to consider Phase 3 complete, as I'm absolutely certain that the actual rendering system will be getting tweaked, improved, and revised up until we kick this thing out the door.
| |
 The Habanero Chronicles: Phase 1 |
Posted - 11/28/2005 9:48:37 AM | Introduction
This is the story of a hobby game, built by an industry programmer (that'd be me) and co-designed by an avid gamer (that'd be my flatmate). This project is primarily for our own entertainment, although we hope to produce some tools and resources (and maybe even a finished game) that others can enjoy as well. I plan to make most or all of the source and raw assets of the game freely available once we are finished.
During the development and production of the core game engine (currently code-named Habanero) as well as the final game itself, I'll be recording our devious exploits and grand adventures here for everyone to ignore and not comment on read and enjoy immensely. Most of this will be my own twisted mental dumping ground, so proceed with caution!
The Plan
I generally refuse to plan this one out until it becomes absolutely impossible to avoid. Since this is very much a spare-time project, and my spare time is not exactly copious, a rigorous plan is more or less guaranteed to be abandoned and burned as heresy within a few weeks. Everything will be played by ear here, at least until we get closer to the uh-oh-we-really-have-to-figure-out-what-we're-doing stage.
To this end, every time a noteworthy something happens, I'll log it here as a completed "phase." I expect to have quite a few phases before all is said and done.
The engine will have an isometric, fixed-camera perspective. I'd like to build much of the rendering pipeline to take advantage of this, although I'll make an attempt at a reusable framework that can be adapted to other view styles in the future. We'll see how well that works out in practice. I've chosen to target DirectX 9, primarily because DirectX is where my familiarity lies, and because I have some great reference code to compare to from Egosoft if I need inspiration. Win32 will of course be the target of choice; portability will be of very little, if any, concern.
Aside from that, very little is decided. I'm currently leaning towards using billboarded sprites on a 3D heightmapped landscape system, although we've been kicking around some game concepts that may lend themselves better to other approaches. A lot of those details will start falling into place as we get closer to needing to have them decided.
Phase 1: Initial Prototyping
This is one of the fastest-moving parts of software development, at least in the style that I use. Essentially, the concept is to accomplish a stripped-down, simple version of our final goal: to render isometric landscapes with D3D9. The stripped-down, simple version of this is to render a quad with D3D9. Our first prototype is actually some line-for-line thievery from a handful of DirectX articles and samples.
This thieving worked out fairly poorly in practice; some mix-and-match problems occured, the inevitable variable name differences caused some headaches, and once the framework was running, the texture was screwed up. Being lazy, I spent a minimal amount of time trying to diagnose the texture problem, and ended up just dropping some sample code into my project wholesale.
At this point, we've got a simple, naive little app that opens a window at 800x600, draws a single textured quad, and then waits for the window to be closed. I'd post a screenshot, but it's really not exactly impressive.
Next up is Phase 2, where the stolen sample is totally rewritten into a more permanent and useful engine framework. This process has actually already started and is moving along nicely, although it's been going slower than normal as I've spent a lot of time explaining the design process to my flatmate. Currently, I've just about finished the window management subsystem, and most of the debug console framework (which I'm working on making generic so that a Windows console window, a networked debug console, and a graphical pull-down console in-game can all be interchanged easily, even at runtime). Once that is in place, the next big project will be to take apart the DirectX code and re-wrap it into the framework that the engine will use in the future. I'll consider Phase 2 complete when the engine is factored and modularized nicely, and is back to a compiling/running state.
| |
| Wednesday, November 23, 2005 |
 New layout = the suck. |
Posted - 11/23/2005 11:57:24 AM | Warning: whining and ranting ahead.
I'm going to have to register my complete and utter hatred of the new look. There seems to be a lot of "you're just not used to it yet" going around, which frankly (as far as I'm concerned) is crap. I'm a virtually certified change addict, and I hate this change. I'm the kind of person who rearranges all of my desktop icons and start menu shortcuts on a weekly basis. I refactor my projects recreationally, the way most people smoke or drink. Change is not a problem. Changing to s**t, however, is a problem, and we seem to have been afflicted by it. Powerfully.
Complaint 1: Drunk clowns and paint cans
Bright colors... cheezy blue-and-silver "theme"... icons that seem to have been taken into a back alley and violated repeatedly by the same sick freak that did the artwork for Windows XP... this thing has all the hallmarks of a weekend website project mucked together by some two-bit hack in his basement. I know that's not really the case, but it sure as heck feels like it.
I've always liked GDNet because it seemed like more than that - like something a bunch of dedicated, serious people got together, and really turned into something great. Now I feel like I'm posting on some mass-market cheapass spam repository. I've read the rationale from Khawk; frankly I don't buy it. Remembering things better because of colors? I'd think more about the validity of that concept, but my BS-o-meter is already overheating, and I'd hate to risk a meltdown.
Bottom line: silver and blue is the most overdone, pathetic cliche in the world of web theming. Period. I like sites with character and atmosphere. Now we have this godawful sterile, "professional" (oh freaking please), we're-scared-of-being-different conformist reek. It reminds me of corporate suits who crap their pants whenever anyone so much as thinks about challenging the status quo. I want to come here and be reminded of midnight coding marathons, of hackers striving in their lairs to push the frontiers of gaming... I don't want to be reminded of suits, ties, sport coats, and power lunches.
Complaint 2: #%!@ dropdown menus
I don't know why it is that "web designers" get so hot and bothered over dropdown menus. I f***ing hate them. HATE HATE HATE HATE HATE HATE HATE. They are stupid, pointless, and reek of whiz-bang fad-ism. They also inhibit my browsing style. I like to shift+click a lot of links and browse in multiple windows; dropdown, scripted menus preclude this in most cases. It's fairly rare in my experience for anyone to implement dropdown menus in a manner that handles this nicely. GDNet has now joined the ranks of Those Who Done It Wrong.
The usual excuse I hear for this pablum is that it "conserves vertical space." Dammit, people, scrollbars are your friends. This change didn't even do much for space; there's maybe 20 pixels saved over the old layout, at the expense of easy accessibility, and at the expense of having an efficient-looking layout. Every graphics designer in the world is crying over this right now.
Dropdowns are also "mystery meat navigation." This is BAD. Why is GDNet Gathering under Community and Jourals under Members? That's arbitrary, counter-intuitive, and just plain poor. The goofy column names from the old layout were excusable because the column names didn't obscure the content (links); the names didn't convey any useful information, so they could be ignored. Now, they both fail to convey useful information, and they both conceal the useful information while making it harder to access.
Please, guys, go buy some books on doing good web design (and good content design in general) and learn some things. Hiding your links under menus is NOT COOL, no matter how hip, trendy, and 21st century it makes you feel. Warm fad fuzzies do not compensate for a botched user experience.
Complaint 3: Bandwaggoning
This looks like every other forum engine out there now. That's not a good thing. I liked the GDNet forums because they were unique, different, self-made; they didn't stink of cookie-cutter freebie engines that someone downloaded and installed (without changing the theme) to run their Ub3r Aw3s0m3 INT4RW3BN3T SIT3.
More than anything else, this change feels like a bureaucratic conformalist wank. My honest impression is that someone in upper management can't get it up unless the product looks just like the competition, and God himself forbid that we show any gumption in being different. The problem is, I know that's not how GDNet works, and so I'm left confused as to how this horrible mistake was allowed to happen in the first place.
This is a different kind of site from any other, with different kinds of people and different content. Looking different was part of the old site's attitude, part of the experience. It said that we're here, we're not owned by billion-dollar media congolmerates, and we've got enough testicular fortitude to not have to copy everyone else's cliche designs.
Sure, a lot of people disliked the old look, and a lot of people so far seem to like the new look. So let's have some options here - and no, the www2 hack does not count, especially since it doesn't work.
| |
| Tuesday, November 22, 2005 |
 I have returned. Again. Or something. |
Posted - 11/22/2005 9:21:14 AM | As promised, I've updated the shrine with the X³ US pics. Behold all of the awesome.
And then of course there's the gaming peripherals:

From left to right, we have:
- My old knock-off, off brand PC Propad. I never actually got to play any games with this, because it only has two trigger buttons, and all the games that supported gamepads expected four back in the day. The 15-pin gameport connector also went out of fashion shortly after I got the thing.
- Logitech Rumblepad2. Essentially a clone of the PS2 controller, except with a vanilla USB connector. It's comfortable, but it isn't my preferred method of gaming.
- Saitek P2500 Rumble Force pad. This thing is awesome. It just sits in your eager, trembling hands like a craven plastic block of might, jittering with massive energy waiting to be unleashed. I'm starting to do a lot of gaming with this, especially when playing Final Fantasy.
- Gravis Destroyer Aftershock. Trusty joystick, nice rumble pack, fairly decent for what it does. I've used it happily for a number of years, since my cheap gameport joystick died a while back. It was the first USB device I ever owned. For a long time, I was stoically convinced that no joystick could ever be better (after all, if there was anything better, I would own it... right?).
- Saitek Cyborg Evo. This thing is beautiful. It has all kinds of nifty glowy things, and little gears and knobs and such so you can adjust it to fit the shape and position of your hand. Excellent tactile response on the springs and the buttons (although the buttons are just a hair too spongy for my tastes) and a generally really cool looking profile to boot. My only regret is that I thought I had bought the force-feedback edition, but sadly not. Such is the way of things.
Happy Juice

This is another little bit of awesome. Apparently, E3 attendees were randomly selected for a market test of the new Mountain Dew MDX drink that was just released. Several months ago, I got a package in the mail with a nice silvery box in it, which contained six cans like the one you see here. The fifth, depicted, was enjoyed last night. I'm keeping the last one unopened just for the heck of it, plus a couple of the regular empties.
It's actually fairly different from the final version of MDX, which makes it that much cooler, since it's not just the same old stuff in a shiny can. Of course, the shiny can makes it that much better.
So there you have it. Now I'm done rotting your brain and assaulting your eyes. Go do something productive, like scare small children and take their candy solve world hunger.
| |
| Monday, November 21, 2005 |
 Life, the Universe, and Everything. Or not. |
Posted - 11/21/2005 3:35:12 PM | January cannot come soon enough.
I've been spending a lot of time this week sleeping and just generally goofing around with my flatmate. Our current project is to play through Final Fantasy III (which I've done, but he hasn't) and then FFVII (which he's done, but I haven't). Beer, Pizza, and old school gaming - that is how it should be.
Every now and then I've been clocking in a few minutes to work on the next update for X³: Reunion, although not a lot of that has been going on. I did pick up a couple of joypads to test with the game, bringing my total collection of peripherals to a Saitek gaming keyboard, a Saitek Cyborg Evo joystick, a Gravis Destroyer Aftershock joystick, a Logitech Extreme 3D joystick (which, thanks to the wankers at eCost.com, I do not actually possess yet), a Saitek P2500 joypad, and a Logitech Rumble Force 2 joypad. I'll have to edit in some pics of the goodness later.
When we went out trolling for the joypads, I came across some copies of X³ in the wild:

That's pretty cool to see. Naturally I had to pick up a copy on CD to fill out the shrine; I'll update that with pics later, too.
For now I'm stuck in my office, writing application code, and debugging weird quirks with rolling timestamps and PHP's mktime() function. Only two and a half more days this week (turkey! woot.), then four more weeks, and I'm out of here to go full time at Egosoft.
January cannot come soon enough.
| |
| Monday, November 14, 2005 |
 Work, work |
Posted - 11/14/2005 8:48:35 AM | I'm sorry to disappoint all of you morbid freaks who I know were just itching to hear about me getting brutally dismembered, but I'm back. The trip was long, boring, and essentially uneventful.
The only real highlight worth mentioning was that we held the 8 Bit Theater "Welcome to Corneria" / "I like swords!" exchange for one hour and fifteen minutes. That's right, eighty miles of incessant geek drivel.
It feels good to accomplish something meaningful with my life.
| |
| Friday, November 11, 2005 |
 ROAD TRIP!!! WHOOOOO! |
Posted - 11/11/2005 3:43:14 PM | Well, the Spectral Samurai's car has finally and utterly died. Being naturally tired of it dying repeatedly over the past two years, he's getting rid of the car entirely. This leaves us with only one car, which is a slightly problematic situation for people who are supposed to be sharing a flat.
So the plan is I'm going to go to Virginia pick him (and his crap) up this weekend and haul us all back down here to Atlanta. Should be a good weekend.
Have fun without me - and don't despair! I shall return next week to assault you with endless verbosity and drivel. There might even be some more blurry pictures in it if you're good and go to bed on time.
| |
| Wednesday, November 9, 2005 |
 I am not a photographer - but look at 'em anyways |
Posted - 11/9/2005 8:20:57 PM | I'm going to have to do three things here which I was not expecting to do. First, I'm going to post two entries within a few hours of each other, which for some reason makes me feel dirty. Second, I'm going to post a short journal entry. This definitely makes me feel dirty. Finally, I'm going to actually post something about, y'know, me doing game development. That does not make me feel dirty, even though maybe it should. I am now confused.
Ladies and gentlemen, I proudly present: More Blurry Camera Phone Pictures. Also known as The X Shrine, a tribute to the best games ever.
| |
 Observational gallimaufry |
Posted - 11/9/2005 2:50:18 PM | Observation One: NDAs make for boring journals
I originally planned to start this journal to record, y'know, game development and such. So last night I was thinking about why I have yet to actually post much about, y'know, me developing games. Today it finally dawned on me: I never post anything here, because all of the interesting stuff I work in is covered by a few really tight NDAs.
I really don't know why that never occurred to me before, but now it has. I'll see if I can pull some strings and get some NDA-slack to talk about some of the less sensitive programming and other work that I do.
Observation Two: The "Helldesk" is Aptly Named
So the tech support/IT/helpdesk guy is off this week for maternity leave (just to clarify, his wife actually had the baby, not him). That leaves me as the only person in the office who isn't management and is here often enough to answer the phones. To their (somewhat marginal) credit, the management does answer a few calls while I go and stretch my lunch hour out as much as I can, but it's still mainly my curse to bear.
Observation Three: Office politics are The Suck
This is only annoying because helldesk duty tends to fall to me pretty much all the time for various reasons these days, and I'm already under a lot of fire for being "behind" on my current project. Now, for some perspective, my project team consists of me. The schedule was written up in ten minutes on a whiteboard by the management - without consulting me. So in essence I've got a set of totally random dates and a bunch of deliverables that are due on each of those dates. Suffice it to say that the schedule is in no way possible, and I get to hear about it. A lot. I've attempted repeatedly to explain that the schedule was too incredibly arbitrary and contrived to even be remotely meaningful, and that in light of the major rewrite that I'd been telling the management I needed to do for the last four months, the final deadline really should have been about six weeks later than it was. Apparently this is "understood" but not really processed by said management, as we have yet to actually revise the schedule in any way. I'm currently working on tasks for an interim "beta" release that was due four days ago.
Or at least, I would be if I could get a solid ten minutes without having to answer the phone.
Observation Four: The C2.com wiki is hazardous to your health
About the only thing that's kept me sane is idly browsing the C2.com wiki while listening to inane questions. Unfortunately there's just far too much good stuff on there, and naturally I'd much rather read it than explain for the dozenth time to someone what a serial number is for.
Observation Five: Knowledge organization and retrieval is an unsolved problem
The Wiki concept is really cool, but it lacks something that I personally wish for on a daily basis: a reliable, high-level overview. I'm a sucker for hierarchies and trees and nested lists and all that good stuff, and Wiki is not really designed for that. I'm sure that some kind of metadata engine could be tacked on to make the Wiki thing much more accessible at a high level, but somehow I suspect that wouldn't work nicely.
The keywords concept is nice if you know the right keywords. If you don't, you get NamelessConcept syndrome, which is a pain in the posterior.
And of course the existing hierarchical trees of knowledge organization just plain suck (witness exhibit A, the Yahoo Directory).
I'm thinking there has to be a better way, but I can't think too much about what it might be, because I have to think about explaining serial numbers.
Observation Six: Sleep is weird (redux)
My sleeping patterns are now totally borked. I'm fine during most of the daylight hours, but I seem to be on some kind of aharmonic, chaotic pattern where I'll randomly either be wide awake all night or fall asleep at 7 PM. Sometimes both will occur in a single night. It's very surreal but kind of entertaining at the same time.
Observation Seven: "Redux" is a weird word
There's something about that word which bugs me. At one time I took a half-serious oath never to use it in conversation or writing, but I'm a soulless bastard so I just did. Twice.
I'm gonna burn for sure.
Observation Eight: I HATE SERIAL NUMBERS
In case it wasn't already plain.
Observation Nine: Programming expands your vocabulary
Case in point: I learned the word "gallimaufry" from Dan Appleman. I think I still have his Guide to the Windows API for Visual Basic Programmers laying around someplace.
Observation Ten: I've made a lot of dumb observations here
That one should be self-explanatory. The writing of this collection of inanity has been continually interrupted by additional opportunities to explain serial numbers. Again.
Observation Eleven: I write long and primarily pointless journal entries
Again, self-explanatory. Are you bored yet?
| |
| Thursday, November 3, 2005 |
 Inane Factoid #47582 |
Posted - 11/3/2005 2:00:53 PM | Smokey Bones has awesome chocolate peanut butter pie.
I'd talk more about how awesome it is, but at the moment I'm feeling the distinct need to crawl into a dark corner and sleep it off for about a week.
[update] I have developed a theory. I believe that pie is a form of antimatter for code - an antithought as it were. This pie seems to be utterly destroying every trace of code that I might have been able to produce this afternoon, while simultaneously producing a heck of a lot of energy.
Yeah, it's a slow day.
| |
In locus hic, omnes res dementes sunt.
|
| S | M | T | W | T | F | S | | | 1 | 2 | | 4 | 5 | 6 | 7 | 8 | | 10 | | 12 | 13 | | 15 | 16 | 17 | 18 | 19 | 20 | | | | 24 | 25 | 26 | 27 | | 29 | 30 | | | |
OPTIONS
Track this Journal
ARCHIVES
July, 2009
June, 2009
May, 2009
April, 2009
March, 2009
February, 2009
January, 2009
October, 2008
September, 2008
August, 2008
July, 2008
June, 2008
May, 2008
April, 2008
March, 2008
February, 2008
January, 2008
December, 2007
November, 2007
October, 2007
September, 2007
August, 2007
July, 2007
June, 2007
May, 2007
April, 2007
March, 2007
February, 2007
January, 2007
December, 2006
November, 2006
October, 2006
September, 2006
August, 2006
July, 2006
June, 2006
May, 2006
April, 2006
March, 2006
February, 2006
January, 2006
December, 2005
November, 2005
October, 2005
|