Sunday, January 31, 2010

Well things seem to have wrapped up to a fairly good night, except I'm not sleepy lol. I seem to be getting better at Clan Arena  Quake is rather addictingly fun, and if the resolution on character models was increased, would perhaps come closer to the current commercial grade of graphics, rather then just good. Also got to join Weasel for a few rounds in RvS before calling it a night.

The real problem is I'm not sleeply :'(.

Saturday, January 30, 2010

Today has been marred both with bad and good news, I reckon the bad, will be the last shell I need watch dropped, but the good, effectively ensures the future. So, I guess 'tis time to cast the reel, and hope to enjoy the coming age.

Darn, youth is so wasted on the young :-P.

Stylist thoughts: What I would like my journal to look like

The current site style was selected because it's fairly simple and provides a good bit of space in its layout, even if it is rather plane.

Irregardless of the finer details, the ability to coop with content breaking out of their boxes is somewhat of a necessity. I often post snippets of code, command output, or even action logs here, from whenever I'm working on my own crap. Although my terminal runs 80 columns wide, there is no such garruentee when I reach for the pre tags. Because of how Blogger handles titling untitled posts, much the same applies to the archive barlet.

I don't have any problem with web design, although I prefer working on server side code rather then doing the visuals, should we say, I find it a more rewarding experience for the amount of effort I put behind coding.
Last night I took the liberty of configuring Blogger to notify me by E-mail whenever comments are made here, dang, Live Journal did spoil me with all the notification features! Blogger however seems a smoother platform to rely on, my only real complaint is the site templates. One of these days I've gotta take some time and create the look / feel site design I want, which is much easier to do here (for free) then paying Live Journal for their equivalent level of control.

After being notified of a comment made today on one of last weeks entries, I also searched through a few pages of posts just to make sure I haven't missed anything. My apologies if I've missed any comments left between 2010-01-30 and 2009-11-13. It's rare anyone actually leaves a comment lol.
Things have finally settled a bit, this is perhaps the closest to a proper day off yet: played Raven Shield for a few hours on the [SAS] Proving Grounds, took a break for chores and followed that up with some Quake Live, then went back to the [SAS] Proving Grounds for a couple hours. Then a few rounds of Clan Arena in QL before dinner.

I don't play much Clan Arena in Quake Live, because it is rarely my `style` in the public servers; maybe more formal matches might be better. CA games basically amount to a round based last team standing form of competition, where everyone starts out with a Mega Health, and virtually all standarded weapons, plus plenty of ammunition; the catch of course being, there are NO power ups, no health kits, no extra ammo. You best have rocket launcher skills as well ^_^. Managed to get in a few good team games, before ending up in a mixture of 2vs2 / 1vs2 games, giving great chance to practice weapons selection and application. I also learned of a spot on one of my training maps, where you can rocket jump over (or camp on top of) a wall. One cool feature of Clan Arena mode, is you can rocket jump freely without taking any damage; it lends itself to a very fast, furious, and high octane form of combat. Although, it often becomes a crazy melee.

For lighting things up a bit, Charles Dickens Great Expectations, and Wanted. The former redefines the expression (from the more modern vernacular), of "Gee, what a small world! While the latter, is a gritty but enjoyable action flick, with some very nice fight scenes—that kid is to fighting ability, what a Terminator is to durability.

A day behind schedule, but I've also taken the time to burn a SMGL disk, that I'll likely setup on my desktop, and experiment with porting code to x86_64, as well as playing Quake Live under Linux. Sourcemage is a GNU/Linux distro, that I actually found when Googling for some git operation lead me to their wiki; it also looks like a distro on par with my tastes. I was smiling the other night, when I read a section header in the install docs, about knowing thy `compiler`, until I realized it said `computer`, and my glasses really needed a cleaning lol.

Thursday, January 28, 2010

Of friendships, promises, and commitments

As if there wasn't enough stuff to throw off my focus (on non-SAS matters), looming in the shadows is where a friend will drawn their own line in regard to whether they will stand with [SAS] or apart from it. For me, it's very hard to take, because I knew, before helping bring this person into the group, that in all probability, they would have to face this cross roads in time (in fact, rather then sugar coat that outlook for my friend, I poured a lot of salt on it early on, and left the decision to rest on their own head).

It's the second time in my own history here with [SAS], that I will have ever have considered throwing in the towel if person XYZ chooses to leave; the first and before this, the only time, was when I spent a period of time trying to keep another very dear and tired friend from losing his faith. Some people have had the same feelings about me, that's one of the reasons I stand tall and walk hard through the storms. I've always enjoyed being with the people around me, because you never know how long GOD has put them there. The thing that hurts me, is knowing that the friend in this particular question, will have to go through that rough decision, and there is nothing that I can do to make it easier for this person. Because if I could remove the issue from ever having to come up in their membership, I would trade an arm to lift that weight. All I can do, is watch, wait, support, and accept, whatever my friend chooses.

As to where my own path lays in this, I know two things. When the storm started, I made a decision very early on: that if I ever lost my place in [SAS] trying to fight it for the sake of my team as a whole, that I would sooner eat dirt and shallow chicken vomit, then serve under (thenow) NTF_LTC_Rouges command, if he started a competing unit; I won't serve under any man who would break his word the way he did, out of spite. Like wise, my thinking reminds me, at my core... there is just this stubborn, ornery, stiff necked, tough fscking son of a bitch, who just will not lay down and die.. if it feels like walking on glass, I'll stand on my legs and fight on, because

and for how many times in my life, I've had to come to that conclusion in both [SAS] matters and with my own family—I will never go back on my own word, and I gave that the day I committed myself to this TEAMs future. I will not make a liar of myself, no matter what comes of that choice, because being loyal to the vision, was a promise I made to myself, and something I have never wished to break. I'll not stoop down to someone else's level, and that is ironed across my soul even more, after calling Rouge on his own integrity issues; and I've done that to his face plenty enough times for it to matter. It is a bygone and stone age concept, but my honour will never yield to a lesser path.

Once an [SAS] man, always an [SAS] man, and I am an [SAS] man, overly tried and true to be sure, and they can type it on my tomb stone in bold if they want, because here I stand, come and get me.... WHO DARES, WINS!

Somehow it figures...

that when I finally find something therapeutically healing to do, my family has to stab until my hearts no longer in doing anything.

Some times I think, rule #0 of surviving life, is to remember that there is no one who cares.
All he could think about was I'm too young for this.
Got my whole life ahead.
Hell I'm just a kid myself.
How'm I gonna raise one.

All he could see were his dreams goin' up in smoke.
So much for ditchin' this town and hangin' out on the coast.
Oh well, those plans are long gone.

And he said,
There goes my life.
There goes my future, my everything.
Might as well kiss it all good-bye.
There goes my life.......

A couple years of up all night and a few thousand diapers later.
That mistake he thought he made covers up the refrigerator.
Oh yeah..........he loves that little girl.

Momma's waiting to tuck her in,
As she fumbles up those stairs.
She smiles back at him dragging that teddy bear.
Sleep tight, blue eyes and bouncin' curls.

He smiles.....
There goes my life.
There goes my future, my everything.
I love you, daddy good-night.
There goes my life.

She had that Honda loaded down.
With Abercrombie clothes and 15 pairs of shoes and his American Express.
He checked the oil and slammed the hood, said you're good to go.
She hugged them both and headed off to the West Coast.

And he cried,
There goes my life.
There goes my future, my everything.
I love you.
Baby good-bye.

There goes my life.
There goes my life.
Baby good-bye.
There Goes My Life—Kenny Chesney

Tuesday, January 26, 2010

Wasn't there enough suffering before GOD invented the toothache?

For the past couple days, my teeth have been on the blink again, lol. I just spent most of the day with an excruciating pain between my jaw, ear, and forehead, of which being stabbed in the face with a knife would hurt less. I could take the amount of toothache pain itself for a week without flinching, but it's the extra pains it causes that get to me. Having the pain at the base of my ear, makes it so even the the sound of the radio hurt, which rules out playing most games. My forehead aching like a headache from the seventh level of DooM, just makes it a pain to concentrate on rocket science lol.

I started the antibiotics on a schedule, so I won't need to worry about taking it during working hours, and spent about an hour / hour and a half putting heat on it, to try and sooth the pain and make sure the fuck doesn't swell up on me again. We also picked up a thing of naproxen, benzocaine, and pizza fixings; my interest is in the last two. Yes, my stomach is never far from mind \o/. The benzocaine one, is basically a mild anesthetic for dealing with dental pain, a friend recommended  clove oil for the same purpose, but the supermarket didn't have it.

Hopefully the antibiotics can keep this from getting nasty and the benzocaine product should help deal with when the pain gets nasty. FWIW the naproxen is probably better then paracetamol/aceteminophen that I've been making do with. I also have a small bit of Hydrocodone/Aceteminophen that the dentist proscribed for pain, but really it's roughly equal to Tylenol lol.

When I take something, you know I'm hurtin', because I'm more apt to slam my head into a wall first.

Saturday, January 23, 2010

Updating Qt, hehe.

Tonight I updated SASs TeamSpeak 3 server, and discovered that my TS3 client was too darn out of date to work with it, haha. After updating things, I also noticed in the nifty about dialog they shipped, that the version of Qt used, denoted the GNU LGPL v2.1.

It has been a good while since I updated Qt on my windows system, last time was about one year ago. So I dropped by Qt's website to download an updated SDK, and also found that they had MinGW and Visual C++ 2008 library packages available. Last time I really focused on Qt/C++ development, Microsoft Visual C++ was just becoming supported by the Open Source Edition (OSE), having long been supported by the commercial editions of Qt.

In perusing the website, I noticed that GPLv3 is now also a supported license for Qt. They really have gone through a few licenses over the years, I still remember when the OSE was a chose between GPLv2 and their own Qt Public License agreement.

While I really hate doing cross platform development in C++, Qt is both the least painful widget toolkit I've ever seen, and really makes the process *a lot* less painful. Well, as less painful as dealing with template implementations between GNU/MS C++ compilers anyway.

It is note worthy that the SDK only includes the necessary library files to link using MinGW, the port of the GNU Compiler to Windows. So if you plan on using Microsoft's compiler, you will want the vs2008 package, or the source code if you need to shoe horn into an older version.

One thing I like about all the *decent* operating systems shipping a system compiler on their install disk, that usually means pre-compiled packages will be in sync with your compiler. Microsoft Visual C++ is not quite so lucky, since being a separate product, most people shipping binary packages of libs/headers, usually support 7.1 or 8.0 instead of 9.0. Oh well, maybe when VC10 is released :-/.

Thoughts on recent SAS resignations

The more I look at the facts, the more I am convinced that this was a mutiny in spirit. Out of the first wave of people to resign: it appears to me that there are 3 core factions to it. One group, was overruled against by GCHQ, the other carries Rasa's infection for placing their own ways above SASs, and then there's Rouge.

When GCHQs ruling wasn't to their liking, it seems that a few people decided that they know better then the ones in authority. That same "I'm right, GOD is wrong" attitude has built many a house on sand... I'm glad [SAS]'s was built on titanium reinforced concrete.

A few, are people who have stiff necks and know they will never have the subversion of [SAS] that they desire, a man who once refused to teach SOPs comes to mind. This is what I mean by "Rasa's infection".

Some time ago, even I lost all my faith in GCHQ, when it looked like a set of RvS-centric SOPs would be fast tracked through and every word I ever said to hold this clan together would become a lie. Every member of GCHQ proved themselves to me, except for Rouge. He lost that fight, and I'm starting to feel that his involvement is because he lost, and the ideal of [SAS] as one team, two games, won out.

So I suppose, having been given judgement, and deciding that the highest court in the land is not better then their own, a few people decided they can do better.  I really pitty Timbo and Scout, if they organise a clan under Rouges armchair generalship.

Thursday, January 21, 2010

A little size of fun.

Generally, I'm rather finicky about making assumptions about the sizes of types, and even conversions between signed and unsigned types. Although I occasionally skirt dangerous gronud, such as feeding a function pointer into a object pointer, and expect to be able to cast the void* back to the function pointer (basically implementation defined by C, but required by POSIX), I also tend to make notes of when (fully aware) I do things that are non portable, but not necessarily obvious. At least in the example case I just mentioned, I didn't know that was dangerous ground until I reviewed code under -pendantic, and scratched my head at the required warning message.

Normally I take things in stride, and just cringe when I see, "Portable" software doing stupid things like using unsigned int where they mean uint32_t, or the (flawed) assumption that a pointer to xyz will be as large as an object of xyz. So I thought I'd just take a look see here, and then wrote a program to display it in bits rather then bytes, since most of the folks I know will better get the picture that way :-o.

Also being a practical man, I kind of like to know what is off the edge of the map, just in case I some day have to jump off \o/.

Here is a simple program to solve my curiosity:

main(void) {

    printf("sizeof(char)\t= %u-bits\n", sizeof(char)*CHAR_BIT);
    printf("sizeof(char*)\t= %u-bits\n", sizeof(char*)*CHAR_BIT);
    printf("sizeof(wchar_t)\t= %u-bits\n", sizeof(wchar_t)*CHAR_BIT);
    printf("sizeof(wchar_t*)\t= %u-bits\n", sizeof(wchar_t*)*CHAR_BIT);
    printf("sizeof(short int)\t= %u-bits\n", sizeof(short int)*CHAR_BIT);
    printf("sizeof(short int*)\t= %u-bits\n", sizeof(short int*)*CHAR_BIT);
    printf("sizeof(int)\t= %u-bits\n", sizeof(int)*CHAR_BIT);
    printf("sizeof(int*)\t= %u-bits\n", sizeof(int*)*CHAR_BIT);
    printf("sizeof(long)\t= %u-bits\n", sizeof(long)*CHAR_BIT);
    printf("sizeof(long*)\t= %u-bits\n", sizeof(long*)*CHAR_BIT);
    printf("sizeof(long long)\t= %u-bits\n", sizeof(long long)*CHAR_BIT);
    printf("sizeof(long long*)\t= %u-bits\n", sizeof(long long*)*CHAR_BIT);
    printf("sizeof(size_t)\t= %u-bits\n", sizeof(size_t)*CHAR_BIT);
    printf("sizeof(size_t*)\t= %u-bits\n", sizeof(size_t*)*CHAR_BIT);
    printf("sizeof(float)\t= %u-bits\n", sizeof(float)*CHAR_BIT);
    printf("sizeof(float*)\t= %u-bits\n", sizeof(float*)*CHAR_BIT);
    printf("sizeof(double)\t= %u-bits\n", sizeof(double)*CHAR_BIT);
    printf("sizeof(double*)\t= %u-bits\n", sizeof(double*)*CHAR_BIT);
    printf("sizeof(long double)\t= %u-bits\n", sizeof(long double)*CHAR_BIT);
    printf("sizeof(long double*)\t= %u-bits\n", sizeof(long double*)*CHAR_BIT);
    printf("sizeof(ptrdiff_t)\t= %u-bits\n", sizeof(ptrdiff_t)*CHAR_BIT);
    printf("sizeof(ptrdiff_t*)\t= %u-bits\n", sizeof(ptrdiff_t*)*CHAR_BIT);
    printf("sizeof(intptr_t)\t= %u-bits\n", sizeof(intptr_t)*CHAR_BIT);
    printf("sizeof(intptr_t*)\t= %u-bits\n", sizeof(intptr_t*)*CHAR_BIT);

    return 0;

The C standard defines CHAR_BIT in limits.h, as being the number of bits  for the smallest object that is not a bit field, roughly meaning that CHAR_BIT = number of bits in a byte, for all practical intents and purposes. Like wise, the sizeof operator is defined as returning the size of its operand in bytes, as an implementation defined unsigned integer value having the type size_t, from stddef.h. For the fuckos out there, the standard also says that a char object is large enough to store any character of the basic execution set (A-Z, a-z, 0-9, space, plus the required punctuation and control characters—roughly a character set of 99 symbols that fit within a single byte), and that those characters will have a non negative value while doing it. It also declares that sizeof(char) == 1. From this we can infer that sizeof(x) * CHAR_BIT should be the size of x in bits, and that 'x' is basically as good as off the edge of the map, for any x that you can't make on my grandmothers type writer.

Having the size of each type followed by a pointer to it displayed, is mostly done to emphasis that a pointer to a size, means dick all about the size of the pointer. You'll notice an interesting connection between pointer size and your hardware however. Gee, that just doesn't sound right, LOL.

Some examples:

Run on FreeBSD 8.0-STABLE i386:

sizeof(char)    = 8-bits
sizeof(char*)   = 32-bits
sizeof(wchar_t) = 32-bits
sizeof(wchar_t*)        = 32-bits
sizeof(short int)       = 16-bits
sizeof(short int*)      = 32-bits
sizeof(int)     = 32-bits
sizeof(int*)    = 32-bits
sizeof(long)    = 32-bits
sizeof(long*)   = 32-bits
sizeof(long long)       = 64-bits
sizeof(long long*)      = 32-bits
sizeof(size_t)  = 32-bits
sizeof(size_t*) = 32-bits
sizeof(float)   = 32-bits
sizeof(float*)  = 32-bits
sizeof(double)  = 64-bits
sizeof(double*) = 32-bits
sizeof(long double)     = 96-bits
sizeof(long double*)    = 32-bits
sizeof(ptrdiff_t)       = 32-bits
sizeof(ptrdiff_t*)      = 32-bits
sizeof(intptr_t)        = 32-bits
sizeof(intptr_t*)       = 32-bits

and FreeBSD 8.0-RELEASE amd64:

sizeof(char)    = 8-bits
sizeof(char*)   = 64-bits
sizeof(wchar_t) = 32-bits
sizeof(wchar_t*)        = 64-bits
sizeof(short int)       = 16-bits
sizeof(short int*)      = 64-bits
sizeof(int)     = 32-bits
sizeof(int*)    = 64-bits
sizeof(long)    = 64-bits
sizeof(long*)   = 64-bits
sizeof(long long)       = 64-bits
sizeof(long long*)      = 64-bits
sizeof(size_t)  = 64-bits
sizeof(size_t*) = 64-bits
sizeof(float)   = 32-bits
sizeof(float*)  = 64-bits
sizeof(double)  = 64-bits
sizeof(double*) = 64-bits
sizeof(long double)     = 128-bits
sizeof(long double*)    = 64-bits
sizeof(ptrdiff_t)       = 64-bits
sizeof(ptrdiff_t*)      = 64-bits
sizeof(intptr_t)        = 64-bits
sizeof(intptr_t*)       = 64-bits

I also have access to 32-bit versions of Windows NT and OpenBSD running on Pentium 4-grade hardware, but don't feel like booting the wintel tonight, I'm to comfortable with Dixie hehe. Perhaps I will run the program on other systems and implementations, for the sake of testing, and add it to this entry as a comment.

Wednesday, January 20, 2010

Bad omen or coincidence?

Something rather odd just happened to be about ten minutes ago. I was changing the dogs potty pads, when one of my grandfathers paintings on the wall, literally tilted to one side, going crooked. In my family, I reckon most people would call that a bad omen, but me, well, I have fewer superstitions, normally.

Took a step up on the step stool, and tilted it back, when I noticed that the hanging cord sliding on the hook, looked 'thinner' now. So I took it off the wall, remarking that I'm too short for this stuff, and examined it. Sure enough, the old wire cord was badly frayed, practically looking like barbed wire; the spot where it's been hanging from for years, was quite noticeably narrower then the rest. I reckon the picture probably dates back to the 60s, give or take a decade; not sure when he did most of them.

Coincidentally, the painting is of Christ on a hill top with his arms out.

Silly thoughts about the history of C/C++ coding

Note, this is meant to be taken more tongue-in-cheek then seriously, take offense at your own expense 8=).

  • All the fun C library extensions can be blamed on UNIX, less intelligent systems still don't implement them ^_^.
  • Most of the stupid type systems out there are reminiscent of the Win16 API, watch out for the Hungarians in the group.
  • Too much programming for Windows can lead to strange tattoos, that'll get you sued unless you're a pioneer.
  • There's enough C++ Hungarian in the gaming industry, to make you want to go parler fran├žais with the ladies instead.
  • If you want to sit in your own little world, stick to mobiles or Macs; or ask the Free Software Foundation for this weeks KoolAid.
  • It's alright if you need a road map to find your way through all that DDE/OLE/COM/ActiveX/DCOM mess and their variants, so does Microsoft: that's why they invented .NET for your InterCOM.
  • Watch out for the babes in the null pointer cafe.
  • sizeof(foo) ≠ sizeof(foo*); unless thou hast vilolated the tenth commandment.

Wew it's been a jumpin' hopin' day!

I was up all night fiddling with Code::Blocks and Stargella, plus work this morning, and ideas for an interesting project. However it's a project that would call for C++, and I hate C++, lol. I like C, but hate C++... funny. On the upside, I've finally gotten Stargella builds sorted out, and I'm tempted some what to hunt down and eliminate 'itches' here and there, but I'm not sure whether or not patches would be welcomed for some things that seem to be, to be good ideas. They've accrued a fair number of open patches and bug reports, so I don't think it's a highly active project. The code base is only about sixty some thousand lines, not to big for all it does.

Sigh, nothing but work on the horizon \o/. At least there's something on TV tonight that I haven't seen before, the original Night of the Living Dead. Geeze, what is it with all the zombie flicks lately? Compared to what I've seen of the remake (beginning / last half), it certainly has a more spirited beginning, bah I need some pop corn lol. I've no idea ottomh what they filmed it in, but it does give an interesting feel to the movie, different then most contemporary films of the era.

Monday, January 18, 2010

A "D'oh!" moment admid success :-/

Today launched operation breadsticks, a little mission meant to explore the idea, "What if the Haitian earthquake was man made?". First map was Made of Stone, a map I haven't really played since before joining [SAS]. I setup the `Tactical Operations Command` centre near the spawn point, and adapted the callsign Valkyrie 62, much like in the LO to China.

Everything went fairly smooth, search team rescued the secret hostage and moved deeper into the building, took a few hard to avoid causalities, and we aced the op. Where things went hairy, was the second map. For some reason only Escrt could spawn correctly and all the terrorists were missing :-S. So after plan B to hot fix it went belly up, I called for plan C and let the members have fun on the first map.

I'm taking the week off from everything except 'work' (lol), but intend to sort things in my rest time. Ok, so hacking up a map in unreal ed is not restful... but it'll be worth it. Because we need to be able to spawn, I have to fix the map to *properly* support multiplayer, it was necessary to postpone map #2. Since there were no tangos either, I'll have to create a proper scenario; in the mean time, I can just release a tangoless version that people can train on. Then when things are ready, any given weekend, we're back in action!


Sunday, January 17, 2010

The price of pissing me off.

A word of warning, this post contains quite a bit of profanity after the jump break

After being up until well past 0400 last night, setting up a decent SCons build set on FreeBSD, for testing— its usefulness to this project. I started setting up the required config tweaks today on the Windows machine.

Saturday, January 16, 2010

So busy, food even fell by the way side :-S

I spent yesterday experimenting with DevIL, I rather think that it will be more "To my taste" then using SDL_image for getting easy access to various image files. I only expect to use certain image formats in my games kit, but ahem, if that ever changes, who wants to write per-image-type handling code anew? Hehe. In playing with that, I've uncovered a bug in my zipped package handling, and have coded myself into a corner, where in the system would best serve me, by growing a more abstract file handling API—exactly the direction I wanted to go in, hahahaha! TBH, I've only ever coded myself into two corners in my life, but this ones a happy case.

Most of the night was used in experimenting with a pair of Integrated Development Environments, CodeLite and Code::Blocks, as possible replacements for existing build.{sh,bat} scripts. There is also a Visual C++ solution and project tree that I whipped up Thursday to replace build.bat, and am still cursing at over its dislike for by build tree \o/.  In terms of IDEs, Microsoft has the best, but like visually everything at MS, it's also as vendor specific as writing machine code in octal 8=).

Really, I can care less about having compiler, editor, debuger, ... all integrated—other wise I'd use GNU emacs, screen, toolchain, and their dialect of C, and spit on everyone else's graves >_>. The thing that interests me is having a suitable build system, one that can handle multiple compilers/configurations and multiple OSes readly, because `tmk` is a project on my back burner, and won't be completed anything in the short term. Code::Blocks like modern MSVC/VC++, the file format is XML driven and quite easy to modify in a standard text editor.

Installing various libraries on Windows has shown me - most developers don't know how to create a build system. At least, most open source developers can't seem to combine computer science 1.0.1 with Visual Studio projects.

Installing various programs on Unix systems, has shown me - many developers don't understand autotools or it's just to complex a build system (I vote for both).

Me, I say fuck y'all. Do it right or don't let it leave your workplace.

Wednesday, January 13, 2010

And so passes another black day

I'm rather glad to be heading back to work, and happy to see the 12th go. January is generally regarded as an off month in my family... January 12th, 1989 is the day my father died, as well as my parents wedding anniversary—what a peachy combination!

While I try to respect my families history, it's also a matter I try not to dwell on for very long. *sighs*.

Tuesday, January 12, 2010

Being stuck with walking around the supermarket (baah, humbug!), I tried to devote my trains of thought to Stargella. For me, it is kind of a difficult project; much more complex then most of the things I've worked on.

In thinking about how to structure the rendering code, I started to think more on the issue of dealing with the data sets to be rendered, which basically means sprites (2d), models (3d), and rendering the level (2d/3d), and I want as much of the code to be shared between several game projects, which makes baking the lasagna a bit involved. Since my current focus is on the 2D oriented, Stargella, I find it wiser to concentrate on sprites then three dimensional models. At first I was thinking, it would be ideal to represent animations for sprites, as a simple image stack; but I don't want to go through all that for unanimated sprites, which would still require a singular stack frame. The fix to that is simple, only use stacks for holding the animation details! Then I was thinking, gee, wouldn't it be cool, if we could attach some type of script or shader program to be run, so a level of progmmability could be used in implementing special effects. For example, using program to stake out the centre of a starship, split it into segments and have them drift away from one another, while interleaving it with an explosion-like image or particle effect. Simple enough to do from C I'm sure, but I would much rather have it be apart of the game data, then the game code. I'm not sure if that would be doable from mating with GLSL files, or if it would mean binding a script with the sprite. Either way, as far as general game scripting goes, it should have some level of access to the graphic stuff as a matter of completeness.

For now, I think I'll concentrate on resource handling. It should be easy enough, just create dynamic arrays as needed (e.g. of loaded textures), and each time a new texture is loaded, assign it an unique identifier that indexes into the array; ...

Honestly, I don't have a problem with programming in C, other then it can be time consuming at times \o/. But, because I have to learn OpenGL along the way, it is, shall we say a freaking lot of docs to parse.

While I'm more familiar with Direct3D then OpenGL, even if you can still get a good bang for you buck out of a DirectX SDK without having to stoop to C++, I'm not willing to write a DirectX backend for my game. Obviously, I want to avoid using glThis and glThat all over the game code, but ahem, the issue of shaders enter the picture. Short of making a definitive choice at compile time, that would have to live for the projects entitiy, the only way to support runtime choice, would also require writing both HLSL (DirectX) and GLSL (OpenGL) code, and that's a headache I won't put up with!  As much as I favour the idea of nVidia's Cg, it is not available on enough platforms, and implementing it where needed, to much trouble.

If people other then me want to play the game, they can buy a graphics card made in the 21st century and install its drivers >_>.

---- this post has been interrupted so many damn rat fucking times by family, that it is unfinished and will likely always remain so. This is one of many reasons why I fucking hate my life.

Sunday, January 10, 2010

Bye bye work week!

Finally finished with a nutty schedule, this week is a bit more free, although I'm still working on the weekends. Things have been erratic lately, I'm not sure if that's a good thing or a bad thing. Honestly, I like it when things are shaken up a bit, although routine does help with planning events around working hours!

My dreams have been a rather nasty torrent lately, mixing interesting possibilities with programming, and more moribund territory. On the first, I'll skip journaling, to the second, it's mostly revolving around C and OpenGL, I'm even dreaming of coding these days \o/, and as to the third, somethings are too grisly to be worth recollection.

I've managed to get everything done today, and still find about an hour or so to take a much needed 'break', haven't had one of those in a coon's age. For now, I'll probably take in a quick game of Quake or some Raven Shield. Later tonight, I need to mull over some more of the OpenGL issues and such. Oy, scratch that, dinners on the roll. It seems, one thing that never does end, is my ability to think 8=).

