1. Archmage Rises
  2. News

Archmage Rises News

Dynamic Quest Gen #2: Basic Story Outlines

Last week we went over our approach philosophy and managed to get some characters with some motivations and goals around a quest object. Thanks for those who posted questions and responses. It helped us clarify our thinking.

Now we turn our attention to…

[h2]What Do These Characters Want the Player to Do?[/h2]

Thanks to some conversation with Kaylo7 it became clear we need to define terms. We like to refer to the 1989 movie Indiana Jones and the Last Crusade.



DEFINING TERMS
  • Quest - A series of one or more plots around a certain subject. Like Indy rescuing his dad. Or needing to get the journal back from Germany.

  • Plot - A set of tasks oriented around a quest objective from a specific character’s perspective.

    • Indy’s Dad Henry - wants to get the Holy Grail.
    • Nazi’s - want to get the Holy Grail
    • Order of the Cruciform Sword - want to hide the Grail and prevent anyone from getting it
  • Task - Something you do like: Fetch, Find, or Kill. Ideally with increasing tension. First Indy has to reach the castle he is imprisoned in. Then he has to sneak in. Then he has to get him out, etc…

    • Tasks can be shared across plots of equal goal alignment. Indy finding the tomb with the missing top half of the etching is in total alignment with his and the Nazi’s agenda which is why they initially help Indy do it. It is only later Indy finds out there is a second plot.
    • Tasks can be mutually exclusive, where once completed, invalidate and ‘fail’ the other plotlines. These kind of tasks are the ‘Moment of Decision’ for the player where they commit to a particular plot. Our goal is to delay these as late as possible because it leads to better story feel.
  • Story - A sequence of Quests chained together. Ideally with some kind of arc and increasing tension.

    • I'm playing Assassin Creed Valhalla right now. I like how they group their quests by Storyline. I also like their UI for it.


THE TASK OF TASKS

Here is the latest output from the generator program. Starting with our major and minor characters. If Majors disagree on end goal, that creates a different plotline. Minors provide stepping stones along the plot line based on their agreement, disagreement, or neutrality with the quest giver.

Majors:

Amice Middlemas, Female, High wealth, age 27 Motivation: Capture - A Intact Skeleton will make an excellent trophy.

Alfred Swaffer, Male, High wealth, age 26 Motivation: Avoid - We must prepare and protect ourselves against the Skeletons.

Minors:

Sabina Rait, Female, High wealth, age 47 Motivation: Fight - A Skeleton carcass is a valuable resource.

Robert Stanhope, Male, Low wealth, age 63 Motivation: Capture - I want to study a Intact Skeleton.

Eleanor Gorringe, Female, High wealth, age 51 Motivation: Capture - I want to study a Intact Skeleton.

Nicholas Ward, Male, Mid wealth, age 40 Motivation: Avoid - We must prepare and protect ourselves against the Skeletons.

Cecily Gigg, Female, High wealth, age 28 Motivation: Avoid - Skeletons have just as much right to exist as we do.

Avice Bunce, Female, High wealth, age 23 Motivation: Avoid - We must prepare and protect ourselves against the Skeletons.

=============================

Quest Plot 1: Amice Middlemas wants Capture - A Intact Skeleton will make an excellent trophy.

1. Amice Middlemas: Meet quest giver. Get introduction to quest

2. Robert Stanhope: Inquire about enemy (Allied - Capture - Study) They provide assistance

4. Alfred Swaffer: Interference: Plants an ambush for you (Against - Avoid - LiveAndLetLive) - Disagree on: ownership)

3. Amice Middlemas: Persuade X to do Y [End Quest] (Allied - Capture - Trophy)


===================

Quest Plot 2: Alfred Swaffer wants Avoid - We must prepare and protect ourselves against the Skeletons.

1. Alfred Swaffer: Meet quest giver. Get introduction to quest

2. Alfred Swaffer: Hire NPC to create item (Allied - Avoid - Defend)

