25 April 2008

Beating the Odds

Written by Gareth ( Contact the author of this post )
Published on April 25th, 2008 @ 05:12:59 am, using 1131 words, 560 views

Various thoughts on the design have been percolating in the old head lately, mainly inspired by various forum discussions. But one of the trains of thought led me to an old problem in RPGs. The problem of chance.

Specifically, how it is possible to almost completely negate chance via reloading. All RPG gamers will have experienced some form of this, at some point.Some developer thinks he is being clever by putting some form of gambling in the game. A roulette wheel or something. Now the player might have only a small chance in winning, anything from 1 in 10 to 1 in 3, but this is as good as handing them money. You simply reload until you win, save again, repeat, viola, instant wealth.

It gets worse when game events are directly tied to such random rolls. You have to convince the gate guard to let you through the gate, but it involves a skill check? Well, even if your Persuade Skill isn’t too high you can often just reload until you get lucky and bang, you’re through.

The worst part of this is really how it kills immersion and the game’s sense of tension. I remember in the Trial in Neverwinter Nights 2, instead of it being a series of tense courtroom arguments and counter arguments it became a game of “keep reloading until you get the optimal result". It still resulted in stupid combat in the end, but I didn’t know that at the time. Nevertheless, any attempts to get me immersed in the legal battle underway were undermined by the fact that I was “gaming the system". Now, I’m a roleplayer type, I love playing a role. But the temptation is just too much for me in games. And so I, effectively, cheat.

One of the themes that the Codex often brings up is “trying to get the player to accept small defeats". As in, you don’t simply reload around any inconvenience or anytime you feel you’ve gotten “2nd best". But the real problem is games are a form of entertainment, and players are all seeking to maximize their entertainment. Coupled with the fact that most games are thinly disguised problem-reward cycles, and the player is effectively trained to try to “win", and the underlying game-players psychology becomes the enemy, unless you change the rules.

I’ve seen 2 solutions that indie developers have come up with to counter this problem, 2 quite different approaches.

Over at Iron Tower Studio, Vince and the guys have come up with a rather straightforward approach to dealing with the issue. Eliminate random rolls outside combat. Instead the game just checks that you match the requirement. So if you need a 50 Persuasion to convince somebody of something, and you have a 45, you’re out of luck. No matter how many times you reload, that is always a fail. It’s a simple solution, but powerful nonetheless. Players will barely notice, it is easy to implement and when you remove the temptation like that you simply make it a non-issue.

Jay Barnson, aka the Rampant Coyote Has a slightly different approach. His game, Frayed Knights, a comedic-fantasy RPG, has the concept of “Drama Stars". Basically, every time the player engages in some form of chancey maneuver he can earn drama stars. Which can in turn be spent for special abilities, things like healing characters when they need it and have no other way to regain health, etc. Now, the real trick is that the drama stars aren’t saved when you save your game. Every time you load up they are reset. So the old saving and loading trick might allow you to game the system, but you are losing out on your special Drama Star powers, especially if you have a full complement.

Quite a clever approach. It ties directly into one of the core psychological processes in a game players brains. The urge to collect neat stuff. You can build entire games around feeding this urge. It’s a carrot as opposed to a stick approach. Tempt them away gently from their powergaming urges by offering alternative powergaming goals, but ones which fit in with your design.

I was thinking I could extend this concept further. The main problem I see is that all the powers are restricted to the players current session of play, so if you don’t feel the need for them or are nearing the end of your nights gaming you can choose to burn them on reloading without much consequence. So I was thinking, what if they were transient, yet contributed to something permanent?

So, for example, you have a “karma bar” and a “Fortunes Favour” bar. Karma is temporary, limited to the session, when you leave the game any you have saved up are wasted. However, every time you get to say 10 Karma Points the bar resets and you gain 1 point of “Fortunes Favour", a value which IS saved. Now, you have reward levels for the “Fortunes Favour” bar. Say at levels 5,10,20,30,50. At each of these reward levels you give the player a permanent boost. Extra skill points, attribute bonues, unique special abilities they can gain no other way.