All in all, I'm looking foreward to Monday—I'm off work :-D.

Friday, January 8, 2010


There's nothing todo, other then pass time and work across open projects :-/. Normally I would be working today, but the snow and ice has pushed into into Saturday, which is probably good fortunate since I'm scheduled for working most of the weekend anyway \o/.

I've all but been going stir crazy for the last couple of days, although on the productive side, I've had some time to study OpenGL in greater depth. Ahh, joy. Can't even blog in peace...  hours go by through interruptions.

Tuesday, January 5, 2010

QOTD and a personal favorite

After stress-testing my last post on a fellow [SAS] member, he asked me if I always thought like a program, or did I used to think like a human. To which I immediately thought of a remark for first Corinthians, and adapted it to suit.
"When I was a human I spoke as a human, I understood as a human, I thought as a human; but when I became a program I put away humanish thing."
I really don't like to quote myself, even if it's a rip off of something St. Paul is credited with, but I really liked that target of opportunity, lol. It was just tooo good to miss!

How he does it - Trees!

Yesterday, I was explaining to a less experienced player how I so easily knew where the hostages he missed where located, after the young Element Leader exclaimed that he was always missing hostages rather then suspects 8=). For those that don't play with me a lot, I am that annoying-guy in the element, who can usually tell the Element Leader what rooms were cleared, which were missed, and so on. In fact, during one live op, I ended up guiding a younger EL around the huge map.

