It seems as though the video game industry has really hit the awards season. I just received an email about IndieDB's "Indie Game of 2023" awards, and thought how cool it would be to win that award!
Whether we win or lose, this journey has always been about trying to create the best mage simulator video game we can, and getting listed as one of the top 100 Indies of 2023 would be an amazing achievement! Plus, the more people who see the game and buy the game means more content and features we can continue adding.
So, we'd love your support again and 30 seconds (or less) of your time to jump over here to cast us a vote and help Archmage Rises become one of the top 100 Indie Games of 2023 (and beyond)!
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.
IMPROVED:
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!
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)
Dynamic Quests
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.
UI Redesign
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.
Priority Tasks
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.
Other
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. 🙁
WHY DO THEM AT ALL?
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.
WHY DO THEM NOW?
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.
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
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.
I’m Old and I like World of Warcraft (Classic)
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.
WHY WOW?
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.
EXAMPLE WOW KILL UNIQUE QUEST
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, <name>. 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!
ANALYSIS
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]
Iterating on our Text Generation
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:
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.
GRINDING IT OUT
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.
EXAMPLE A
(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].
EXAMPLE B
(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!
Key Signs of Good Tech
Nolan and I met to assess where we are at:
System is easy to learn.
System is easy to extend.
It's fun, Nolan enjoys how easy it is to tweak on his end
Fast and easy to iterate on - Quick to adjust wording and regenerate
Nolan feels like he’s just scratching the surface of what can be done here
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.
FUNNY STORY: A WEIRD TEST AND BUG
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! <facepalm>
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!
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!
I’m back from a week away. We had some great progress last week, so let’s get into it!
UPDATE 2B: COMBAT REWRITE
More stolen combat art from the internet. This time from Pathfinder!
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.
LAST WEEK WE SAW THE KEY INDICATOR THAT WE ARE CLOSE TO BEING DONE!
For review, the new system was embarked on to make it cleaner/better/easier/safer to add new spells and make it faster to iterate on them.
This week Mark was able to design a new spell, from scratch, using just JSON text editing and see it work in game. We’ve been working for a long time to reach this moment!
A test spell created in the new system.
We have a whole new buff/status effect system in that allows for the stacking of buffs. This is critical for one of the spell schools, so it plays differently than the others.
No dates yet. We still have more work to do. But we’re close to picking a release date for Combat and ramping up the promotion of it.
UI REDESIGN
Some may remember, Nic and I threw together the first UI just so we could get something playable for our booth at two game conventions.
Fun facts: The rose on the left represents the purity of your soul, and petals would blacken and fall out as you make evil choices. The candle represented how much of your life was left before you die of natural causes.
We moved from that UI to what you see today which was revised out of necessity.
We call this iteration Version 3
While I attempted to make something functional and decent looking, it was always just placeholder until I could get the right people involved and give them enough time to make a “real” UI.
Now is that time.
UI redesign is part of roadmap Update #3 Exploration. Jessi has been on our art team for over a year now, working with the UI as is. Now she is ready to lead the charge on a proper User Interface and User Experience. She’s excited (and maybe a little nervous) to be unleashed and make a real proper professional design.
Not without assistance. Phil has years of experience in marketing design, web design, and UI/UX design while Mark has years in AAA games. I think we have the right team to figure out how Archmage Rises should play.
It will take months of slow boil to get this right, which is why we are starting now.
As creative director, I have given a very broad direction:
I really want to embrace the medieval world feel.
I’m in love with the Medieval world; 13th century is my fav. I admit to holding a highly romanticized view. I’m certain if I jumped in a time machine and went, I couldn’t stand the smell!
Last year I went to France to visit the Cathedrals in Chartres, Rheims, Amiens, and Sainte Chapelle. I left that experience with an appreciation of stained glass as an art form.
I encouraged the team to explore how stained glass could be used in the UI.
I perused the UI mood board they were working on and love the color and feel of this picture:
Where is this going? How will it look? We don’t know!
These dev updates are raw and I’m telling you what’s happening as it happens. We’ll see in a few weeks what comes of this.
Until then, I’ll share this cover art from one of my favorite game series:
Thank you Moby Games for preserving game history! It’s appreciated!
DYNAMIC QUEST GENERATION
Just before I left, Nolan and I made some great progress on the dynamic quest NPC text generation. The system is generating text we find compelling. More details to come in tomorrow’s detailed update.
The first part of Dynamic Quest generation is coming as part of Update #3 Exploration.
PRIORITY TASKS
We’ve had a big influx of new players this past week, always a good thing. Here is what we are focusing on for this week’s patch:
Hiding equipped items from trade/sell window
Stief000 was unable to load a save game
Asking in an Inn about quests generated a ton of errors, because a certain kind of quest giver won’t generate.
Some encounter screens are missing related artwork
Fixed a bug that caused books to get stuck and not able to be move out of an inventory
Fixed a bug causing shields to sometimes improperly cast (consuming Ara but not properly casting the shield spell)
IMPROVED:
Rebind key C to open character sheet. Rebind key X to move south-east on the hexmap
Removed the spell power slider text from the combat tutorial, which was causing some confusion. Moved it to it's own tutorial pop-up after the spell slider is unlocked
Number keys can now be used to select convo dialog options for both NPCs converations and encounters
You can now use the SPACE key to skip transition animations (like sleeping in the inn, starting a brawl, or washing dishes for example)
Using a torch at night while investigating tracks reduces the darkness debuff by 1 (making it a -3 instead of -4)
Casting the Light spell at night while investigating tracks reduces the darkness debuff by 2 (making it a -2 instead of -4)
Hey! Phil here. Thomas couldn't make it because I locked him in a closet and usurped power from him. MUAHAHA!
Actually, he needed to head out on a last minute trip on Friday of last week, so that's why there was no Dynamic Quest update on Friday, and there will be none this week, but it'll make it's return next week when he is back.
With that out of the way, onward to what the team is up to this week!
Update 2b: Combat Rewrite
Michel continuing work on flow of combat / event sequencing.
Zach is continuing work on Combat Buffs/Debuffs.
Josh is continuing work on Spell Casting UI and UX.
Tyler is continuing to work on spell school progression.
James / Mark are starting to implement the updated spell designs and data with the new tech.
Dynamic Quest Generation
Lots of progress has been made on the Dynamic Quests front. I got to see some great work done on the first iterations of incorporating dialogue into the quests being dynamically generated. It's still a little rough around the edges, but Nolan and Thomas have been making rapid progress!
With Thomas out this week, Nolan will be riding solo on Dynamic Quests this week. When needed, Nolan may also help out with some other needed writing tasks this week.
The first version of the dynamic quests will come in Update #3 Exploration.
UI Redesign
Jessi and I have been hard at work looking at our UI and working some magic at not only unifying the UI more, but also creating a clean design language that makes sense in context of the game. We're excited with what we've come up so far, and will continue making progress on this project this week.
Priority Tasks
Thanks so much to everyone for all of the great feedback and suggestions! We're continuing on the QoL train this week, along with some priority bug fixes. Here's a few of the things we're working on for the upcoming patch at the end of the week:
We’re going to make tracking tracks easier at night: Light spell +2 , torch +1 against -4 at night (still on our list from last week)
Fixing an issue with books being stuck in the inventory
Using spacebar to skip intercession animations (like sleeping at the inn or a bard performance for example)
Now when someone requests you to find a resource as part of a quest, you don't have to take the extra steps to ask where the resource is, they will just tell you! Unless they don't know... but in that case at least they will tell you who in town you should talk to to get that info! Saves you a few extra clicks :)