So, essentially, they have a nice fat juicy reward dangled in front of them, one which isn’t limited to the current session. So even if you are nearing the end of your play session, instead of saying “ah well, I’m not going to use these 9 Karma Points, let me do the reload trick” you will be more likely to go “Let me try earn 1 last Karma Point to tip me over the edge".

I dunno, I think that could work quite well. I know I’d play Diablo 2 until I made it to the next town portal, at the very least, because the idea of losing all my progress was undesirable. And that isn’t even a neat special ability or anything.

The downside is that this system is highly gamist. Ie, it is outside the context of the game world, in sense (although, there is an argument that playing to this mechanic is like choosing to play a character that is very Lucky, since SoW doesn’t have a Luck stat). The player is still “gaming the system". But, in a manner you the designer dictate. And, if they really want to, they can still just reload their way through the game. Additionally, it is more work for me, the designer.

I’m torn. Both systems are good approaches to the problem. Each has their upsides and downsides. So I decided, hey, why not ask the public their opinion?

So I made a poll on the official SoW forums. Let me know which one you prefer, or alternatively, if you have suggestions of your own as to how to solve this, post them! I’d love to hear from you.

Gareth out

Comments, Trackbacks, Pingbacks:

Comment from: Kris
I always wondered why games don't just roll a series of random numbers (hidden from the player) and use them, in order, as needed. The program could be set to scrap them and reroll new numbers at random times (say 30 sec to 20 min, again, hidden from player). That way, most of the time, a reload wouldn't do a damn bit of good. Shifting parameters, if even an issue, could be updated with an automatic reroll of the series. This would be similar to rolling all loot tables at the start of each level, except updated for seamless game play. No doubt I am overlooking something critical here.
PermalinkPermalink 04/25/08 @ 11:03
Comment from: Trash Email
How about offering alternatives? So you can't pass the gate because you botched the roll, so there is a merchant train passing that you might try to sneak into, or buy your way in. Alternatively you might try the sewers or wait till nightfall and climb the wall. All you need is a little creativity.
PermalinkPermalink 04/25/08 @ 14:26
Comment from: Gareth [Member] Email
@Kris : That is not a bad suggestion at all. And in fact pretty easy. You see, computer random numbers are deterministic. In other words, you set a "random seed" and a mathematical algorithm generates "random" numbers from that. Given the same seed it will generate the same random numbers in sequence every time. So keeping track of the seed and the number of times you generate random numbers is an option.

(As an aside, does anyone remember Soldier of Fortune had that random map generator which gave you a code to go with a generated map, if you passed on that code a buddy could generate the same map? That code was a random seed. )

@Trash : Alternatives are definitely offered in SoW, and one of the reasons I want to encourage players who fail to achieve something one way to try another. If people just reload at the point when they fail the gate pass check they won't try other methods? The Karma system is basically a way to encourage players to try being creative instead of reloading automatically.
PermalinkPermalink 04/26/08 @ 00:00
Comment from: Kris
See, you went beyond me already. I always thought there was a simple way to make it truly random (each time). I must admit to a rare form of OCD that only comes out playing RPG's. I won't always do it, but if I know there is a 0.5% chance for "X" to come out of a specific chest, guess who's willing to load 200 times? So, even though I sometimes feel compelled to do it, I still prefer those rare games that don't let me. And random (rerollable) dice for char creation, ugg, I don't want to talk about it. I suppose another option is only letting people save/load a game every "X" amount of time; "X" doesn't need to be large, just enough for a deterrent (for example, if I needed to wait 45 sec between loads, I would not reroll 200 times).

Personally, I don't like the idea of giving up chance in a game, as there really is something to be said for it. Real life scenario: lock picking. My friend was showing his parent's house for them to a Realtor, and one of the storage rooms was pad-locked shut. He didn't have the key, but I was there with him, and had a kit. The guy (big, fat guy) was slowly working his way up one flight of stairs, and needed to see the room. I had about 30 seconds (I didn't really want him to see what I was doing, bad image), so I whipped out the tools and had the lock open in 15 seconds, and we just pretended to have found the key. Later that night, my friend handed me the lock again, disbelieving how fast I had picked it, and this time I did it in 10 seconds. That was the last time I could break that bastard for 6 months. No matter how hard and often I tried, I just could not get through it again (for some odd reason). Eventually, much later, I opened it a few times, thus I know it wasn't busted. So, call it coincidence or luck, or just the randomness of life that it was so easy for me that first day (obviously it wasn't my skill in action); however, I always like the option of a similar thing represented in a game. I think AoD is looking like a fantastic game, but I must admit to being a bit bummed that it will be missing this....something.
PermalinkPermalink 04/26/08 @ 00:53
Comment from: Gareth [Member] Email
There are ways to make it random, but generally all you do is set the random seed based off, say, the system clock (so the seed is a different number everytime), and from there the random generator will give you a pretty unique stream of numbers. From the players point of view it may as well be random. But from a programmers point of view it is nice, it means we can simply record the seed and regenerate that same set of results again every time.