The way I accomplish this feat of meticulous memory, is to keep track of it in my brains equivalent of a data tree. By remembering where I am in the mental tree (I have an excellent sense of direction), I know what the neighbouring nodes are in the tree—and if I forget what is after those, by the time I reach the spot-after, I can compare what I see with a 'snap shot' stored in my head, to trigger my brain into remembering where we've been before. If we've never been there, then obviously, I append it, or if it is an unexplored door, mark it as such mentally.

 I've been thinking of putting up a diagram of it for some time now, so here goes, lol.

This is a diagram of a fairly simple building, it contains a starting room (1), a large room (2) with a hostage and two terrorists: three doors connecting to two other rooms (3 and 4), containing terrorists and a hostage. Those rooms (3 and 4) connect to a final room (7) by way of hallways (5 and 6, respectively), and contains a hostage.

It is a very simple diagram, so I doubt anyone will have problems understanding that, because if you do, there is a problem with your map reading skills ^_^.

The way I navigate in side a building like that depicted in the above diagram, is storing each element as a "Leaf" or node in a tree, itself being a tree in my minds eye. Each node is a reference in my brain, telling me what door( node)s connect it to other rooms, and what was found in it (in this case, hostages and terrorists). Those in turn, point to other nodes or leaves of the tree, creating an organised pattern, shown below:

