Types of quests

Started by
54 comments, last by Norman Barrows 11 years ago

thought about the simple case:

kill badguy for questor to get reward

no special mods, just that. figured if there was a solution to that, it could be applied to other cases.

the conditions would be: success if badguy dead and player at questor location.

and about all i could come up with for orders were:

(name of goodguy) asks you to kill (name of badguy) for (some offense) in return for (reward). will you help (name of goodguy)? yes/no.

items in parentheses are randomly generated.

for (some offense), you'd have a list of "offensive actions" and a list of "objects that can be offended". <g>. No kidding!

it actually works. i ran a test case on my RPG project. "how can a hostile hurt a band of friendlies?" attack them, kill them, capture them, take their stuff, destroy their shelters, deplete nearby resources, deny access to nearby resources, kill or take their animals, etc. so these are offensive actions. as for objects that can be offended, that would be the specific member of the band who was attacked, captured, or killed, what was stolen or destroyed, which resources are threatened, etc.

so thats a way to generate the "why" for the story line. if the list of offenses and offenadable objects include all valid cases for the title,they would encompass all the basic combos that a human writer would have to work with.

it may be possible to use this method to fill in the rest of the "who what when where" of the story line.

you already have "who" (goodguy and badguy and player). "what" is the quest action: a hit, a kill for reward. the "why" has been generated (they killed so-and-so). "when" and "how" for the offense can also be generated. "how" would require a list of "by what means" for the offense in question. you could even generate "why they committed the offense".

put it all together and you get a back story of who did what to who, when and where, why they did it, what the questor wants you to do about it now, and what you'll get if you do.

it would be easy to add variables to a quest record to track what the randomly generated offense, reason behind it, location, time, and victim were.

add on top of that 10 versions of each quest message, so it isn't always of the form "(A) asks you to kill (B)".

think it might work?

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

Advertisement

thought about the simple case:

kill badguy for questor to get reward

...

the conditions would be: success if badguy dead and player at questor location.

I'd leave it at "Success if badguy is dead". The player doesn't need to be at the quest-giver's location to 'succeed', only to get the reward. And it's not the location the player needs to be at to get the reward, it's talking to the quest-giver (or more like the reward-giver, since they could be different NPCs).

The rewarding of quests should be separate from the giving of quests.
Upon completing a quest, the player should be immediately informed.

Then, to receive the reward, the player should go to whatever NPC is required. Or maybe no NPC is required and the reward is already present on the bad guy's corpse.

Scripting wise, a "if(quest_state(questID or questName) == Completed)" should be available.