And yeah, I also don't like the idea of giving up on chance either. Just because you have skill 50 doesn't mean you should be able to pick every "rating 50 lock", like you illustrate in your example. And players LIKE chance, it adds spice to a game.

I think I'm going to investigate the "storing the random seed" method, shouldn't be too difficult. :)
PermalinkPermalink 04/26/08 @ 01:02
Comment from: Gareth [Member] Email
To repeat a post I made in the forum :

"Thought about it a bit, the storing random results thing won't work 100%. Sure, you can generate a sequence of random numbers, but you can't guarantee the player, after reloading, will go back and use those random numbers in the same sequence.

So lets say you generate 3 rolls : 5,15,12

The player talks to an NPC and gets the first value, 5, on his persuasion check, and fails. But then he reloads, from an earlier save, but on the way to going to talk to that same NPC he decides to sell some loot. He goes to a merchant, the game makes a barter check, uses that "5". Now he goes to talk to the NPC and gets 15, succeeding.

It WILL work for the case when you save just before talking to the NPC and continually reload, but it won't work in every case. The only way it would is if you generated random results for every possible check beforehand and stored them, with an ID pointing to the check that each corresponds to.Ack...thats a lot of work. Not to seem lazy, but that is a major piece of Scope Creep right there. Not going to go down that route.

So if the first option, simply storing the sequence, will prevent major abuses but not all cases, is it worth doing instead of the AoD method?"
PermalinkPermalink 04/26/08 @ 01:32
Comment from: caster Email
I would rather have different possibilities to pass a situation then some kind of mechanics solution. Just like Trash posted.
You just have to make sure to make that clear to the player in the opening stages of the game somehow.

Possibly a NPC that gives you a minor task explains this to you. And by giving a player a few perception related clues.
if thats not enough then the player should just go and play doom.

As for randomness i think it could be achieved if attributes and other skills would have some effect when attempting to do something - not just one skill directly relevant to the task.
So, for example, if the character has high charisma he could succeed in talking somebody into something even if his speech skill check is lower then required. And this is a very simple example. Other skills, attributes, faction reputation or specific events can have an influence.
Depending on how complex you want to make it.
PermalinkPermalink 04/26/08 @ 03:12
Comment from: Gareth [Member] Email
@Caster : Yeah, I think maybe I'm focusing too heavily on a mechanical, programming solution rather than a design one. Taking efforts to illustrate to the player that there are multiple routes to success help a lot.

Oh, and Kris : You can pick locks? +10 cool points ;)
PermalinkPermalink 04/26/08 @ 05:02
Comment from: Taylor Meffert Email
I dislike the practice of quicksaving/-loading, which has become ever more popular in modern games, so I really approve your effort to cut down its effects on randomness. I'd like to add a few thoughts:

Variant 1:
Complete absence of randomness isn't a satisfying solution. Just imagine a thief with skill 19. He wouldn't be able to open one 'difficult' door in the game, if 'difficult' translated to '20'. Now he improves a bit (+1). Suddenly, he's a master thief who walks through every door there is.

Combining several skills/attributes wouldn't do much - it still boils down to this one static check. It would be much better if 'difficult' doors ranged from 20 to 25, for example. Now the number of doors our thief can open would slightly increase with every skill improvement.

As you commented before, you could do these rolls way before the check is needed - for lots (~all) checks there could ever be. But that doesn't imply a lot of coding effort: In my example, you'd just need to add a 'modifier' to the door object, ranging from 0 to 5, beside a general 'difficulty' enum.