Here you can see the nodes are again labelled, matching to their "Room number" from above. I don't mentally record room numbers, rather room names, but for sake of examples, I find numbers simpler to explain.

The first node (1) references a single child node (2), which as you can see, contains two terrorists and hostage, and references three door( node)s leading to the adjoining rooms—exactly as in the floor plan I drew earlier. To make it more obvious, I wrote X->Y on the nodes representing the doors, denoting where they lead to. The door( node) 2->4 takes you into room 4, from room 2. Just like in the floor plan, room four contains a terrorist and a door to a hallway (6), The two door nodes, 2->3, lead into room 3 from 2, where room 3 contains two terrorists and a hostage, again exactly in the floor plan diagrammed previously. The hallway( node)s (5 and 6) connect rooms 3 and 4 to room 7 (respectively), and room 7 contains a hostage.

This is actually a simplification of how my mind works, a since my mind notes doors, hostages, terrorists, downed team mates, objectives, important events, etc, as the children of a tree leaf, and the doors reference the next leaves. That however, is only of importance to another programmer :-o.

Since my head keeps a running track of where I am, and I know easily if I started in room 1, walked into the next room (2), and took the single door into another room, that I must be in room 4, and the door ahead leads to the hallway (6) connecting with room 7. The data tree (i.e. second diagram), is mental abstraction, showing (very roughly) how my mind views the relationships between elements of a map (e.g. the first diagram). So in essence, navigating inside a building, is a simple matter of scanning the tree in memory, and vola, I know exactly how to get to X from Y, lol.

