Sunday, November 15, 2009

Okay I'm a Liar

Okay, so on reflection, I may have made a few misstatements last time.
Firstofall, the games is probably around v0.0.7 now; I forgot about making a menu system to initialize your character and level up and things. And implementing the menu system nudged me forth into finally rewriting the input system (more on that shortly).
Secondly, "Mechanics derived more from jRPGs" is probably a staight-out lie. Or at least a half-truth. Thing is, I am straight up tired of people just cribbing mechanics right from the d20 system and calling that their gameplay. So, a more accurate statement would have been: "Mechanics made up by me". I suppose this might constitute as throwing down a gauntlet, but for a genre consistently described as being the pinnacle of "gameplay over graphics", the mechanics tend toward similarity more often than not.

So, the new input system. Long story short, instead of each game state having to take into account keypresses, there's now an overarching input system that translates input into a string. Instead of having to say if(event.key.keysym.sym == SDLK_LEFT), I can now just say if(input == "left"). If shift is held down, it either capitalizes the letter where appropriate, or adds S to the front of it. If ctrl is down, C gets added to the front. If alt, M (for meta. Yes it makes perfect sense, just go with it). This simplifies things greatly when it comes to compund inputs. It also makes accessing items off a menus much, much easier programmatically. Instead of having to convert keypress inputs into an integer, then access the data at the right location, I can just iterate over the array and match the input letter with the item letter. It also makes editing the config files (which I will program sooner or later) much easier, as well as greatly simplifying the code for the "Help->Keybindings" command.

And now, in lieu of more content, screenshot time!

Human Warrior fights Goblins


Elven Mage faces off with a Goblin


Halfling Thief appreciates the randomly-generated level

The stats pane is deprecated. I'm probably going to put it on the bottom of the screen. And it isn't going to have every stat on it, but the more important derived stats (HP, MP, ATK, DEF), and XP  out of ToNextLevel (TNL). There will be a separate, more detailed stats page with a full report.
Finally, a list of things to implement before I consider the game v0.1
  • More monsters than just goblins (trivial, enemies already loaded from data file)
  • Menus: class choosing (on levelup, when starting a character), race choosing
  • Enemies attack you as well (trivial)
  • Levelup capabilities
  • Respawning, dynamically generated enemies
For v0.2, I'm looking to have classes unlockable as you level, a multi-level dungeon, and the save system, among other things. Yes, this is getting ahead of myself.

Tuesday, November 10, 2009

Motivation

This is not the first game I've tried coding, and I dearly hope it is not the last. It is, however, most likely the furthest, most cohesive effort I've put together thus far. This is hardly surprising, because each of the proto-games I've made up to now have had similar backing.
And yet, invariably, my attention starts to wane eventually. I remember how much fun playing videogames is, or a fantastic new design idea jumps into my head and I feel as though that would be a more worthwhile project. Currently I'm avoiding purchasing Dragon Age: Origins due to the fear that it'll suck me right back out of this programming groove I'd only recently re-found (Borderlands managed to keep me from programming anything for over a week).

I ask myself what, ultimately, am I trying to do with this game?
I'm making a roguelike. As such, there's features it will have that can be described in terms of things other games have done already:
  • Permanent character death
  • Random dungeons
  • Persistent dungeons
  • Plenty of class-race options
  • Lots of different enemies
  • Magic/abilities
  • Tons of items
That's well and good and all, but it's not exceptionally exciting per se, at least from a creation aspect. The reason being is that it's been done before, loads of times, in many/most other games in the genre. I can't speak for everyone on this, but I know that one of the main motivations for me to want to make a game is to take something I already like and make it better, or at least add some more features.
Here's an incomplete list of mostly-unique things about this particular roguelike:
  • Multiclass characters
  • Mechanics derived more from jRPGs (Final Fantasy, etc.) than tabletopRPGs
  • Randomly-generated world
    • Challenges that scale appropriately in difficulty
    • Mostly random towns
    • Acceptably realistic wilderness
  • Varied, intricate item generation
Upcoming articles will have more to do with the second list than the first.
When both lists are reasonbly checked-off (i.e. implemented in the executable), I will consider the game v1.0. This is a very long way off. I'd estimate that the game is currently at around v0.0.7, and it's been around a month since I started (I forget the exact date). I'll call it v0.1 when I implement the message system and an attack command, because these are rather basic low-level systems that need to be implemented before I can rationalize giving the game any completion status.
I'll probably start releasing the game when I consider it v0.5 or so; where there's something that has a smidge of depth to it that's reasonably playable.

Friday, November 6, 2009

One fun Item

More and more I'm thinking about using a more Diablo-style magic item system than your typical roguelike, one in which the term "loot" might get passed around from time to time. This will all require me to implement items in general, but that's a task I'd have to go about doing anyway.
The plan then is to define various item types and base statistics which can then be modified by various adjectives. A semiinteresting consequence is that these adjectives can be magical or mundane, and these all will add up to some rather verbose item names, i.e. a Flaming Vorpal Sharp Iron Longsword of Balance and Pestilence.
On identification, the basic aspects of an item would be available at first glance; taking the above item as an example, on the ground the item would read "metal Longsword". After an Appraisal, something which should take a short but non-negligible amount of time (around a minute), the extent of the item's physical properties would be revealed, so the aforementioned sword would now show up as a "Sharp Iron Longsword". Depending on a character's sensetivity to magic, the item's magical nature can be known as early as seeing the item on the ground, or even from a distance if the item in question was of artifact-level power. At whatever point the item is revealed to be magical, the item's name changes color to whichever tier of power it belongs to. At that point, an Identify spell (available on scrolls, from the players' spellbook, or from some NPCs in town) would need to be cast to reveal the exact nature of the magic item, even though its effects have been benefiting the player from the time they equipped it.
A part of me thinks it could be interesting to have there be no easy identify - no Deckard Cain to tell you what things are for a negligible fee or less - and have the properties of the item revealed as the player's character observes their effects. But then, there would be little benefit to doing so, and the process of rubbing various combinations of weapons and enemies together would be more tedious than imaginitive, even though the process would in most cases be fairly quick (i.e., it's a simple matter of identifying Volcanic weaponry as it tends to set things on fire), and thus would be a good deal of work on my part for very little if any benefit on the player's part.