Main problem is, when to do these random rolls? Your program could do this during new game initialisation, for the entire game world, but that would burn a tremendous amount of memory/save game size. Better stay in a local area: If it's too small, people could reload, if it's too large, it drains memory. I'd suggest to define 'regions' - probably a pattern of squares - and generate all numbers needed in an entire region at one time. That said, whenever the player moves into a region, all neigbouring regions are updated (newly randomned if they haven't been already), while distant regions are dropped. Experiment with different region sizes.

Variant 2:
I really like that idea of getting 'Karma' for not beeing a quicksaver for some time. Just two little modifications: Don't reset 'Karma' to zero when you translate it into 'Fortunes Favor' - just keep K at maximum and put all additional points into FF. For example, if 'Karma Cap' is 10, and the player has 8 Karma, there is no effect. Now he gets another 2 Karma, and still no effect... maybe a 'Karma Gem' or whatever would shine brightly on the screen. Now the player knows: Reloading now would be foolish, any Karma he gets will directly translate to FF. So 2 Karma -> 2 FF, 3 Karma -> 3 more FF ... the longer, the better - best not to reload, unless there is no other way.

The other thing is, make an option 'save and exit'. Saving itself would store the 'Karma' value, but exiting later (or reloading) would zero it afterwards. The player could save and exit, to come back later on (by reloading _once_), without the posibility to manipulate randomness - he couldn't retry anything he tried before - therefor not loosing his precious Karma. Maybe just reduce it a bit, for giving him the save/reload point for potential later abuse.

But please, um... make up something better than '100 Fortune translate into 1 Strength' or the like. Have cool things happen to the fortunate player, drop cool items, let him bypass difficult situations out of 'sheer luck', make easter eggs like a valiant knight pointing out that the player is no savescummer...

Variant 3:
Do you know roguelikes? They feature 'permadeath'. Don't worry, you don't need this horror for your game, but you could use the weaker form of 'permafailure'. That said, whenever you try something that can go wrong, your game is saved afterwards, on a single slot. Combat or other deadly results would be an exception here - but still, every decision you make has an impact on the game, you don't have a safety net. This adds a lot to immersiveness.

... And one more thing... please try to minimize/zero your use of 'clock' for random purposes... trust me, I've seen lots of problems arise in programs that worked 99,9 % of the time... until they happened to roll something in split-second .000 ... Go ahead and save your RNG status inside the save file.
PermalinkPermalink 04/26/08 @ 09:01
Comment from: Kris
Here's a question, how hard would it be to create a file that self purged every hour or so. That file could store the first roll a player had for each specific task. Reloading would not change the file, and, at least for a time, the same number would come right back if they tried again. Obviously, you would want to give them another chance at some not-to-distant point, as that's the whole purpose of having luck a variable. Now, not knowing how to program, I'm not sure if you could have one file, with various time-stamps that are checked against the system clock and either used, disregarded or rewritten, or whether you'd need to have separate tiny files for each skill check (there really wouldn't be that many over a one hour period). Either way, it seems an option. I'm sure that people can go to elaborate lengths to get around such a system, but, if it really matters that much to them, more power to 'em. As for the lock picking, it's not like (as they say) riding a bike. You don't practice, you lose it. My pick calluses are gone, and my "mad skills" close to it. I did this intentionally. When you can get through locks, closed doors are far too inviting; the temptation is unbelievable. Safer just to avoid the whole issue.
PermalinkPermalink 04/26/08 @ 11:53
Comment from: scyp Email
When I first read your post the idea of pseudo-generated numbers with specific seed came to my mind. But like you said - the sequence of action in which these numbers are used matter and it's not always the same, so it won't work.

Other ideas how to utilize these numbers seems to hard, and I believe that every good idea has to be the simple one, so I wouldn't even try them...to much effort.

Making load to long isn't viable option too;)

I hate games when there is no possibility of reloading, but abusing it isn't nice either.

So i think you should either live it as it was - and it would be up to the player if he abuse some aspects of game, or plays fair, or go for the other option. But it has to be hidden from the player as much as possible. I am not a fan of something like visualizing this "drama stars" on the HUD...
PermalinkPermalink 04/26/08 @ 13:04
Comment from: Terje S. Bø Email
Here's a simple system that will ensure that reload-abuse will not kill the game: When a character is generated, store the system clock. Have all objects, NPCs and dialogue choices in the game have a unique ID. When a player interacts with the object, NPC or dialogue choice the "character generation clock" + "Item ID" becomes the random seed for the die roll tied to that object, NPC, or dialogue option.

If retries are possible after some trigger condition (say, the player has increased their barter skill and can thus renegotiate prices with an NPC vendor), simply set the "clock+ID" seed and then call the random() function once per time the trigger condition has been met - use the last number it returns. You will get the same number every time the player reloads, but a new skill check each time the trigger condition is met.

This raises interesting questions around predestination, though. ;)
PermalinkPermalink 04/27/08 @ 18:26
Comment from: caster Email
Let me just expand my idea of a "mechanical" solution.
Obviously charisma usually affect NPC reactions in some way so maybe that wasnt the best example.