This is how I navigate in doors, and it works damn well, certainly works better then asking a terrorist for directions! Because my working conditions place me inside buildings quite a lot, it has been necessary for my senses of navigation and deductive reasoning to adapt accordingly. I almost never get lost, just don't ask where you left the swiffer duster. Even navigating outside, my roads-view isn't street sign or land mark based, but closer to watching a overhead view on a HUD map from some video game.... I blame it on so many years behind a controller.

Lacking the knowledge of how the human mind operates, I've always found it easier to explain things in relation to a how a computer does its stuff.... because honestly, my mind functions eerily similar to a computer as it is... but hey, I am a computer geek!

Dunts cap

Hahaha, I forgot, I'm working Thursday instead of Tuesday this week!
The last couple of days have only been marginally productive :-(. The infrastructure for Stargellas console is virtually complete, except for the prerequisite renderer code. Soon it's time to move on with the usual loop, progressing to [SAS] related projects, then cycling to EPI, and back again to my usual loops.

My dreams have been someone erratic lately, but so far, have remained quite consistently the opposite of whatever I'm thinking about when I drift off to sleep. I'm not sure if that's a good thing or not. It seems no matter what, it's virtually impossible to sleep without thinking, short of working myself to exhaustion. While maintaining a deep holmesian focus seems to be great for pushing everything out of mind, keeping that up for more then a few weeks is staggering :-/.

One good thing to come of today in particular, was scoring a 95% on the driver's practice exams on the relevant state website. I can't help but wonder, if some of the multiple-choice answers were intended for evaluating brain damage, but hey, maybe I'll pass it. I've also found out that out here at least, being in my current age group, I could forgo the learners permit and skip straight to an exam for a full driver's license, but rather would prefer the proper chance for learners-time. Although, I still expect family to fsck me in the end \o/.

A fairly full work week is starting off tomorrow (the one luxury of being off Mondays, is work begins Tuesday). If it wasn't passing 02:22 local time, I think I would grab a snack and read the a few standards cos, but alas, time to hit the hay, eh, pillow.

Saturday, January 2, 2010

Ahh, Stargella moves foreward

I've just made a forum posting, starting an open query for any artistic talents interesting in helping to contact me. My main concern at the moment is working out the games design bible while finishing off the Georgia drivers guide >_>.

Most of the code for Stargella is going to be reused for the later first person shooter and 'mech projects (which may just get released years before the new MechWarrior lol). While the shooter is going to be a 3D affair, and the 'mech combat game is undecided, the star fighter game (Stargella) is fairly straight forward: 2D is the only way to go. At least without getting sued for recreating Star Fox, if I dared try it in 3D lol. At its heart, Stargella is about having fun, the kind of fun that existed before the move into 3D games. I largely missed the big classics like Battlezone and Asteroids, only getting to play them in later years, but Galaga was a game I did play as a child. Its always been something I've found missing, no modern incarnation I've had access to just itches the right spot, that's where Stargella comes in: it's gotta be fast and furious, like an nail biting round of Centipede. Yet it's got to something you can actually play and survive with some mastery, like Asteroids (one of my great favourites btw). Most of the games I played growing up, were side scrollers like Super Mario Brothers and Sonic the Hedgehog, so I remember the mechanics quite easily.

Graphics are my achilles heel however, because while I can code what I want, making it 'look' that the way I want, is limited by the models that can be created for the game to display. In fact, I'm actually thinking of drawing most of the ships for Stargella, and scanning them into the computer. Really it has been a long time since I've done free hand drawing, it feels more natural to me then the computer: I can work FASTER!!!

For Stargella, I very much know what kind of look I want, the question is can I get graphics that match it without the whole thing looking like the early arcade games, lol. I reckon that I could always hash things out in a modelling program and get a head start on code needed for the 3D titles, but I feel that is just over kill for a game like Stargella.