3. Cecily Gigg: Persuade X to do Y (Allied - Avoid - LiveAndLetLive) They provide assistance

4. Avice Bunce: Appease enemy (Allied - Avoid - Defend) They provide assistance

5. Alfred Swaffer: Appease enemy [End Quest] (Allied - Avoid - Defend)


The above is a single quest that branches as soon as you start it. Amice wants a skeleton and Alfred doesn’t want to poke the bear, just leave them alone and build up protection from skeletons.



Some assumptions to clear up:

  • Not every quest will have multiple plots. If an innkeeper needs dye for a sign, it is unlikely anyone will disagree and thwart that.

  • There are two entrances into the quest depending on who you talk to first: Amice or Alfred. I really like how it isn’t set to just one NPC.

  • We have to introduce the other party, immediately, upon talking to the first quest giver.

    • This could be via a letter: “It’s come to my attention you are working for Amice to secure a skeleton. Meet me at the Inn. It’ll be worth your while.”
    • Or just embedding it in the dialog with Amice ‘And make sure you don’t talk to Alfred about this. He is a fool and not to be indulged’. First thing I’ll do is go and see this Alfred!
  • We are making the quest giver the first and last part of the plot. It doesn’t have to be this way, but it feels good for now.

  • Characters with opposite goals can do things to thrwart your progress. We to better define this, but for now they can plant an ambush, attack, or report you to authorities.


[h2]Things we Discovered in Generating Tasks[/h2]
  • Pretty obvious, but we had to tie tasks to goal outcomes. When we had a generic pool of tasks to draw upon we were getting weird things like pacifists asking you to kill and destroy the thing they were trying to protect.

  • We had to split tasks into two kinds (for now) of ‘major’ and ‘minor’ to control pacing and tension. It was pretty silly and anti-climatic when the first task was an epic battle and the last task was to deliver a letter across town. We expect escalation. And while this can be subverted sometimes, its an expectation for a reason.

  • Had to write something in to stop duplicates from occurring… but not always. Randomization is interesting and a quick way to start, but a quest where you have to do the same task 3 times in a row because that is how it rolled up randomly, it just isn’t interesting.

  • Nolan comes from writing and screenwriting. In books and TV when a character goes against type it is ‘interesting nuance’. But what is true in those mediums isn’t true in video games. Once you inject interactivity and the chance for the player to get lost or confused between story points, it’s not ‘fun’ when characters are inconsistent in behavior or task.

  • Originally we had major characters with complex goals and minor characters without real goals, we just slotted them into Allied, Against, or Neutral towards a certain major character and gave them the Support goal. This was insufficient when we needed to figure out how and where they provide assistance. We needed more data on the why. So we went back to giving all characters complex goals and it is the alignment of goals that determines which plot they get involved in for assistance or obstacles.

  • With better character goals the player can have a dialogue choice like "why are you helping" and the answer is "Because I want the corpse myself!" then the player knows the npc will make an offer near the end of the plot. I think this deduction and foreshadowing is cool. It also creates the option for late branches and multiple endpoints of the plot beyond just the quest giver.

  • For better stories it was important to not just know two people disagree, but to know how much and on what do they disagree. This allows us the Nazi & Indy situation where both want the tomb with the etching to be found, and overcoming the 3 trials at the grail’s location, it is only the last step of who possesses the grail is where they differ. This means we do late breaking branches of plot rather than having entirely different plots for essentially the same tasks to a similar objective. Which leads to my next point…

  • We started designing a ‘Reaction based’ system, where the plot can twist and turn based on variable thresholds along the way. Like if the mayors approval rating is < 50 the quest continues, but if it is > 50 then it is over. What I came to realize is there is no difference between reaction in real time (a quest of 8 steps that can end at each step) or just generating 3 or 5 steps. There is no way for the player to know so don’t overcomplicate it.

    • It's hard to come up with a reaction necessary at runtime besides skill checks like persuasion. We’ll think more on this.
  • It isn’t the quest writer’s (person or algorithm) job to come up with specific ordeals to block the player’s progress in a plot. It is the job of the world to oppose the player naturally. Like if you need a resource, there is a 'trial' in it's just hard to locate, or there are goblins around it, or whatever. We don't need to PLAN on those things, just rely on the game to do them.

  • But there is the occasion where someone actively wants to stop you from doing that precise task. So they interject a trial, like Saruman making the snow pass collapse causing the fellowship to have to go into the mines of Moria.

  • Keep it relational. Choice has to be based on the person and not the task/goal. The longer we delay a branch, the more the player can interact with the disagreeing parties, and therefore the more likely they are to care about each one’s perspective. When the choice comes, make it a choice between people.

    • This is super important and removes the emotional impact from the actual tasks or writing (which may be basic and samey) but the people and their reasons will differ. For example, a thousand different people can rob a bank. And while each one does it ‘for the money’, it is their personal and specific reason that makes it interesting though the act is the same.


