Hey again! Welcome back to another episode of fundamental fantasy!
Hrm. Let's skip ahead this time a little bit, so that you understand why we're
doing things the way we are here. The basics of game design are pretty much
fundamentally the same regardless of the game, genre or whatever. Once you have those basics
out of the way, anything past that tends to get less solid and concrete. The goal is that
everything you learn here is about teaching you to teach yourself, or to at least get
you thinking about various topics on your own.
Every major project you go through will have unique problems that will only apply to that
one, single project, and no one else will ever have to solve those same problems ever again.
You can't just ask someone else to tell you what the answer is, because no one knows.
You have to be able to learn to break the problems down yourself and solve them by yourself.
They... don't tend to teach that in school anymore.
In fact, they teach quite the opposite of it, focusing upon memorization rather than
comprehension or how to figure stuff out on your own. So this's probably a rather alien
concept to a lot of people unfortunately. As such, the next two months we're going to
do a semi-quick crash course in problem solving, and how to look up the resources you need
to answer your own questions. Or in short, you're going to learn how to teach yourself as you go.
So! First off, the thing you need to realize
is that pretty much everything which has ever been built in human history had at least one
person who figured out stuff for the first time. Even things like classes you take on
any given topic originated with someone figuring out the information originally.
You can't rely 100% on citations - you also need to be able to build things yourself. Those school
classes didn't just pop out of thin air -- whether it be physics or game design, someone went
through and discovered or created the principles that are taught in those classes before they
had anyone else to cite as a reference. What this means is that for any problem you
come across, there is a logical way to get to the answer. Sometimes it may be less than
obvious, but if you run into a problem, you can figure out an answer for yourself.
Now, looking up information is handy too though. There's a certain degree of value in solving
things yourself from scratch, but often we just don't have the time to do so. We're trying
to build something, and most of our time and effort needs to go into, well, building that something.
Having the ability to find when other people have already solved most of a
problem for you in advance is a handy tool to have as well.
So we'll be doing this in two stages. The first stage will be problem solving. The second
will be research, and I think we'll break this up into two episodes, so let's get into problem solving!
Now, there's a lot of different ways to go about doing this, but it pretty much always
boils down to the same starting point: do you have a problem?
What do you mean do I have a problem? Of course I have a problem! IT'S A PROBLEM!
Oh wait, no, it doesn't actually harm anything. Huh. I guess I don't have a problem.
Alright, whatever. So now what? Oh. There's another problem over theeeere. Alright, well we'll
just solve that problem instead! Uhm, wait, that's not it either. Ugh, this's going to suck isn't it? Yeeep.
Alright, so what's step two? Step two is identify what the problem is that you're trying to
solve before going further. This sounds kind of obvious, but it's a lot
less so than you might think. Often the real problem is masked by a superficial symptomn.
It may look like the symptomn is the problem, but it really isn't - what you want to tackle
is the core, root cause of the problem which generates the symptomn.
For an example of this, let's look at the dungeon defenders eternity game for a second. (Since I was talking with the devs when this was happening)
The design team realized there was a problem with the aura abilities of the monk class
in the game. "It's too powerful with lots of enemies within its radius at a time!" So...
the problem they assumed was at the root of the issue was that its radius was too large,
so it was affecting too many targets at once. This wasn't the actual problem. Their solution
was to just shrink the radius so that it wouldn't necessarily hit as many targets at a time.
The thing is, each new patch included more stuff, new content, higher item levels, and
as the gear quality went up, so too did the aura radius again as characters gained more
of the range stat, and so they were left with the same problem all over again - they had solved nothing.
Alright, well then the problem is it's affecting too many targets!
The next step was to hard-limit how many targets an individual aura could affect.
Which... basically meant increasing the size of the aura did nothing to help the player.
Every other statistic in the game scaled infinitely, but this was a single case
that went against all the principles that every other ability in the game was based upon.
What it ended up meaning, was that a bigger aura radius actually became a bad thing,
unable to do what its job was supposed to be. Not only was the problem not solved, they'd
made a bigger problem in the meantime. This's what happens when you just rush in
and blindly try to fix a problem without even knowing what the problem you're trying to fix is.
The solution that should have been implemented
here was actually pretty simple - a diminishing returns formula implemented into the range
stat for auras where, up to X targets total could be affected at full strength, and
once you reached that limit of targets, each extra target beyond the first weakened the effect.
By increasing the range on the aura, it would be able to affect more targets in
total before the diminishing returns started kicking in, which means the more range the
more targets, which's what it should've done in the first place, but capped within reason.
The reason this would have worked is that the problem wasn't that it was affecting too
many targets - it was affecting too many targets at full strength for the size of the aura
and therefore doing way more damage in total than was intended. Applying a fairly simple
soft-cap would have fixed the problem entirely, while still giving a reason for players to
increase their ability range stat. You see, that's what I mean by solving the
wrong problem. As such, before you even begin to try to figure out how to solve the problem,
you first need to know what the problem is. Sometimes it isn't that one thing is too strong,
it's that something else is too weak in comparison. Without identifying exactly what the problem
is, you can do a lot more harm than good as you flail about aimlessly in a vain hope that
somehow it'll be fixed without proper direction. So, alright, let's say you've identified that
you do have a problem and what that problem is! Yay! Now you solve it!
Noooooo! Ugh, another stopping point? But we still haven't done the problem solving thing yet!
Alright. Fine. Whatever. What now?
Well, now that you know what the problem is, and that it is a problem, you need to break
it down and analyze it. Figure out not just what the problem is, but why it's a problem in the first place.
Sometimes you'll find out... oh. It's not really a problem.
It may have felt like it was a problem, but it didn't actually cause any negative issues for you.
Well, there you go, solved without any further work. Yay!
Sometimes you'll also find that the reason it's a problem is because of something else
which seems unrelated. As such, you've basically gone back to the first step again - you identified
another, new problem which may in fact be the core cause.
Time for another example! This time, warcraft 3!
There was a hero in the game, the death knight, who was reaaaally fast, and had a spell which
could basically one-shot-kill elvish archers. This was a tiiiiny bit of a problem because, well,
elvish archers are kind of a major part of most elvish player's armies. The death
knight could kill one of these archers off every few seconds, and run away before anything
could be done about it. Well... that sucks. And it was a problem. A big problem.
Now, the most obvious fix here would be to nerf the death knight so he couldn't do that
anymore. I mean, that's what the players demanded should be done about it.
When Blizzard analyzed the problem, however, they came to a bit of a realization - the
reason why it was a problem at all was that the death knight was trading free-to-gain
mana to remove gold and lumber, finite resources, from an enemy player and wasn't suffering
any negative repercussions for it. Now, when you look at this problem more closely,
the issue really is that one player's trading mana for enemy resources. And it's not really
a fair tradeoff 'cause there's nothing they can do to stop it. The thing is though, these
elves also had moon wells, buildings which fill up with mana and can heal their damaged
units based on the mana. They just couldn't do their job because the archers were dying
in one hit, and you can't heal something which is dead in that game.
So... with this analysis of why it's a problem in mind, the solution was simple: increase
the health of archers by 5, from 240 to 245. It was such a tiny increase that it didn't
make any real difference in large scale battles, but in this one, single case, it meant that
the archer would survive the initial hit by the death knight's spell, and either the death
knight would have to run in and finish them off with a melee attack, putting the death
knight in harm's way, or the moon well could just use its own mana to heal the archer back
up to full, meaning the death knight's mana was countered by draining the mana of the moon well.
By understanding why it was a problem, a solution
was found which actually fixed the issue in a nice, tidy manner, without really affecting
anything else in the game. So yeah, first off, figure out if you have
a problem, second, what the problem is, third, figure out why it's a problem at all.
Alright, now we fix it! ...We don't, do we?
No, no we don't. Sigh... alright, alright... NOW what?
Well, there's usually more than one way to fix a problem. Like in our death knight vs
elves example, they could have fixed that problem a dozen different ways. They could've
reduced the damage on the death knight's spell, they could've increased the innate spell resistance
that the archers happened to have already, increased the archer's health, made the death
knight's spell a much shorter range, given the archers a small, protective shield when
near their base, altered how much damage spells do to units globally, so on and so forth.
There's a looooot of ways to "fix" the problem! Aaand every one of those "fixes" will have
complications which affect things other than what you're trying to fix, probably causing
other problems. It's like the idea that fire can solve almost
any problem. True, it tends to create more problems afterward, but fortunately fire can
typically solve those too. But then that means more problems still... and eventually all
you're left with is fire. Which may or may not be a problem in and of itself.
The point here is that you want to figure out what options you have access to that can
fix your problem. Sometimes you're stuck with a binary effect, if it's on it's too powerful,
if it's off, it's not powerful enough. The most obvious solution would be to weaken it's
effect when it's on, but you'd be missing a more useful tool - introducing the ability
to have it be more than just on or off, such as implementing a new stacking feature, where
it applies multiple stacks of the same effect. That way instead of being just on or off,
you can have a bit of control of exactly how on or how off it really is.
From a designer's perspective, you want to have at least a few options for tweaking and
adjusting things. When you build something, try your best to give yourself options built
right into it for adjusting how it works later on down the line in case something doesn't
work quite right. If you have to scrap the whole thing because there's no ability to
adjust it, then you're almost guaranteed to have a major issue to deal with sooner or later.
Anyway, so we know we have a problem, what
the problem is, why it's a problem, and what options we have to fix it. NOW can we fix it?
Well... ugh. That'd be too easy, wouldn't it?
Yeah it would. Alright, what's wrong THIS time?
Well, just because you know what options you
have, doesn't mean you know which is the best one to use. Sometimes you might need to use
several different fixes together to get the desired effect.
Soooo, your next step is to figure out which of the fixes you want to actually implement.
Look through them, see what other problems they'll cause along the way and how good of
a job they'll do fixing your current problem. Sometimes you'll get one potential fix that
can sorta fix your problem but not very well... but it doesn't break anything else in the process.
Sometimes that's the one you want. Other times you'll get a different potential
fix which completely solves the problem perfectly...! Aaah... but which also breaks something else
in the process. You then have to look ahead and consider how easy that consequent problem
is going to be to fix. If it's trivial and easily solved? No big deal! If it's a horrible,
horrible mess just lying in wait to ruin everything? Mmm, maybe not so good an idea to use that one.
So yeah, you pick the best solution to your
problem, which sometimes isn't actually the best solution to THAT problem in particular,
but more so it solves a bunch of other problems before they become problems by simply not
causing them in the first place. So we know there's a problem, what the problem
is, why it's a problem, what options we have to fix it, and which of those options are
probably the best ones to use. NOW can we fix it?
Yes.
...What? Wait, no, no, say that again.
Yes. Yes you can fix it. ...Okay... what's the catch?
Well it broke something else when you implemented it, so now everything's broken again.
OH FOR FU---INE! Fine. Fine. FINE. Alright, alright, we've got this. So what do we do now?
Well, you look at the fix after it's been
implemented and see if it actually did what you thought it would, and if there's any other
"surprises" it brought with it that you weren't expecting. You don't just fix something and
walk away, assuming everything's fine. That's a good way to come back five minutes later
and discover that you no longer have a house because it turned out you didn't actually
install the wiring correctly. Oops. Fortunately we're working with game design
principles, rather than electronics, so that probably won't happen.
...Probably.
Alright, so anyway, you've got your problem fixed... probably... so now you run a few
tests to make sure it's actually fixed and nothing else broke in the process, just to be sure.
Did it break? Whelp, now you got a problem.
Oh hey, we already know how to solve the problems now! So no big deal!
Did it not break? ...Are you SURE? Like really-really sure for realsies? Huh. It... it actually
didn't break anything else? Weird. Well, uh, I guess you're done then.
Except for that other problem over there which's completely and entirely unrelated. Guess you
gotta go solve that one too, huh? Well, not necessarily. There's always going
to be more problems to solve. You'll never, ever, 100% perfectly remove all the problems
from any moderately complex project or greater scale. The most you can do is reduce the number
and severity of the problems down to managable levels, or at least small enough of an impact
that it just doesn't really get in the way all that much. If you want, you can keep fixing
problems forever, but the fixes eventually wind up making more problems than they solve
along the way, so there's a point where you're going to have to finally call it quits and
move onto working on something else. But, it's all good. You now know how to figure
out if you have a problem, what that problem is, why it's a problem, what options you have
to solve the problem, which are the best options to fix it, and have actually fixed your problem
and tested to make sure that it's fixed. And then had to deal with fixing the problems that
either caused, or were left over afterward. The point is, you can fix problems effectively now.
Yay! Next month on Fundamental Fantasy, we'll cover
research, as in the R in R&D. You won't get much of anywhere with solving problems if
you can't figure out how to research what options you have or why it's a problem in
the first place and so on. So yeah, that means we're done for now,
so with that, I'm out. I'll see you next time!
Ma'am, we have a problem.
You know, I don't think I much care for that phrase.
"Oops." Is another phrase I don't like to hear.
"Hey, watch this!" is, however, usually entertaining.
At least as long as I'm not standing too close.
No comments:
Post a Comment