Wednesday, July 9, 2008

Linux Wants to be Your Friend (Part II)

Wow. Linux Mint...I was really, really impressed. Of all the "user-friendly" Linux systems I've messed with, this one is hands down one of the most solid and truly user-friendly.

Installation was, as expected, a breeze. It took maybe 10 minutes total, and like most modern, desktop-based Linux distros allowed you to explore the LiveCD at your leisure while the partitioning and file-copying and whatnot was being done.

The full installation naturally has the essentials: the excellent Synaptic package management system, Firefox, Pidgin, and a nifty little update program that allows you to update the entire system with a few mouse clicks. The aspect I enjoy most about the update program is it resides in the toolbar along the bottom, very unobtrusively indicating, with nothing more than a slight change in the button, that there are new updates available.

The best part: all internet plug-ins are installed right away, as promised. I was still having issues with applets (they weren't aknowledging keyboard input, very odd...), but there was no need for me to do any manual installs of...well...anything. Probably the easiest Linux install I've ever had to be quite honest.

The only minor issue I had with this distro is it doesn't do root like I normally expect it to do root. You have the *option* of setting a root password, although it's recommended you don't. The first time I did set the root password, just out of habit, and after multiple failed attempts to start up a device manager, I realized that the desktop was, like Mac OS X, asking only for the user's password. sudo asks for the user's password, and, to my horror, the user can even modify important root-level files (for example, the grub boot menu file) just by sudo-ing. Depending on the environment in which this distro is installed, this could be unforgiveable or just cringe-worth.

Outside of this I would highly recommend this system to any Linux n00b who just wants a working system set up quickly and painlessly. This distro will be remaining on this desktop until the techs find out and become engraged at the lack of Vista.

Tuesday, July 8, 2008

Linux Wants to be Your Friend (Part I)

What do you do when the Vista computer at work, which already runs painfully slow due to the underpowered computer it was forced on, becomes so choked with viruses it is virtually unusable? Well, you install Linux on it, of course. The problem? You (in this case me, but meh, pronouns...) are pretty good with Linux, and the people sharing this computer haven't even heard of Linux. What distro do you use?

The fun thing about this is it gives me a chance to field test a few Linux distros for usability, and see how each one stacks up again the other. My first choice was <a href="http://www.debian.org/">Debian</a>, which, in hindsight, was an awful idea.

Pros of Debian as a "common user" system:

1) It is incredibly easy to set up. The net install takes maybe a half hour, just due to all the file downloads. If you have a fast connection it takes even less time.

2) Just installing the "core" components gives you a fantastic Gnome desktop right away (this may seem like an obvious point, but I've installed more than one distro that requires you to install xorg on your own, or do xorg configuration, and so on).

3) It has a shnazzy update system, as well as the always-excellent package management system.

Cons:

1) Debian's staunch adherence to F/OSS, while admirable, is the main source of many headaches. Flash was easy enough to get working, but I never got the JRE to work right (many applets just displayed a frustratingly cryptic "Error Loading" message), and I don't think there's any chance I'll ever get Firefox 3 installed on there. Yes, Iceweasel is technically Firefox, but it is still the old version and this is still unendingly frustrating.

2) Their dedication to having a solid platform is fantastic for servers, but especially when it comes to web browsers, being even a few months behind is too much. New Flash plugins are released all the time, and sometimes software, such as Firefox 3 as I mentioned above, is important enough that I want it installed and running right away. However, an outdated system makes everything that much harder to get running (GTK libraries aren't up to date, and didn't want to get up to date, so I was left Firefox-less), and leads to a lot of extra work I don't feel like I should have to do, especially when it's a computer I hardly use more than a few hours out of an entire month.

The next distro on my list to try will be <a href="http://www.linuxmint.com/index.php">Linux Mint</a>. I'm burning the boot disk tonight; the excitement is palpable. Linux Mint is based on Ubuntu, but it's supposed to have all media plugins installed already...I'm anxious to give it a try and see how easily it is to install and use. Stay tuned for Part II tomorrow!


