1. Archmage Rises
  2. News

Archmage Rises News

Build 0.2.20 is now live!

This week will be a much smaller patch. We were working hard on a highlighting system to improve conversations with NPCs, but it's taking a little longer than expected, so this is a very light patch this week.

[h2]IMPROVED:[/h2]
  • When picking up loot in a dungeon, you now have the option of whether you would like to take it the loot or leave it. Thanks for the great request!

Weekly Dev Update: Nov 27, 2023

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

It’s snowing outside, so this Elmore Dragonlance pic inspired by Dragons of Winter Night felt right.

Combat has been in development for 6+ months. 90% of our resources are focused on it: Mark, Josh, Michel, Tyler, Zach, Jonathan, Jessi, Nolan, and Rubi.

Combat is coming along and the team is greatly encouraged. It’s really cool to see new spells being created by text JSON files like this.



A rewarding side effect of this data-driven approach is the quick iteration time on changing and reloading data without having to rebuild the game, saving about 5 minutes per testing cycle.

I wish I had a cool video or screenshot to show but this will have to suffice. It is an example of data driven enemy tooltips.


(Yes I know that isn’t a skeleton, it’s all test data at this point)

[h2]Dynamic Quests[/h2]

Nolan requested more specificity to how the text is chosen and this required a rewrite of the core dialogue selection system. More details to come in tomorrow’s detailed update.

The first part of Dynamic Quest generation is coming as part of Update #3 Exploration.

[h2]UI Redesign[/h2]



We’ve had some good meetings on how we can redo the HUD of the game. The above is just one mockup of many but it proves a couple of points which seem solid:

  • Bust out of the hard frame and allow UI elements to ‘float’ in different zones of the screen
  • Spell selection is bottom center
  • Focus attention when speaking with an NPC
  • The player portrait will always be on display and show damage by filling with red (like Pillars, Baldur’s Gate)

Jessi and Phil are heading up our UI redesign as part of roadmap Update #3 Exploration.

[h2]Priority Tasks[/h2]

  • DeLastOne suggested highlighting Knowledge Subjects directly in the dialogue text. Good idea. We’re trying to implement it.
  • 2009dh pointed out with inventory being precious, provide the option not to pickup loot in dungeons when it appears.


[h2]Other[/h2]



We’re currently doing 360 reviews for our 10 employees.

At a minimum, a company should do formal reviews once a year. A really good company will do them twice a year. I’ve put them off for 18 months marking me as a bad leader. 🙁

[h3]WHY DO THEM AT ALL?[/h3]

How does a person know if they are doing a good job? Meeting expectations?

A comprehensive 360 review gathers feedback from people above (supervisor), beside (co-workers), and below (direct reports) to give a full picture of someone’s performance.

As you work in ‘close proximity’ with someone there are great things you notice and little annoyances that accrue. When do you ever get a chance to share these? Stand-up and project meetings aren’t the right time. Even praise can be hard to share. The words “I’m proud of you.” can sound weird in the wrong context or moment.

What if they are difficult or awkward topics? Like farting too much in the office?

An actual issue I had to address with a programmer at my software company. He didn’t last.

So a purposeful one-on-one time to share the teams thoughts and encouragement in improvements is necessary to healthy team growth.

[h3]WHY DO THEM NOW?[/h3]

I put off doing them because there just never seems to be an opportune time:

  • Jan - Feb we were crunching to get the Demo out for Next fest.
  • Mar - Apr we were getting out the launch of the game to Early Access
  • May - Aug we were crunching on Content Updates
  • Sep - now we’ve been scrambling to get Combat Rewrite done

So it’s happening now. It’s a big time investment for myself, meaning I don’t have as much time for other things like Dynamic Quests or staying up to date on the forums. But I will get back on the forums soon.

That said, if you would like to be involved in the process, go ahead and post on Steam. I’ve already incorporated previous posts in some people’s reviews. Phil and I are the most public facing team members, but if you want to shout out some audio, narrative, gameplay, or art I’ll make sure it gets to the right person.

Build 0.2.19 is now Live!

[h2]FIXED:[/h2]
  • Fixed a bug in dungeon room generation that was causing dungeon rooms sizes to balloon exponentially, resulting in the game to overload and crash when entering certain rooms
  • Fixed missing artwork in some random encounters


[h2]IMPROVED:[/h2]
  • Added hex map tutorial page explaining that 1 hex = 1 mile
  • Now equipped items will be hidden when selling equipment so you don't accidentally sell your equipped weapons and armor

Dynamic Quest Gen #4: Reasonably Compelling Text

When we left off last time, I generated a tiny bit of NPC text.