The varying quest states could be:

  • QuestNotGiven (The player hasn't gotten the quest yet)
  • QuestNotFinished (The player hasn't accomplished the quest yet)
  • QuestGoalAchieved (The player has completed the quest, but hasn't received the reward yet)
  • QuestCompleted (The player has now received the reward, if there is one, and everything is wrapped up)

They have a set sequence of steps, but 'QuestGoalAchieved' can be skipped over if the quest's reward isn't explicitly given by a script and instead is just on the corpse or if there is no reward.

The rewarding of quests should be separate from the giving of quests.

or more like the reward-giver, since they could be different NPCs

yes, they should probably be broken down into separate steps and people, for maximum flexibility of the system.

during this post, i've simply been stating the condition(s) for the final step of "quest completed", not the intermediate step "goal achieved". in the title i'm working on right now, questors at the moment are all bands of friendlies, and you don't have to talk to a specific npc, simply be at their shelter to "hear rumors" or "return to the cavemen for reward" kind of thing. thus the @location vs talk2npc. However, when thinking about orders for "kill badguy", i did think in terms of named individual npc's and badguys, even though my project doesn't require that yet, just goto the friendlies' location.

as you say, it would be like in oblivion, you talk to an npc, and get a quest. you talk to an npc, and get a reward. well at least for most games. you know how it is. as soon as you make a generalization about games, someone comes up with an exception.

so get reward then would be the final stage of a quest that has a rewarder.

you make a good point about the questor and rewarder not necessarily having to be the same NPC. npc #1 questing you to help npc #2, who is the rewarder, is not an uncommon thing in quests.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

well, i think i may have figured out enough to start coding this puppy.

I added the assumption about the game engine being able to do whatever is required for a valid quest for a given title.

quests with deceit on the part of the questor (bad info reward, red herring, and delay tactic) are actually different types of campaigns above and beyond the "straight" campaign with no deceit.

some quests are combo quests: "get item/power" followed by "use item/power", "delay tactic" followed by "unmeetable deadline" special condition, and any quest followed by "get reward".

i decided to start calling "modifiers" "special conditions", because that's what they are.

i tentatively added "don't break the law" as a special condition. i don't think we covered that case yet.

I came to the conclusion that any quest can be just for treasure/benefits gained in the process, or also for a reward on top of any treasure/benefits gained in the process. So "with reward" is simply an option for any type of quest. note that quests without rewards and little value in treasure will most likely not make the "too lame for the game" cut when deciding what quests make sense and are not too lame for a given title.

i came up with a list of 11 types of plot twists possible for the actions we defined. I especially like the "special item malfunction" one! <g> Muah,ha,ha! (evil laugh).

this list was generated by asking at each step in each type of quest "what could go wrong at this point?". I did not consider the other possibility of "what could go right at this point?". that may yield additional types of plot twists. from casual consideration, it appeared that "things going right" more or less boils down to "unexpected outside assistance", or perhaps some sub-goal already competed when you arrive at the scene (bunny w/ big nosty teeth is already dead).

i pseudocoded some basic data structures.

in non-OO speak: quest structs. campaign struct is array of quest structs, plus active and current_quest variables. a campaignlist is an array of campaign structs. one campaignlist per Player Character. 50 active campaigns of 100 quests each for 10 players is about 26 meg, with a quest struct size of 520 bytes. once you get the last few variables required in there, quest struct size would be on the order of 600 bytes. Needless to say, at this point, you're getting down to the level of title specific methods of implementation, so the numbers will vary from game to game, and from one data structure design to another.

the data structures do seem to lend themselves to dynamic allocation. what with the large number of variable length lists involved, and the inherent linked list structure of mission flow in general. a campaign object might contain a linked list of pointers to quest objects for example.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

Final summary:

Here's a final summary of what i came up with with a LOT of help from the folks here (thanks guys!)...

A GENERAL METHOD FOR GENERATING QUESTS / MISSIONS / PLAYER OBJECTIVES IN COMPUTER GAMES

DEFINITIONS:
1. Quest - a single action performed by the player, either for benefits gained along the way, or for benefits gained plus a reward. quests have prerequisites that must be met to begin the quest.
2. Combo quest - a series of two quests that always appear together, such as get item A, use item A.
3. Campaign stage: one or more quests that make up a section of a campaign.
4. Campaign: a series of campaign stages.
5. Questor: an NPC or entity that sends the player on a quest.
6. Rewarder: an NPC or entity who rewards the player for completing a quest, for quests with rewards.
7. quest encounter: an event or action that triggers the start of a new campaign, such as talking to a questor who offers you a quest.
ASSUMPTIONS:
1. players are expected to defend their party and it's possessions at all times, this includes quest items to be turnd over to a questor, prisoners, escortees, etc.
2. one must go to locations of quest events. killing Rufio implies going to Rufio's location (the Inn of Ill Omen).
3. its assumed that the game engine implements all features and tracks all info required for a valid quest type for a given title.
CAMPAIGN TYPES:
1. straight: no deceit on part of questor(s)
2. bad info reward: prereq for last stage is location. stage before last gives wrong location as reward (rewarder lies/is misinformed).
3. red herring: quest is bogus. objects dont actually exist, locations wrong, etc. can't be completed.
4. delay tactic: time consuming quest followed by quest with unmeetable deadline.
CAMPAIGN STAGE TYPES:
1. a single quest
2. split/merge: mission flow splits on success/failure of first quest in the stage, and merges again at the beginning of the next stage.
3. loop: mission flow splits on success/failure of first quest in the stage, looping back to the first quest after completion of zero ro more side quests.
4. split: mission flow splits on success / failure.
5. a multiple-simultaneous stage: complete one or more quests in any order to progress to next stage.
6. a combo quest:
A. get special item/power followed by use special item/power
B. delay tactic followed by un-meetable deadline special condition
C. any quest followed by get reward
QUEST ACTIONS:
1. attack/destroy
2. defend
3. transport
4. acquire/takeover
5. influence/convert
6. use/interact with
7. successfully execute (do something [combo/trick move/ title specific action])
8. be guinea pig.
OBJECTS:
1. person/NPC/friendy unit or monster/badguy/hostile unit
2. item/ including special/unique quest items
3. information/orders
4. landmark, location, building (a fixed position).
5. combo/trick maneuver
6. stat/skill/exp/special power, etc
in general: a person, place, or thing.
SPECIAL CONDITIONS:
1. don't get caught
2. don't be seen (covert vs overt action)
3. no killing (non-lethal only)
4. methods of acquisition: make, steal, take from dead opponnet, find, gather, buy, blackmail/coercion
5. Don't attack (Not even non-lethals are allowed)
6. time limit/window
7. using special item / power etc. usually the special item / power is one time use only.
8. dont break the law
REWARD TYPES:
1. quest is for reward - talk to rewarder to get reward once main goal completed + get any benefits gained during pursuit of the quest.
2. quest is for treasure - get any benefits gained during pursuit of the quest, but no reward from a rewarder.
CHECKS:
1. state_is(subject,state) where subject is basically any variable in the game, and state is some value , range, limit, etc.
PREREQUISITES:
1. player knows location. transport(subject,location) where player is already in possession of subject. transport(player,location), a goto() quest, appears to be the most common type of quest with this prereq.
2. player at questor location/ talks to questor / receives orders from questor. this is just about all quest types.
3. player has special quest item(s)/power(s). for "get A, to unlock B, to kill C" type quests.
PLOT TWISTS, and what types of quest they apply to:
1. mistaken identity - any quest where the player is supposed to do harm to someone or something.
2. wrong location - any quest where the player must go to some location.
3. badguy attempts bribe - any quest were the player's target can negotiate with the player.
4. object already dead/destroyed - any quest with a target.
5. rewarder dies before giving reward - any quest with a rewarder.
6. rewarder refuses to reward player - any quest with a rewarder.
7. questor/rewarder attempts to do away with player to hide evidence - any quest that breaks a crime, or needs to be covered up.
8. someone attempts to acquire item in transport by whatever means (attack, theft, purchase) - transport and "acquire for NPC" quests.
9. target already influenced - influence quests.
10. special item/power malfunction - use special item/power quests
11. side effects / wrong effect - guinea pig quests
tgt dead, tgt influenced, and tgt tries bribe are mutually exclusive.
rewarder: dies, renegs, attacks player are mutually exclusive.
BACK STORY:
randomly generated back story that makes sense will help keep quests looking unique. an example for a "kill badguy" quest might be:
"while speaking to (questor), they tell you that:
(when) (where) (badguy) (did what) (by what means) (for what reason).
(goodguy) asks you to kill (badguy). If yo do this, they will give you (reward)."
this requires the generation of when, where, did what, etc.
To apply to a game:
make lists of the action+object[+modifier(s)] combos that are valid for the title in question. this is basically a list of the actions, objects, and mods that the game engine supports, and are allowed according to the designer's rules for the game.
1. make list of valid quest actions
2. make list of valid quest objects for each action
3. make list of valid mods for each action/object combo
4. make list of valid offenses
5. make list of valid "reasons for offense" for each offense
6. make list/rules for valid "time of offense"
7. make list of valid "offense locations"
8. make list of valid "means of offense"
these lists or tables will be used to genrate the quests.
to genErate a campaign:
1. generate length of campaign in stages, or use a "stopping rule" such as 10% chance that any stage will be the first stage.
2. generate stages from last to first.
to generate a stage:
1. generate stage type.
2. generate quest(s) for that stage.
if this is the 1st stage , prereq=quest encounter.
else prereq=completion of preceding stage.
to generate a quest, generate:
1. rewarder / no rewarder
2. action
3. object
4. mods, if any
5. random back story: offense type, time, location, means, and reason.
6. any plot twists that may apply to that type of quest, maybe a 10% chance of each possible plot twist happening.
data structures:
implementation will be title dependent, but the basic data structure desgin would be:
all info for a quest would be kept in an object or struct. one for each quest in each stage of each campaign.
a campaign would simply be a list of quests, most likely with a current_quest variable to track the player's progress in the campaign.
a player character would have a list of zero or more active campaigns, perhaps with a current_campaign variable.
routines required:
1. code that generates the campaigns, stages, and quests, and places them in the data structures that store them.
2. code to check for success / failure of mission conditions, and advance to the next stage in the campaign.
It should be possible to apply this sort of system, or appropriate parts thereof, to most types of games.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

Well, I started to psuedo code this puppy, top down style. things went fine until i got to multiple-simultaneous. then i realized that there can be multiple simultaneous stages, not just multiple-simultaneous quests. I never was happy with the thoroughness of the analysis of mission flow. at that point i decided the mission flow issue was not sufficiently resolved. unable to get signal to get online and discuss the topic here, i decided to try a bottom up approach and see if any patterns emerged. so I started coding the basic single part quests, no deceit campaigns, no plot twists, no special conditions, just action, object, and rewards type as the variables. and no missionflow. just single stand alone quests of the basic action / object combos for the title in question (caveman). so far i've done kill monster for treasure, kill badguy for treasure, and kill monster for reward.

even doing just this has led to a couple insights. even these simple quests have multiple parts to them. i suspect that becoming fixated on the specific steps and actions in a quest may not be the best approach. all the single part vs multi-part stuff. any method of organization that leads to getting bogged down in semantics (is "with reward" a 1 or 2 part quest?) is probably not a good way to slice things, because its not patently obvious which pigeon hole everything should go in.

but my goal is to create questgens for games, not write an academic research paper. and frankly i'm sick of thinking about missionflow. so without thinking about it too hard, here's what i've noticed so far:

quests might be best defined in terms of goals, not actions. goals are different from actions, and from condition checks.

for missionflow, you have conditional branching at the end of a quest that determines the next quest in the campaign, with success/failure being a common branching condition. but branching conditions can be anything, and appear to be title specific.

the logical reason for branching missionflow seems to be tied up in the backstory, again making this very title specific.

finally in desperation, i decided to do an evaluation of the main quest campaign in oblivion to see if that showed me anything. the results were quite interesting. the main campaign is linear, with no branching. quests are assigned automatically (you "volunteer") but there's no penalty for not completing them. all missions have only 2 outcomes: success or player death. this is the standard linear campaign missionflow pattern used in flight simulators such as aces of the pacific.

so i'm thinking that mission flow and "multi-part" quests will be up to the designer.

I also suspect that mission flow for mission based games vs open ended RPGS will tend to be somewhat different. mission based games lend themselves well to the 3 layer approach where low level is the individual quest/mission generators, the middle layer is the campaign generators which determine quest types and campaign missionflow, and the top layer is a politics engine, which models the political situation between game factions and determines the appropriate campaign.

for RPGs, i'm not so sure. the whole "politics -> campaigns -> missions" thing doesn't seem to quite fit, although it could if one were a member of an organization and had to obey orders. This is how Oblivion handles it.

so at this point, i'm not sure what to do. i plan to continue implementing individual quests. it should also be possible to add plot twists, special conditions, deceit quests, randomly generated backstory, etc with no problems. but i'm not sure about multi-part quests and campaigns. perhaps that type of mission flow simply doesn't apply to the title in question.

In oblivion, the main campaign starts with questor #1 giving you 3 quests right off the bat: transport special item, find NPC, and "kill the dark lord". questor #1 is dieing, gives you the special item, and asks you to do these things. you are given no incentive or reward upfront. dead questor #1 simply believe its your destiny as a "citizen and servant of the empire".

so here we have an overall goal of "kill the dark lord" (merunes dagon in this case). and 2 quests to get you started: deliver item, and find NPC. If you deliver the item, the receiver of the item gives you assistance (equipment) in preparation for the next step: finding the NPC (martin).

more thoughts as they occur.

but i suspect:

goal -> (leads to) actions -> condition checks. actually, that seems pretty obvious. i may have been thinking about this too long! <g>.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

This topic is closed to new replies.

Advertisement