Monday, July 7, 2008

Problem in Interpretation

Just as a programming exercise, I've been trying to write an interpreter for the esoteric Brainfuck language in C++, and it is hands down my most unsuccessful and frustrating project ever. Taking my first far less competent attempt into consideration, I've probably been working on this for a half a year (though I should mention that the "work" was extremely sparse at best).

My first attempt, before I understood the goodness that is the STL string class, was to utilize arrays. To be fair this was (pre-Theory of Computation) how my mind felt the interpreter was MEANT to be implemented. I mean, it uses > and < to increment and decrement the pointer. And really, stripping it down to its core, all the language does is move a pointer up and down an "array" and increments and decrements the contents until it gets a command to "print". At that point it is assumed you're outputting an ASCII character; all that work just to create a string of ASCII characters from their number codes.

My next crack at it (meaning my current attempt) is involving an array, but only an int array in the main increment and decrement function. The actual input, as well as the final output, are both strings (so, if you want to get really technical, they're char arrays, but we're not going to worry about that because you don't have to treat them as such when you're actually using the string class. Because the string class is so wonderful).

The issue I'm running into again is the same issue I ran into with my last attempt: the while loop encased within the "[" and "]". The problem here is twofold: 1) figuring out how to recursively call the increment/decrement function so that I won't be re-writing the main chunk of code in my program and 2) dealing with the situation where the current index (ie the index the pointer is on at the point of the "[") will either be the number to be incremented/decremented, or the counter.

So during the while loop there are four essential pieces of information: the index to be incremented/decremented, the counter index, and the actual value at both these indexes. I have to keep track of this, while being able to throw everything back to the "main" program in which everything is just a straight line of incrementing/decrementing.

My friend suggested using a stack at this point, and my initial sketches involved pushing and popping the "+" with each run of the loop; after considering, I don't think this is at all effective. The first move will be to push each + found in the first run through (for the sake of simplicity I'm assuming the modified index will only be incremented); after the first run it will be obvious what the counter is and what the index being modified is. Keep pushing + until the counter runs down, then pop each + until there aren't anymore. Voila!

Hopefully I'll have a working interpreter by the end of the week; I'll post code once it's completed.

Thursday, June 26, 2008

Back to Arch, and Lisp

The past couple of days I've been slowly migrating back to my Arch Linux box, especially after I realized most of my lack-of-hdd-space problems were stemming from the fact that I hadn't emptied my trash in a while. Nice one. Anyway, I'm moving back to that box as my primary dev environment just due to the fact I love more hands-on Linux distros like that, and feel like they're much easier to code on because it's expected you know your system inside and out...that leaves no place for libraries to hide, and removes the voodoo that seems to normally go along with prepping a dev environment from within a more hands-off system (I'm looking at you OS X).

I still haven't decided whether or not I'm going to nuke my OpenSolaris partition; I really enjoy having a full Linux distro running within my Mac, especially when I need to go home and there's no way in hell I'm lugging back two desktop computers. This just will not happen. I'm certainly leaning towards keeping it after being reminded how easy the install and initial set-up was. No fuss, no muss.

I'm finally starting to get back into Lisp as well. Recently I've come down with "do the same thing every day" syndrome, or in a rut as it were. So to rectify this I'm taking a break officially from TF2 (shock!) in order to start working on some projects, including a Lisp syntax checker and the multiple games that have been piling up. (Maybe I'll make some time for musical endevours as well? My saxophone is so painfully neglected...) So much for getting lots of work done over the summer.

So I currently have two primary goals: learn Lisp and complete at least one simple video game project. Hopefully the next time I post I'll have some progress to report!

Sunday, June 22, 2008

Java Just Is Not My Bag...