We’re working on the tasks more this week and hope to have something cooler to show soon!

Weekly Dev Update: Oct 30, 2023

[h2]Update 2b: Combat Rewrite[/h2]



I can’t get combat done any faster, but I can steal cool looking art off the internet! Not our art.

Combat Rewrite is the primary focus of the company. It’s almost all hands on deck, certainly our best people working on it: Jessi, James, Tyler, Michel, Josh, Jonathan, Mark, Zach, and Rubi.

Combat has been dragging on and on for months and I’ve had a realization as to why: Leadership.

It’s a big complicated mission critical task and because of this it requires not just resources to get the features done, but Leadership to unify the vision and keep things from being neither over nor under-engineered. Michel was providing this, but got burnt out. The task is bigger and harder than his experience. You know how in a game the monster level is shown as a skull or ?? because it is 10 levels higher than the player, ya that’s the situation here.

I solved this by putting Jonathan in charge. He’s got 10+ years senior dev experience. And it was going well… until he decided to move continents and he’s been (rightfully) focused on that. The move ends this week.

So, last week Mark, with 15+ years experience, has taken the reins and we’re staying focused and making progress.

If I ever make a game about Game Dev, leadership will be a key stat!

Last week we onboarded Zach to the current state of combat. He is now going to write/rewrite the Buff system as many combat spells and effects rely on stacking buffs.

[previewyoutube][/previewyoutube]

[h2]Dynamic Quest Generation[/h2]

Last week I posted a progress update and we had some good feedback from you on it, so thanks!

I’ll continue to do detailed weekly updates for those who are interested.

In summary, we got to the point where we can generate multiple plot lines based on disagreement between main actor goals. We then threw in some tasks, based on goal, and started some basic quest task chains.

[h2]Priority Tasks[/h2]

  • We’re going to make the Innkeeper a central hub of quests and able to tell you all the people in the town who need something done.
  • We’re fixing some dungeon issues worked on last week.

Build 0.2.15 is live!

[h2]FIXED:[/h2]
  • Fixed a bug that may cause the wrong lockpick to get removed from your inventory if your lockpick breaks
  • Fixed a bug with determining if the player has space in their inventory when buying items
  • Fixed a bug with dungeon floors sometimes being generated without stairways and/or exit portals (reported by FluffyJadey)


[h2]IMPROVED:[/h2]
  • Item descriptions now show current skill level if there is a skill requirement to use that item
  • Mount inventory is now checked for quest item collecting progress
  • Net worth now considers creature and tower inventories
  • When a tower room is torn down, send items to player inventory first
  • When removing storage from a Mage Tower, if the player doesn't have space in their inventory but a mount does, items in that removed storage space get moved to the mount's inventory
  • Tooltips for items purchased via trading in the market show how much you paid for them if different than the asking price

Dynamic Quest Generation #1: Inspiration & First Steps

[h2]Introduction[/h2]
I am building a world simulator and put an RPG inside it. Why?

So as to have the detailed data necessary, and the passage of time, to generate interesting procedurally generated quests.