The goal for this week is to push the system as far as we can and verify the direction will meet our needs.

To verify direction, its important to keep checking current position versus origin and destination.

[h2]I’m Old and I like World of Warcraft (Classic)[/h2]


It’s been 13 years since I stopped playing WoW (it was Cataclysm). I have fond memories, so I decided to fire it up again and analyze their quest descriptions.

[h3]WHY WOW?[/h3]
If I polled for “Games with Best Quest Writing” I don’t think WoW will be top of anyone’s lists. I expect people will cite work from Bethesda, Bioware, CD Project Red, Obsidian, and Rockstar. So why look at WoW?

World of Warcraft writing has to achieve very specific goals which we share:

  • Appeal to Readers and Non-readers alike.

    • (Non readers rejoice: a recent mod uses AI to generate real-time Voice Over!)
  • Short and to the point. Low word count for the non-readers, but enough personality and flavor for readers (like me!)

  • Keep players playing! Give them something to do! Grinding through monsters for no reason can be boring. The quests are context and trappings to keep players fighting monsters in the zone. Quest are the most efficient way to level, but not mandatory.

  • Nudge the player to explore and interact with more of the world.

    • I was in a level 10-20 zone. The town mayor asked me to deliver a letter to a mayor of another town in a 15-25 zone. If not for this quest I wouldn’t know I had another place to level between level 15 and 20.
  • Very limited player verb set, basically fetch or kill quests. These are the verbs we are trying to start with.

Every WoW quest is hand crafted by a person. If we can generate text as good as WoW, we’ve achieved what we set out to do.

[h3]EXAMPLE WOW KILL UNIQUE QUEST[/h3]
BOUNTY ON GARRICK PADFOOT Bounty on Garrick Padfoot
Garrick Padfoot - a cutthroat who's plagued our farmers and merchants for weeks - was seen at a shack near the vineyards, which lies east of the Abbey and across the bridge. Bring me the villain's head, and earn his bounty!

But be wary, . Garrick has gathered a gang of thugs around him. He will not be an easy man to reach.

PROGRESS
Did you find Garrick's shack? Are we finally free of that villain?

COMPLETION
Hah - you caught him! You've done Elwynn a great service, and earned a nice bounty!

[h3]ANALYSIS[/h3]
Dissecting the above we can identify these parts:

  • Unique monster name
  • Monster problem
  • Last seen location
  • Reason for task
  • Player advice

This could be put into a template like so:

[Unique monster name] [Monster problem] [Last seen location] [Reason for task]

[Player advice]

[h2]Iterating on our Text Generation[/h2]
Continuing where we left off, we have an NPC with a goal and a problem (together called a Motivation) and they need to spit it out to the player so they know where to go and what to do.

(We already have a direction giving system built into the game, so we don’t need to worry about it here.)

World building is important. Our study of other games shows quest dialogue is where most world building is shared. We decided to test this by adding a Fact dictionary lookup to tell the player something about the skeletons. Nolan wrote up some text and we gave it a whirl. It’s important to know the system is easy to add to. I added the Fact part in < 5 mins.

Our first template looked like this:

(Template: [Greeting:Meet:Alignment] [Transition:Lead in] [problem] [Transition:One thing to do] [Goal:Eliminate] [Transition:To that end] [Quest Objective:objective] [Why not me:objective] [Opinion Context:feeling] [Fact:plotobject])

Good, you are here. We've got a problem An important [item] was taken by Skeleton. We must do something! We have to get rid of them. I have decided There's a [enemy] I'd like you to kill. I've hunted it for some time, but he always evades me. It makes me so angry that The skeleton warriors ended up destroying those who created them.

I don’t know other languages well enough to compare, but in English you can move the sequence of things around and it still makes sense but sounds different. I moved around chunks of the template and got this:

[Opinion Context:feeling] [problem]! [Why not me:objective] [Goal:Eliminate] [Quest Objective:objective] [Fact:plotobject] Oh. [Greeting:Meet:Alignment]

It makes me so angry that The Skeleton have been behaving strangely. I fear something is amiss.! I've searched everywhere. We have to get rid of them. We need to find [unique item]. I believe it will prove indispensable. The skeleton warriors ended up destroying those who created them. Oh. Good, you are here.

Just with these two different templates, I can't tell they were made by the same code gen because the structure of the language is so different!

Wait until we have 10 templates, and smaller chunks, and more variants. This is exciting!

Obviously the above text isn’t perfect and upon seeing the templates side by side it looks pretty obvious. But keep in mind the player is reading one of these every 5+ mins, not 5 times a minute. So there is a large mental break between outputs. This is in our favor.