I've been slowly trying to work out a Java game based on this design since the end of last semester, and progress has been slow to nil. Java is not my main language, and despite the fact I learned quite a bit in my GUI class (where Java was a requirement), I'm still struggling with the very basics. Whereas C++ just *feels* right, when I'm attempting to do any programming in Java I feel like a awkward teenager trying to unsuccessfully grope a transvestite hooker, desperately hoping something good will come out of it if I just keep feeling around long enough and ignore that everything seems wrong about it...

There's not a particular reason for me to feel this way, I've just never been convinced that Java is near as elegant or worthwhile as C++. And I just never really got the hang of it. The main issue is the enormous API; everything in Java is about memorizing syntax. Yes, there is a lot of this in C++ (there's more to the string class than I want to imagine), but somehow it's just not the same. I'm sure this is due to my lack of knowledge, but I don't feel as if I have any control over the built-in functions and objects. As I described to a fellow programmer friend, it feels like trying to use Legos to build an engine.

Anyway, back to my game...I got a fairly good start, with graphics and all that, though I got "stuck" (read: stopped working) when I realized I would have to think about how to deal with the click-place mechanic with the blocks. Yes, this isn't hard, but my mind was whining loudly, "Whyyyyyyyyyyyy do I have to help you figure out how to keep track of all those x and y positions? Can't we just start playing [TF2/ Resident Evil/Metal Gear Solid/Final Fantasy] again??", and I would always give in. Finally, I came back to it after months, and in between that time had started up my zombie RTS project (in C++), and I realized I had no clue what my code was doing, so I overracted and deleted all versions I had made up to that time and fired up Netbeans with a fresh new blank project. And realized it had been so long since I had programmed in Java that I couldn't even remember where to start...

Ironically the main reason I chose this language in the first place is its expansive built-in support for basic graphics stuff. I COULD use a Java game library (like lwjgl) but that would mean reams and reams more of API to trudge through. So once again, I have restarted the same game project, and am faced with my failing as a Java programmer. I have tentatively started the classes, named a few variables, outlined what is inhereted from what, all while struggling to remember exactly how all this works. Someday I will beat this language. Someday.

Saturday, June 14, 2008

Terrible Game Analysis

I fired up Resident Evil: Code Veronica X again for the first time in a while in the hopes I would be able to make some progress and got so lost and frustrated I ended up starting the game over again and pulling up a full walkthrough. Honestly, I don't think I got very far overall, and during my second play through attempt once again shut down the game in total frustration.

This game is largely toted as the worst in the popular game franchise, and was the last of the "classic survival horror" style entries (which RE defined) before Capcom went for a more modern, action style with Resident Evil 4. It is not at all unlikely that the complete revamp was due to the failure of this game. I completely forgot about Resident Evil 0, THIS was a terrible game that marked the end of the traditional survival horror gameplay for the series.Without falling into the pit of ranting too much, I wanted to pinpoint what exactly it was about this game that made it so unbearably frustrating.

This really isn't obvious at first glance; CV sticks very closely to the traditional gameplay style pioneered by the older entries, including the tank controls, fetch quests, and file reading. The level design is dominated by large mansions, labs, and a few outdoor areas, once again in keeping with earlier titles, though it was far more expansive than the previous three. Here's an initial issue: the level design is almost too expansive for it's own good. Like the original RE, you get an overhead floor plan of the areas you're in, but unlike the original RE, you're not limited to an extremely compact area, and quite frankly, none of the rooms are shaped oddly enough to provide landmarks of sorts. Every room is a different sized square. This does not translate into a useful map.

Along these same lines, each one of the rooms was just non-descript enough that I could never seem to remember what was in each one or where it led. To make matters worse, the sheer amount of them made them just blend together; there was never a point where I felt like I had a real idea of where I was going. The original RE technically "looked" all the same, but once again the fact that the area was so severely limited allowed the player to absorb where all the doors led. RE4 deals with its impressively expansive areas by making each one look different and providing an extremely helpful map (besides being exceedingly linear).

Naturally fetch quests were a cornerstone of the series, but CV took this to such a ridiculous extreme that the entire game felt like nothing but one gigantic fetch quest party with a few zombies tossed in to provide some kind of challenge (as if the level design didn't make it hard enough). The fetch quests and puzzles in the original RE were silly, yes, but they at the very least made a small amount of sense within the context; you had to find a book to place with other books to open stairs up, or use the clues on the wall to mix the exact right chemicals to kill the evil plant zombie. You were never at any point needlessly loaded down with too many fetch quests at once either. Code Veronica has you picking up emblems, plates, useless guns, insects made out of jewels, and various other pieces of junk at every turn. At the point I quit the game the first time I had a painting, two "proofs", a plate, and various other pieces of ridiculous brika-brack in my magic chest. To be honest, this was, in fact, the main reason I quit; I was faced with a pile of various junk that needed to be placed in their various respective holes in the game, and the thought of not only having to retraverse the areas to get it all there, make return trips because my carrying capacity was so low, all while painfully low on health with very little ammo to keep zombies at bay and no hope of finding any more health items...this was too much for me.

Just to be fair there are a few good elements; the main character is actually pretty cool (I don't care what anyone else says I like Claire), the combat knife is the most useful anyone ever gets in the entire franchise, and that chick can take an ungodly amount of damage. I mean, she's a fucking TANK. The plot, although it was pretty weak even for a Resident Evil game, still provided some extremely amusing elements (cross-dressing insane main villain) and some important plot points for later games (Wesker being all un-dead and self-elected main villain for the series from this point on). So I suppose in some ways it's not a total loss. It's just unfortunate that, if the level design and fetch quests had been more fine-tuned, the game really wouldn't be half bad.

To sum up, the terrible plot elements, characters, and voice-acting can all easily be forgiven if only the game itself is FUN. Code Veronica manages to make you feel like you're working, not playing an enjoyable video game. And this is its ultimate downfall. When your players quit the game in frustration then you've failed them in a huge way. Fortunately, after RE0 ended up being even worse than CV, Capcom got the message and now RE is (argueably) getting better with each new installment.

The Return of Wheel Bird and Dog (?)

Even though I know it's a HORRIBLE idea to start thinking about new game concepts while working on another game (only because I have the worst track record of finishing projects and I really want to finish BioWar), I realized as I was trying to figure out the assets problem that I had a large library of potential assets for another game...The Official Wheel Bird and Dog game.

People who were not friends with me my first years of college will not be aware of this odd artistic expression that was a fairly substantial part of my life for a few years. It consisted of a crudely drawn dog and purple ibis bird (who did, indeed, ride a wheel contraption around) who were always on the hunt for barley to make mead (despite the fact I discovered later that mead was not made out of barley). Other reoccurring characters included The Mighty Ferret of Girth (an ultra-sized ferret that only made "dook dook" noises), and various other random creatures that did various other things (other favorites of mine were Crack Horse and Bong Monkey, a large tegu whose name I can't remember, and an anoexic cat).

The "comic" ran long enough that I (reportedly) released two trade paperbacks including 10 (or 20?) comics apiece. I wish I could be more accurate with all this but I'm far too lazy to dig it all up. All the comics were scanned onto my computer and posted to a hand-coded website on my Ball State webserver for all my friends viewing pleasure when I was just starting to really get into the internets.

Anyway, enough remenicing. Summery of this story is I still have all this on that server, and I could very easily cut out the characters and produce .pngs and what have you for the sprites. I'd need to think of an original concept for the game, since I wouldn't want it to just be a cookie-cutter platformer, but I'm thinking this would be an excellent basis for a casual game like I was talking about in my earlier post (Ruminations on Casual Games). This is going into the idea bin, there could be more later.

**EDIT: I just remembered the tegu's name was Pom-Pom. He was Dog's pet and liked to eat dirty goth kids at Nine Inch Nails concerts.