Of Dice and Men
In my last post I talked about my first steps into Ryzom's world of Atys. Sadly I have not logged into Ryzom since last I wrote so I don't have the follow-up I said I would write. Instead I spent the weekend and Monday working and researching on project WOTAN. To blow off steam I played myself a rare game of Civilization 4 on a huge ring map on Prince difficulty ... and got stomped. I never was all that good at Civ, but oh well I still love that game.
What I want to talk about in this post is the dice system I have finalized for project WOTAN. While putting the finishing touches on the character system, I became highly unsatisfied with how the DnD/GURPS hybrid I was creating was turning out in regard to stat progression and potential inflation. I am also now free to more finely develop the roll system for the dice.
Rolls and Skills
First, if you haven't read my previous posts on WOTAN or I wasn't clear (happens a lot), let me talk about the original system. It was based heavily on a GURPS-like 3d6 roll-under mechanic for use with a character system that ... I'm not sure that it is based on anything, the character sheet is sort of growing on its own accord, ameoba-like ... is based around unlimited skills and roughly 14 stats which are also determined with a 3d6.
So, for instance, your character (we'll call him Fang) has Strength of 15 and needs to move a large boulder. The boulder is pretty big but nothing amazing, so we'll set the difficulty at -3. This means to move the boulder Fang must roll at or below a 12 (15-3) on 3d6.
This is fine and all, and I could work controls into the character system to make sure point distribution is not abused (i.e. trying to roll initial 18s on as many stats as possible), but somehow for me it feels inelegant. And that might not be the best way to put it, but in trying to come up with proper skills in my system I was running into a brick wall.
Do I make a skill a modifier to a stat roll? Example: If Fang has a weightlifting skill of 2, then in the previous example he would need to roll 14 (15+2-3) 0r under. That would be the common-sense way to handle it. But then what about skill skills? If Fang also has a Dexterity of 17 but no sleight-of-hand skill (i.e. +0), could he still pull off a pick-pocket?
It doesn't seem logical as tricks, lock-picking or pick-pocketing are all greatly benefited from high Dexterity but require practice and instruction. Anyone can still basically move a big rock with no training if their physical muscle allows it, but can't necessarily pick a lock just because they have good hand-eye coordination.
I am at a loss somewhat because one thing I am very much set against is using modifiers based on stat levels. The old "12-13 +1, 14-15 +2, 16-17 +3, 18 -19 +4," et cetera. When I act uptight about using modifiers, this is what is causing it - I basically just dislike those for reasons which largely come down to personal preference and opinion.

image from Wikipedia
There are also some technical reasons for my not wanting to use this. For one I want to shy away from the use of signed operators (the + and -) in the code just because that is me. It's not a big deal and there will be some, I would prefer to not have to scale difficulty with ever-expanding negative-levels.
Also, and more importantly, I would like to avoid having to add in a special logical check to see if Fang has the skill needed to perform an action in the first place. This is not a huge deal, but it seems like there could be a more elegant way of handling it. But maybe not, this is something I am not confident I can avoid.
Probability Curves
While the six-sided die is the most common and can be found everywhere and the math of a 3d6 system is not that hard, at higher levels I think it becomes less easily-intuitive. For a computer this is not a problem, but sadly I suck at math and I am the one who is going to have to figure it out for the computer to run it in the first place.
The aspect of the 3d6 dice system that I want to preserve is the basic distribution of results -- a bell curve. Here you can see it plotted out on the AnyDice Calculator. Why is this important? You should read this article on dice systems - it helped me really refine my ideas and come up with the new system. You will see on that page that the outcomes for a dice roll on a linear system like a d20 will be more evenly distributed. In other words you have a much better chance of rolling a 20 on a d20 than you do of rolling an 18 on 3d6.
To me, at least, this makes the job of implementing both criticals and rare loot and random occurrences easier. If you want an item or occurrance or outcome to be "common" then assign the difficulty to the middle range, if "rare" then assign it to the fringes. The basic dice probability of the bell curve takes care of the rest.
Jumping in the Dice Pool
So I am basically satisfied with the 3d6 system as it stands except for two considerations:
- I do not like how character stats are initially determined.
- Character skills become more complex to implement.
- I do not like the basic difficulty qualifier system as it stands.
What I have done is tweak the system more to my liking, and in the process changed to dice system, which I will call Xd10. The X is an integral part of my tweaking both afore-mentioned issues of mine, it stands for the fact I am now using a Dice Pool system. And if you didn't read the Darkshire link above or are not already familiar with dice mechanics, that means the number of dice rolled is a variable. A situation might require a d10 roll or even a 8d10 roll.
The reason I chose the d10 (it could have been Xd6 after all) is mainly out of mental laziness on my part - honestly, a decimal system is just far more intuitive to me than base-6. It is also has a higher granularity of outcomes - a 3d6 has 16 outcomes with 216 combinations while a 3d10 has 28 outcomes with 1,000 combinations.
The reason I have decided upon a dice pool system is primarily due to its easy and elegant ability to scale a character to a situation. The difficulty of an action is determined by number of dice in the pool. And therefore it also allows me to start every stat and skill at ZERO.
This also allows me to keep to one of my initial design principles which was to use as few modifiers as possible. A skill can be looked at as a specialized stat, in that while it might have a modifier it does not itself modify anything. This is a concept I want but am not wedded to.
What the dice pool difficulty scaling means for the character is that his stats and skills will grow organically over his or her life and I will be able to refine the leveling process to a fine degree. It will make it easier to make (i.e.) d10-level mobs and loot or 8d10-level versions of the same. I will likely address from the character's standpoint by dividing levels into tiers, where the tier level is the same as the number of dice the character will mainly encounter.
For progression, what I am planning at the moment (very basically) is that every character will start off with X stat points and X skill points, to be assigned as they wish - stats will begin at one and skills begin at zero. Lets say we give fang 20 stat points and 10 skill points, he now distributes his 20 stat points between 10 stats and if he is wise he will now have all stats in the range of 1-10 with a few key stats close to 10, a few non-essential ones near 1 and others somewhere in the middle - remember, he has 30 stat points total as all stats start at one. When he gains a level he will be presented with X new stat points (depending on whether I want lots of high levels or low levels) to distribute as he sees fit.
When designing obstacles for Fang, I will now keep in mind that a level 1 character is going to have 30 stat points, so I will design most of them as d10 difficulty with a few really hard ones at 2d10. This means that most of his stats are going to be between 1-10 and most rolls are going to need between 1-10 or less. A few will require between 2-100 or less, making the roll improbable but not impossible. And help Fang out a bit if he put all his points in one stat and has been having an extremely hard go at everything else not related to that one super stat.
Skills work in a similar way, except that they start at zero and you choose them for the character, where the stats are pre-determined standards for all. This also allows for easier customization on the GM end. It's just as easy to have either an archery skill, a laser rifle skill or both at the same time. Stat modifiers influence skills through the use of two skill levels:actual and virtual. A skill's v-level is equal to the average of its actual level (the points you have put into it) and a governing stat. So if you are Archery level 5 and Dexterity level 15, your Archery v-level is 10. Likewise at later levels, if you are Archery level 50 but you neglected to build Dexterity and it is only level 10, your Archery v-level will only be 30. For almost all instances of skill rolling, the v-level will be what you are rolling on, so it will be important to define the key stats for your character and stick with them as he/she progresses.
A drawback of the system at this point is that a master archer could not shoot a rifle at all if he had never bothered to take an initial point in the skill. This arbitrariness and the skill/stat interaction are the current weak links in the system, but I'll be revisiting them when I am at the stage really fleshing out the various roll types. I am afraid I still may have to end up using a logical check for every single obstacle. Maybe that's not such a big deal and I'm just being anal.
To overcome the skill-exists logic check, I may have to define characters as already having every skill in game, but starting at level 0, which would effectively nullify "knowing" them all. So to specialize your character, rather than selecting skills to learn then upgrading them through points, you merely upgrade skills on a universal skill list. The end result would be mechanically identical but it would alter the player experience a bit. And if a game utilizes 100 or more skills, that could get too unwieldy.
Anyway, it's a cold rainy day here. Perhaps when I get a spare free hour I will revisit Ryzom. However, if I am going to make my January deadline, I suppose I should get in every minute of work I can.
Welcome to the Wiki World
while ($brain = smoke($weed)) $_SESSION['progress'] = $brain['obsessive_workaholic'];
That is how I have been feeling the past week. The downside is I do not get enough sleep and that makes me cranky. The upside is that I can power through any workload (for so long).
The beneficiary in this case was, once again, my pet obsession Project WOTAN. I have begun a new iteration, which I'm calling GUNGNIR (after Odin's fabled spear). This time, I have focused on getting the wiki system up and running alongside the user system before anything else. I am happy to say it has been a great success.
I abandoned the idea to integrate the wiki system Wikepage in favor of its own foundation, Tipiwiki, which is about as basic and stripped-down php wiki you can get. Perfect for my needs and as the past week has proven, easily modified.
I have already completely converted it from using a flat-file storage system to a MySQL database. On top of that, I converted the function list to a class ... which is the key to my ultimate plan for designing special game wiki elements. For example the showPage() function which is called when I want to output an individual wiki page to the web page.
The first two examples of what I am talking about come from the User Control Panel and Character Sheet and Sidebar pages. I created a class extend from the wiki class for both a user wiki and a character wiki object. So I have little mini-devices now which have their own special showPage() method to display information from and interact with the database.
Meaning by making a wiki page called [charactersheet] and putting <charactersheet> in it, I can now display that with the php command:
$object->showCharacterSheet('charactersheet', 'last');
So now the URL ending with /index.php?wiki=charactersheet now displays the actual character sheet with all the dynamic data along with anything else added to the wikipage. (The 'last' value refers to the page version.)
I did the same with the sidebar, which is merely a stripped-down version of the Character Sheet. I control it on the web page with a conditional (i.e. "if user is not logged in, do not show character sidebar" etc etc) and it runs through the same class object as showCharacterSheet(), except it is:
$object->showCharacterSidebar('sidebar', 'last');
This tells it to display the Character Sidebar (kinda like a WordPress widget) on the wiki page "sidebar."
The power is that I can now quite easily make as many of these little widgets as I need for a wide variety of purposes. Considering I build the overall webpage block-like out of individual wiki pages through php includes and conditionals, I am only limited by my imagination ... and VPS resource caps.
So at any rate, the display pages I have created and am working on are only the first step. While I hold to my original assertion that what I am making is of and for interactive fiction, I have refined my original vision of late. It came when I both realized my original desire was to make something of a web-based MUD and when I started to really understand the power of the wiki. That is, ultimately I see WOTAN as a Wiki Virtual World.
At least that is what I aim to bring about. For the time being I am focused on a more single-player environment in order to make the basic system a reality and work out any major security or performance issues.
But ultimately I want to be able to make a wiki-based "virtual world" where players can build their own structures and even vie against each other for territory. Wouldn't that be funny? To go to war over what is essentially a wiki category?
Another example: I have already worked out movement and areas within the game world. Each character will have X movement points (based on race, stats, etc.). These will allow you to move through the game world, i.e. wiki pages. Because each wiki page could be a closet or an entire galaxy depending on the description, each page will be assigned a movement-point value that will subtract from the character's total. (When the total reaches zero they must rest.)
This will give some actual "physical space" to an environment that otherwise be identical to all others like it. Building houses also becomes both viable and strategic - an "area" would have a limit of how many "structures" it can hold. Each "structure" itself can then hold so many smaller "rooms."
Smaller, specialized object methods like showCharacterSheet() can be used to create pre-defined structures and rooms (not to mention items like furniture, etc) while still allowing the player to customize it at will by adding a signature or more detailed description.
You can probably see by now also why site security is going to be a big issue. I'm sure there will be more than one house full of ASCII penises, but I would rather not have entire continents emblazoned with them.
So I am sticking to my near-term goal of producing a single-player RPG site, I'll just be keeping the multi-player experience in my mind as I design it. Oh, it could be truly glorious.
Anyway, I know I disappear for months at a time. I'm a rebel like that. But suffice to say, when I have not been playing 1701 AD, Imperium Romanum or LOTRO I have been working away. OK, who am I kidding? Wasting away is more like it.
I had to take a break from it tonight, though. I am using the old Baldur's Gate 2 portraits as test avatars and I swear Cernd's eyes are moving on their own now. That's funny, I should make an animated gif of it and use that.
Progress Report – W O T A N
It's me checking in again to write out what I have been working on with my web-based solo RPG project W O T A N.
Well I continue to shape and modify the game and have had two new breakthroughs. First I want to list my project milestones publicly. I have to admit, while I am great about planning and conceptualizing projects, I am pretty abyssmal about actually keeping it all written down. So these posts I make actually serve me as well as anyone else who happens to be curious.
Milestone 1: Creating the User, Character and various Actions
Milestone 2: Creating the World interface
Milestone 3: Creating a World
Now, these obviously aren't all happening in a nice, orderly fashion as I get a hankering to work between them depending on how the mood strikes me and a very large overlap occurs between MS1 and MS2 where the Actions and World Interface are heavily reliant on each other and therefore need to be created somewhat in tandem.
I am fairly far along the path of MS1. While I am still adding, subtracting and heavily modifying the existing parts, I have the User system in place and (mostly) functioning and I am nearing completion of the Character system. This past week I heavily rewrote my initial code to be more streamlined and reduced the lines of code in place. The User and Character objects are fully in place and only have tweaking left to do.
Some things I still have to write for User: a method to ban problem users, e-mail activation, player age restrictions and some admin features such as the ability to delete unused accounts. More issues may came up, but I am at the point where adding them is rather painless. I do have the ability register new accounts, log in and out and differentiate between levels of users (for admin purposes) among other things. I have gone through more than one large change already as I am defining more and more the role of the user, mostly I have actually been deleting unnecessary data fields and opting for a simpler user interface.
I have already detailed in previous posts how the basic character is shaping up. I may have overstated how similar to GURPS my system will be, but no doubt there are still valid comparisons. One of the interesting concepts I came up with recently are what I am currently calling "Action Stats."
Every action within the game is basically going to come down to a success roll (or saving throw if you will). An Action Stat is determined as the average of three existing stats and is used for more specialized success rolls. For instance, the Combat stat is derived from the average of Strength, Agility and Luck. As of right now all Action stats are actually derived from two master stats and the Luck stat.
Speaking of stats, they are shaping up to be 90% of the character. I have added more stats since I made my last post, and along with Action stats, now number 14 ... 12 Prime stats and four Action stats. And there may end up being more, though I have a good feeling we are now at a stable working point. Currently:
Prime Attributes:
- Strength: raw muscle power
- Dexterity: hand-eye coordination
- Agility: body coordination and flexibility
- Stamina: physical endurance
- Intelligence: ability to reason and remember
- Luck: the grace of the gods!
- Spirit: affinity for magic and the paranormal
- Willpower: ability to exert oneself on one's environment
- Perception: sense and wisdom
- Charisma: ability exert oneself on other beings
Action Attributes (+ luck):
- Combat: strength + agility / used for fighting skill
- Influence: charisma + perception / used for npc interaction
- Magic: spirit + willpower / used for making magic
- Handiwork: dexterity + intelligence / used for thievery/crafting
Interestingly, I have come to the conclusion that I will not be using stat bonuses at all in the game (i.e. a Strength of 18 gets you a +4 bonus). At this point I only plan on using the raw stats for the game.
Things I still need to do for Character are: refine the actual creation process, add character options to the admin interface, refine the sheet (stats, attributes, etc.) and finalize its components, create a portrait and/or paper doll system ... and that is about it - the basic foundations have been laid with two very prominent exceptions.
Those would be items and skills. I have not only not created database tables or coded any logic yet, but I am still stalling at the conceptual stage. The vision is slowly taking hold in my mind, however, so I am not overly worried about hitting a wall here. But I am a little worried I might stall here. But I have a vague though fundamental concept so I am not entirely in the dark. I think I am procrastinating these more than anything.
To make the character height and weight I have already begun on W O T A N's basic (crude will be more a propos) physics engine. As this is 100% text and not even text in the sense of being a MUD, but rather interactive fiction, physics will not play a large part in the game.
The next and final phase of Milestone 1 I will be starting soon and that is the creation of the Action class. This will hold the base Success Roll (I decided to just use the GURPS term from now on) and any variants. But it's basic logic and organization are heavily determined by the World Interface, and I am happy to say I actually made the first tentative steps toward realizing that aspect this weekend!
I already decided to use a wiki system for the World - for a few reasons but basically and largely because it will greatly simplify making adventures - creating the World in other words. So rather than attempt to re-invite the wheel I would prefer to find a very small and simple wiki script to adapt to this system.
And I believe I found it in the Wikepage project. I have already stripped out the XML/RSS and have begun work on sifting through the code and commenting it. At this point, I have decided that come what may this is likely what I will be using to create and run the adventures on any given W O T A N site. Things to do: convert from using a flat-file storage scheme to using the MySQL database and then the basic user integration into W O T A N, and add in Action methods as I create them to the wiki markup parser.
My other breakthrough this past weekend came with my inspiration for a solid plot for the originating W O T A N site. It is still too early to really go into, but essentially I am conceiving your character must collect four sacred object for some wizard or other powerful guy. The quest for each object will be rather involved and each story arch will be released separately - that is, at this point I only plan on having the quest for the first object completed when I launch the site. Of course this could all change radically between now and release. Which I am hoping for sometime either Winter 2009 or Spring 2010, there I said it. Oh god, now I have pressure! Where's the bong, I need my nerve medicine.
But in all seriousness, once MS1 is complete and MS2 is mostly complete (and therefore one would assume MS3 well underway), I plan on taking the project to Alpha stage and will be setting it up on a (semi)public server. Considering the work I put into the game before Alpha stage, I assume the transition to Beta will be rather smooth and hopefully much more swift.
A lot of that will depend on the player testers I am able to recruit. If you feel the least bit interested, make sure to bookmark this site and come back every week or two for the next few months - once I feel comfortable the game is near-Alpha-worthy, I will be taking simple requests here on a post for those who would like to help me test the game.
I'll also probably be marketing the heck out of the game on various forums and whatnot, but as of right now, this blog is the main source for the project. I already have a domain for the main game, however, and once the Alpha is live that is where the project will probably live indefinitely.