[h2]Goals[/h2]
Chris Crawford is a smart visionary. But also broke his career on trying to solve ‘emergent narrative’ in games with his Storytron. As quoted in RPS article:

... take Crusader Kings or Civilization, for instance, which both provide complex systems upon which all sorts of interesting decisions can be made. But Crawford argues that these sorts of games don't count because they "are not very dramatically interesting stories."

"It might be fascinating to the person who experiences it," he says, "but ultimately we have to ask does it really approach the quality of what we normally call a story? And the answer with almost all games is, well, no."


The following goals may not sound terribly revelatory but Crawford is a warning a lot of resources can be wasted for little results. I’m trying to provide direction through restraint: Hey we’re here to do something cool not find the ultimate breakthrough.

[h3]1. PRAGMATIC: IT JUST HAS TO WORK AND ENTERTAIN PEOPLE. [/h3]

We’re not trying to build an AI that wins an Oscar for Best Screenplay.

We’re not trying to match hand crafted narrative.

Our goals are entirely different from Crawford’s and therefore I think achievable. He says the ‘emergent story’ of Crusader Kings or Civ aren’t compelling outside of the original player. That is totally fine by me.

Let’s entertain one person over and over again. This to me is success.

[h3]2. TAILORED TO THE TYPE OF QUEST - NOT ONE SIZE FITS ALL[/h3]

We don’t have to solve the “Singularity of Story”. If a different algorithm, approach, or paradigm is needed for a ‘murder mystery’ versus ‘find the artifact’, then we’ll do it by bringing each story type online one at a time. Of course we are looking for reuse, but the point here is it doesn’t have to happen.

[h3]3. EXISTING PROVEN TECH - BLUE OCEAN - NINTENDO WII APPROACH[/h3]

In Gen 7 of the video game wars, Sony (PS3) and Microsoft (360) were trying to outdo each other on who could bleed the most money per hardware console by packing in the latest tech for a fixed price. Nintendo simply took existing ‘old’ tech and presented it in a new way.

  • Microsoft sold 84 million 360s
  • Sony sold 87 million PS3s
  • Nintendo won by selling 110 million Wiis and made money on every single one of them.


We will use simple ‘old’ tech, like templates, randomization, filtering states, variables, tags, and make something new from it.

[h2]Core Inspiration[/h2]
Shortly after I started on Archmage Rises full time I saw this inspiring Ken Levine talk on 'Narrative Lego'

[previewyoutube][/previewyoutube]

His ideas and examples are great. Sadly, after several attempts to implement his Stars and Passions ideas I found lots of problems. This isn’t a criticism, just there are a lot of ‘gotchas’ Ken didn’t cover that we’ve run into.

10 years later, Ken was interviewed by AIAS Game Maker’s Notebook and asked about his experience implementing Narrative Legos. This link gets to that part of an excellent interview:

[previewyoutube][/previewyoutube]

When I listened to it, I heard some backpedaling from the initial broad idealism from the first talk. Restraint tempered by difficulties in implementation. Exactly where we are at. 😛

[h2]Our Approach[/h2]
The creative process is simply this: Make something crappy. Now make it better.

For those of us who tend towards perfectionism, “If you’re going to do it, do it right”, the inability to make something amazing right away can be paralyzing. Its like taking the first step of 1,000 miles and already feeling like a failure.

The above adage of make something crappy really helps break me out of stinkin’ thinkin’ and get moving. Momentum can be built over time. Rome wasn’t built in a day, yadda yadda.

There is much more to say, but I’m trying to keep this first entry simple as I introduce you to my brain and the complexity of the task.

Here is a very high level flow of where we are starting for our test.



Nolan has an undergrad in history and a masters in screenwriting. He wrote up a summary analysis of the typical narrative approaches: Hero’s Journey, Three Act structure, Dan Harmon’s Story Circle, and his own Relational.



Story is strong in this one. This is just a snippet from the analysis.

Nolan has been invaluable in the process. I told him, “We aren’t finished until you are happy with the stories we generate.”