We decided to keep going and see what we get.

[h3]GRINDING IT OUT[/h3]
Great book. Though Ray is a kind of a jerk!

As we iterated we discovered the kind of templates we need for the phases of the quest:



There is just one of each, for now, as we make sure each chunk is working.

The code detects when meeting the quest giver for the first time, providing context and overall objective to the quest first before then going into the actual task description. Then we use different templates on if you are returning to the same NPC or meeting a new one for the first time.



My first thought was the text replacement would require multiple passes. The above code shows I'm gluing the greeting template to a task template, and then doing the text replacement once. My gut says this will help us later doing everything in one pass.

I had to step away from work for a few days to deal with something, so Nolan took the time to really dig into the system and smooth out the language through lots of experimenting.

[h3]EXAMPLE A[/h3]

(Player: Do you have any work for me?)

Quest Giver: I believe we're going to need to kill the [enemy] named [enemy name].

(Player: Why?)

Quest Giver: The Skeleton have been proliferating again. We won't be safe until [enemy name] is dead. Just this morning my old master was shocked to learn the [enemies] have just up and vanished. It's not safe to venture forth until they're found. But I will not be intimidated by these creatures. If it's the last thing I do, I will have a [enemy] for a trophy. Can you help me?

(Player: Yes, I'll help you.)

Quest Giver: Now we'll get something done. The fact of the matter is he's far too strong for me, otherwise I'd face him myself. First, we need to gather support for our cause. With that in mind, we're going to need to earn the esteem of the people of [town].

[h3]EXAMPLE B[/h3]

(Player: Do you have any work for me?)

Quest Giver: It seems that The Skeleton have been behaving strangely. I fear something is amiss. I’ve thought long and hard about this and I have decided: They must be destroyed. Yesterday my niece learned what the [enemies] have in their keeping and decided to act. But I will not be intimidated by these creatures. If it’s the last thing I do, I will have a [enemy] for a trophy. To accomplish this, I believe we must clear this lair of [enemies]. Can you help me?

(Player: Yes, I'll help you.)

Quest Giver: Good. Narcedon wasn’t built in a day, though, so first talk to [NPC] at [location]. They may have some information for us. It’s embarrassing, but I haven’t been able to learn a thing.

We’re encouraged with these results!

[h2]Key Signs of Good Tech[/h2]
Nolan and I met to assess where we are at:

  1. System is easy to learn.
  2. System is easy to extend.
  3. It's fun, Nolan enjoys how easy it is to tweak on his end
  4. Fast and easy to iterate on - Quick to adjust wording and regenerate
  5. Nolan feels like he’s just scratching the surface of what can be done here
  6. Good results

These are the signs of a good tech direction. If the system was great, but Nolan hated using it. Or Nolan loved it, but it was hard to extend with new features. Or Nolan said "uh... I think we've exhausted what we can do with this" that would be really bad. Those are signs we’re not there yet, or going the wrong way.

We feel the tech is 80% there. Another week to address some outstanding issues could be all we need.

[h3]FUNNY STORY: A WEIRD TEST AND BUG[/h3]

Right after I left, Nolan started working with the system alone. Of course, he ran into a bug. It was a simple issue which I fixed quickly. But then I decided to add better error logging so he could see the error more clearly and know what to fix.

After adding much superior logging, it started spitting out results like this:

The Skeleton have been venturing dangerously close to our town. capture a [enemy]. We've got a problem. Here's what we're going to do: It seems that Can you help me? (Player: Yes, I'll help you.) Good. get to know me better. We need to be on better terms first. find somebody named [NPC]. I believe they may prove useful.

At first glance I thought it was working. But reading closer it was missing things, or at least putting them in the wrong order. I started digging into the problem for an hour+.

Then I found it!

I accidentally made the dialogue lines randomly return from all 475 in the database instead of the few contextual ones requested.

Basically it was completely random results. 100% broken.

Unbelievably, the results were almost good enough it fooled us into thinking there was a much more specific problem. Apophenia and expectations at work?

This was a funny test, and actually encouraged us!

Archmage Rises for Steam Awards 2023

First off, we want to say a huge thanks to our amazing community here for Archmage Rises. You have contributed so many great ideas and feedback that has really shaped not only what Archmage Rises has become today, but also the future of the game.

As we stride forward to conjure up more features and content for the game, we would love to humbly ask you to share your love and passion for Archmage Rises by nominating our game for this year's Innovative Gameplay Award during the Steam Awards 2023.

Your support in this (and in the community in general) means the world to us! A big thanks from the whole team here at Defiance!