I say, make all main attributes have a bonus on some speach skill checks. Strength and constitution/toughness can impress a raider or some army sargent, dexterity or agaility can help convince some thief, sharp wits can help in every situation, some medical knowledge can give you a small or bigger boost when talking to doctors or crazy surgeons.
Its still a skill check but no longer dependent on a single skill - which gives the player a bigger array of possibilities and sense of satisfaction that he invested in other skills or knowledge.
It also looks very natural and appropriate which save seeds generally dont. It looks like a natural part of the game world not something imposed from the outside by a designer.


Then you mix in NPCs which have specific reactions to your attributes and skill so you cant do the same thing with everyone. Some nice old doctor will dislike you more if you are a classical brute and very tough but a crazy surgeon would like that.

And a good way to display this would be to have new lines of dialog appear if the skill check succeeds. At least some of the time, instead of just making old ones suddenly work.

Then you add luck as a small bonus applied only to certain questions or dialog options. Those that would be clear to the player as such.
"Couldn't you just let me in? Its freezing out here..."

But still connected to the other attributes, so if you have some that this particular guard dislikes the small bonus from luck couldn't help you anyway.



One other problem that makes people reload is that games usually don't provide anything else coming out of failing some task or skill check.
In normal life failing at something doesn't make you die.
It makes you find another way and often it first imposes a set of even harder consequences you have to overcome first.
Like the usual simplified example of getting arrested.

If you allow the player to play on and experience other things, hard but interesting consequences coming out of that situation (not just braking out somehow and stealing back your belongings - more interesting and long lasting), very few players would reload.

So failing at something (in the ideal game) should only open up new paths.


PermalinkPermalink 04/28/08 @ 01:43
Comment from: Elyandarin Email
One option is for skills to have more gradual effects.
If you do not QUITE have the skill required, you get a suboptimal success, providing incentive to raise the skill just a bit more.

Examples for picking a lock:
*You get PART of the mechanism to open; Forcing the door now requires lower strength.

*It takes X times as long, or is noisy; picking another lock in the area might draw too much attention now.

*Picking the lock consumes X times the amount of thief paraphernalia (lockpicks, oil, etc)

*You learn enough about the lock that you can recognize the key if you see it - or make a copy of the key with crafting skills.

('X' might be proportional
to the difference in skill.)

Of course, it'll be tedious to put in the extra options...
PermalinkPermalink 04/28/08 @ 12:55

This post has 57 feedbacks awaiting moderation...

Leave a comment:

Your email address will not be displayed on this site.
Your URL will be displayed.

Allowed XHTML tags: <p, ul, ol, li, dl, dt, dd, address, blockquote, ins, del, span, bdo, br, em, strong, dfn, code, samp, kdb, var, cite, abbr, acronym, q, sub, sup, tt, i, b, big, small>
(Line breaks become <br />)
(Set cookies for name, email and url)
(Allow users to contact you through a message form (your email will NOT be displayed.))

Blog of War

This is where I ramble on instead of being productive and working on Scars of War.


July 2008
Mon Tue Wed Thu Fri Sat Sun
 << <   > >>
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Miscellany

XML Feeds

Users Currently Online

  • Guest Users: 2

The Extras

Contact the admin  /   Custom B2Evo skin design by Andrew Hreschak
Credits: blog software | UK hosts | ads