Out of the gate, Nolan was taken aback with the idea of first generating characters then generating motivations and story. That’s backwards from how he writes or was taught. However, I think it creates a strong foundation, especially when we go to plug all this into the game world where we need to plug random NPCs into roles in the story.

[h2]The Prototype Program[/h2]
I love working in C# Windows Forms. I won’t deny it! We have a tool called Bard for making Archmage Rises design data, Encounters, and Quests.

I took Bard, added a new feature World’s Worst Story, and started programming. I’m now summarizing a week’s worth of work, hopefully it will make sense.



I told you it was crappy!

[h3]1 SELECT STORY[/h3]
To keep things simple we chose a very simple story type: Kill the Monster.

[h3]2 DETERMINE OBJECT[/h3]
Again, to keep it simple we always choose “Skeleton” as an object.

[h3]3 SELECT CHARACTERS[/h3]
We generate a random number of characters within a min/max. At first all the characters I generated were of equal importance to the story. If I generated 5 roles, there were potentially 5 different agendas for the object. While it sounds interesting, it is kinda weird to have 1 protagonist and 4 equal antagonists. Each one of them become a ‘quest end’, meaning five different endings and different rewards.

Interesting, sure. But I can already see problems playing it out. It’ll just feel weird and it’s hard to keep it all straight in the player’s head. Especially with multiple quests occuring at once..

I came to realize not all ‘roles’ are equal, there are Major roles and there are Minor roles.

So I rewired it to generate X major roles and Y major roles.

[h3]4 SELECT MOTIVATION[/h3]
With our major and minor roles set, we now determine what their motivation is in this story. Moving fast and loose, we came up with a combinatorial composite system of motivations using a specific End Goal and a broad Conviction:

Conviction: Fight, Study, or Avoid

Goal: Eliminate, Study, Trophy, LiveAndLetLive, Fear, Resource

What’s cool about this system is that an NPC can want the skeleton fought because they want it Eliminated OR because they are afraid of it. Another NPC could want a skeleton left alone because they want to Study it OR because they believe in ‘Live and Let Live’.

Our intent is not to be exhaustive but to just come up with a few motivations and see if it works. And it does, surprisingly well! With even rudimentary data we’re already getting some interesting nuanced complexity.

Aside: I tested adding a new motivation to the system. It took 3.5 minutes and full worked. I was pleased with the data structure we have so far.

[h3]5. ASSIGN QUEST GIVER AND OTHER ROLES[/h3]
Philosophically we are all in the staring role of our own life’s theater. We play smaller roles in each other’s stories. Putting all that aside, we found it easier to pick a Quest Giver and make that the protagonist. Everyone else is either an Ally, Neutral, or Against the protagonist Quest Giver getting what they desire.

So if two NPCs both want the skeleton dead, they are said to be Allied. The second NPC will provide assistance to the quest giver getting what they want: a dead skeleton.

But wait! What if NPC A wants the skeleton killed so they can study the body, and NPC B wants the skeleton killed so they can use it’s body as a resource in some crazy experiment. They want the skeleton dead, yes, but it is a zero sum game: there is only one skeleton body (theoretically), so they are actually at odds with each other.

This required assigning Ownership to motivations. If F wants a skeleton dead so it can have it as a trophy on the wall, the goal requires ownership. If G wants it dead because they are afraid of skeletons, that motivation does not require ownership and the two are in agreement.

So we go through all our characters and figure out their disposition and role in the story based on comparison of motivations.

[h3]6. THE OUTPUT THUS FAR[/h3]
With all the above done and considered, here is a sample of the output. You can see where I made it clear where any disagreements are so we could validate everything is working as we would expect.

There are a series of Minor roles. Their motivation is simply to support major players. If they are against the quest giver, then they will help the antagonist and provide roadblocks to the player. If they are neutral, they can be persuaded to join a side (more on that another time). If they are Allied, they provide help and resources to player so the quest giver gets what they desire.

**Quest Giver:**

Guichard Peake, Male, Low wealth, age 46
Motivation: Fight - Skeletons terrify me.

**Majors:**
Emma Godwin, Female, High wealth, age 40
Motivation: Avoid - Skeletons terrify me.
ALLIED quest giver.

Emma Mellish, Female, High wealth, age 29
Motivation: Avoid - Skeletons have just as much right to exist as we do.
AGAINST quest giver. Disagree on: Skeleton should be Intact

Hugh Rooke, Male, High wealth, age 24
Motivation: Capture - A Intact Skeleton will make an excellent trophy.
AGAINST quest giver. Disagree on: Skeleton should be Intact

**Minors:**

Guichard Naylor, Male, High wealth, age 56
Motivation: Support -
ALLIED quest giver.

Imayna Buggy, Female, Low wealth, age 22
Motivation: Support -
NEUTRAL quest giver.

Bertha Petrie, Female, Mid wealth, age 31
Motivation: Support -
NEUTRAL quest giver.

Isabel Guy, Female, Low wealth, age 31
Motivation: Support -
NEUTRAL quest giver.

Cecily Radcliffe, Female, High wealth, age 30
Motivation: Support -
NEUTRAL quest giver.

Walter Grubb, Male, High wealth, age 62
Motivation: Support -
AGAINST quest giver.

We took a step back and analyzed our results. So far so good. This seems to be going in the right direction. Nolan is happy, and at the end of the day that is what we’re all here for. 😛

[h2]Next Steps[/h2]
Next week we’re going to assign tasks based on motivation and alignment

Thanks for reading. Hope this was clear!

Weekly Dev Update: Oct 23

We’re working hard to bring this game vision to fruition. Here is what we are doing.

[h2]Update #2b Combat Rewrite[/h2]



Last week we were down a programmer due to illness, and our tech lead Jonathan is moving continents. But Michel was able to achieve something big which has taken months to do: Proper Damage Calculations with immunity, resistances, and weaknesses.

I am putting more resources on Combat to speed it up. Zach is moving from polishing to combat. Mark is taking a more involved role providing design priority and leadership.

Combat is now being made by Jessi, James, Tyler, Michel, Josh, Jonathan, Mark, Zach, and Rubi.

After all this work the goal is to make it good, not just get it out the door.

Still no dates yet.

[h2]Update #3 Exploration[/h2]



The first step in planning out an Update is deciding scope: what is in and what is out.

In order to decide this, we start the Inception phase with the Roadmap bullet points and what players have written on the forums, then determine how to achieve the feel we want. We dream up many features and ways of achieving our goals. This is where Mark is right now: turn creative dreams into solid designs. For instance, we just discussed how we might better do food & nourishment, moving it from a negative to a positive system. Still lots of flux.

We are close to the end of this Inception phase and deciding what exactly Exploration is.

One thing we need to determine is how much of Dynamic Quest generation will be in Exploration.

[h2]Procedurally Generated Dynamic Quests[/h2]



This is the biggest challenge of my 20+ year tech career. Others have tried to tackle ‘Computer Generated Story’ and broken their brains and career on it. I have been thinking and tinkering on it for almost a decade. I think as a team, we have the right people to do something special and compelling. This could be the core secret sauce of Archmage Rises.

To that end, I’m going to document the journey in more detail. Writing up weekly summaries, like this, as it helps clarify thinking and may be of interest to others.

Last week I wrote that I needed to stop thinking and start doing!

Well, I did, and managed to get something really terrible working.

As awful as it is, it shows real promise. It only gets better from here!

I think with another week or two of effort we can really have a solid direction.

[h2]Priority Fixes[/h2]

  • Based on some weirdness we found with how mount inventories are handled, Zach is rewriting and streamlining the inventory system. This will fix current and future bugs. In his words “Make it difficult for other programmers to use it wrong.” 😛
  • RiverSideHibbard requested the ability to see what the character’s current skill is when viewing an item with a skill prerequisite (mounts, weapons, armor).