1. Archmage Rises
  2. News

Archmage Rises News

Dev Update Mar 7: Towns, Regions, and the First Threats

[p]In the previous update I wrote my goal to introduce systemic global threats to challenge the player. To achieve this, I need to carve up the map into regions and have a better more detailed map.[/p][p]Jan was laying the tech foundation.[/p][p]Feb was expanding on it to make a more full medieval world…. in which monsters will crush, pillage, and destroy. (Being a GM, I have a soft spot for the monsters!)[/p]
1. Map Now Has Geographic Landmarks
[p]Scenery is now detected and named. This will feed the new directional system for NPCs telling you where to go.[/p][p][/p]
2. Towns Span Multiple Hexes
[p]It was driving me nutz the current build only had one village icon and it was used for every town size.[/p][p]In fixing it, and discussing with wonderful people like Odynn, KafkaExMachina, Dagy in the Discord channel, I decided to go all the way with Towns spreading across multiple hexes.[/p][p][/p][p]While doing that, I might as well put feeder villages around the towns.[/p][p][/p][p]While doing that, I may as well put specialty buildings like resource producers out on the map too.[/p][p][/p][p]This creates more places for the player to visit, and more places for monsters to interact with civilization. Buildings being placed are quarry, mine, pasture, herbalist, distillery, and brewer.[/p]
3. Interesting Maps
[p]I recently read a 1,000 page textbook on Game AI. A major point the author made was, “Start with Random. If that isn’t sufficient, here are some techniques to use.”[/p][p]Random placement of towns wasn’t sufficient. They would get really spread out or bunched up in a corner. It was literally totally random.[/p][p]Next I divided the map up into sectors, in this case 10x10 but it’s arbitrary.[/p][p][/p][p]Using sectors I can space towns out with a few simple rules, and then go back in and put interesting things between. These sectors will be utilized much more later.[/p]
4. Getting Fed Up
[p]I don’t know what you are like, but it’s the engineers dilemma that I set out to do a thing, then must build all kinds of other things, just to earn the right to build the thing.[/p][p]I did a lot, but I was getting fed up waking up each morning for 6 weeks just to work on maps; all when what I really wanted to do was make the Threat system and get some gameplay going![/p][p]It’s simple and obvious to finish a task before starting the next one.
But people aren’t robots and morale is important too.[/p][p]I’m self employed, working on this amazing game, if I’m getting sick of working on the same thing each day, I can switch off. I do that for my employees![/p][p]So I wrote out the remaining cleanup and refinement tasks remaining so I wouldn’t forget them, then started working on the Threats.[/p]
5. Making a Plan
[p]I’m pretty organized about my client work. It makes it flow much more smoothly and helps with internal expectation setting. So, I took a moment to plan out the Threat system and assign Story Point estimates to it.[/p][p](If you don’t know what Story Points are, it’s a system that allows one to judge the relative size and complexity of a task without defining how long it will actually take to complete. Humans are good at judging how big/difficult a task is, but terrible at estimating how long it will take.)[/p][p][/p][p]Making the initial MVP Threat system is 53 Story Points.[/p]
6. First Threat
[p]While I like and will build the Spider Queen threat detailed in earlier posts, I wondered if there was a simpler tech demo I could create that didn’t require some of the more advanced gameplay features like multiple breeding sites, Queen regrowth, and escape to other lairs.[/p][p]I designed the world’s most vanilla RPG quest:[/p]
  1. [p]An elite monster, in this case a goblin named Moggrat, is raising a warband and raiding peasants.[/p]
  2. [p]Left unchecked, he will extort and attack towns.[/p]
  3. [p]Once enough clues are located, his lair will be revealed - but only for a short while before he moves on to another campsite.[/p]
  4. [p]Player attacks the Lair and confronts Moggrat.[/p]
[p]This has most of the features of the Spider Queen, but is 50% simpler.[/p][p]I built the basic structure of the system with Scriptable Objects to make it nice and data driven.[/p][p][/p][p]Points accrue every X time cycle. Once it reaches the threshold, the Threat can take an action. Actions can have prerequisite actions that must be performed first before they become valid. This helps build tension and make it climactic.[/p][p][/p][p]I wanted to define the kinds of ‘spots’ actions can be done on the map. Maybe only some actions, like a raid, only make sense on a farm, village, or housing. Using data to combine concrete Actions with lists of possible targets makes a really simple yet flexible system I'm proud of![/p][p]I got the system to run:[/p]
  1. [p]Region begins in a dormant threat state.[/p]
  2. [p]After X time a new threat emerges from a potential list (of one)[/p]
  3. [p]The threat begins and starts taking moves at certain intervals[/p]
7. Safety and Danger Zones
[p]I soon realized it is dumb for Moggrat to do a scouting party right next to a big town. He needs to start taking actions in the outskirts, away from civilization, where it is safer for monsters to operate unseen and with a quick escape.[/p][p]That required building a system of safe zones around towns. This will be tied to the town’s military level.[/p][p]But then I needed to see where the Safe zones were to ensure the system was working right.[/p][p]And this is what led to creating a Data Overlay system.[/p][p][/p][p]This feature has been requested before. Like Civ or Old World, now I can do data overlays on the map. I threw a shield icon up for all the safe hexes where the Scout mission won’t occur.[/p][p]This system will be tied to certain world spells so you can spot stuff.[/p][p]This lays the foundation for Danger which will build as you travel further and further from civilization and safe zones.[/p][p]The placement of a watch tower or guard tower by a town out in the wilderness will now really matter as it affects the safe zone layout.[/p]
Coming Up Next
[p]That sums up what’s been built over the last month. I can already tell it was the right move to start with the map gen before doing the threat system.[/p][p]With the Threats now firing a Scouting action, on Monday I’ll start working on the NPC’s as witnesses to the event and able to tell you where it is for further investigation.[/p][p]Once I get the first Threat working I will package it up for a Beta release.[/p][p]I hope you enjoyed this write up and like where the game is going.[/p][p][/p][p]If you prefer to see what is happening dev wise more frequently and more detailed than these monthly posts, head on over to the Discord real-time dev blog where I post daily and discuss features![/p]

Dev Update Feb 8 - Regions and Map Generation

[p]Before I get into today’s topic of what I’ve been working on, I want to address the issue of bugs and patch releases.[/p][p]Some 20 common and serious bugs have been reported since the influx of new players last month. I’m not ignoring you! Bugs matter to me and I will address them.[/p][p]Right now I’m focused and building momentum on making major structural improvements to the core game that are hard to do but long overdue. It’s challenging and thorny work and a few days away from it at this critical time will set it back. This is the stage where the cement is still wet, and stepping away now risks letting it harden in the wrong shape.[/p][p]As soon as I get Regions and Threats into a good place (not finished, but well formed), I’ll do a patch release.[/p][p]I hope you understand. We all have the same goal: a great playing, sandbox, simulation RPG. I think I’m doing the right things to get there. Now, onto today’s topic![/p][hr][/hr]
Map Generation For Threat Generation
[p]As previously posted, I want to introduce global threats and challenges for the player to overcome, but in a systemic way. This takes the place of a ‘story’ in a typical RPG. While not my primary goal, this is the part that makes Archmage Rises a ‘forever RPG’. To do so I need to split the map up into Regions. Regions need to be generated in a way that is fun, supports the design goals, and has a solid technical foundation.[/p][p]To sum up: In need to implement Threat generation, and spent the last 2 weeks on map generation. 😝[/p][h2]Current State[/h2][p]Here is a screenshot of a map I was playing on in the current public build.[/p][p][/p][p]I don’t know why I didn’t notice earlier, but this is about the worst map I’ve ever seen in a game - any game! There are so many things wrong with it:[/p]
  • [p]All mountains, everywhere![/p]
  • [p]Using the same mountain sprite tile, even though we have several variants of it[/p]
  • [p]Poor variety - Totally not fun or enticing to play[/p]
  • [p]Unrealistic adjacency - bog next to a lake in a mountain range? Deserts next to snow covered hills next to coniferous forests? Bogs, chasms, rivers, grassland all mixed into the same area. It just doesn’t make sense, it’s a visual mess.[/p]
  • [p]Decorations or ‘features’ placed on top of tiles that don’t do anything. They look like they should be something, inviting the player towards them, but they are nothing.[/p]
  • [p]Only utilizes 6 of 25 terrain types.[/p]
[h2]What’s the goal?[/h2]
  • [p]Regions need to have a primary biome that make them feel distinct and interesting - Temperate, Desert, Swampy, Volcanic, Tropical, etc. Generate a map consistent with the feel of the biome[/p]
  • [p]Utilize all the artwork we have (20+ terrain types) to create diverse, consistent looking, maps[/p]
  • [p]Gameplay first, not realism. Sid Meier has a rule for Civilization: Only use a elementary school level of history, because that is what players will bring to the table. I will follow basic rules of geology and ecology so it isn’t confusing. Jungle isn’t next to tundra, a swamp next to a desert, full broadleaf forests don’t grow on rocky terrain.[/p]
  • [p]Only show map features if they have gameplay value - if you see a cave sprite, it is because there is a cave to explore.[/p]
  • [p]Landmarks players and NPCs can reference to talk about the map. Instead of a character saying “17 miles west” they should say “near Spookwood Forest” and you can locate and remember that on the map.[/p]
[p]Last post I shared my start with basic land formation, separating the seas from the land.[/p][p][/p][h2]Mountains[/h2][p]From there I started generating mountain spines.[/p][p][/p][p]They can have N branches coming off them and using a slider I can determine how mountainous and thick they are.[/p][p]In fact, it took some time to get everything the terrain generator does to be driven off a few simple sliders.[/p][p][/p][p][/p][h2]Forests, Vegetation, and soil fertility[/h2][p]Then I tackled trees and other kinds of vegetation. I would have to revisit and keep reworking this code over the weeks. I didn’t appreciate how hard it is to allow a forest to be a separate layer on the map, let it grow across different terrain types.[/p][p]For instance: if there is a broadleaf forest next to some mountains, does it grow on the hills leading up to the mountains? I think yes. But more sparsely.[/p][p][/p][p]In fact, that sparsity should be a transition piece between grassland and a full forest.[/p][p][/p][p]Bob Ross will be proud of my happy little trees![/p][p][/p][h3]This led into a major new feature: Soil Fertility.[/h3][p][/p][p]Once I started modelling Soil Fertility, everything started falling into place, I could define a tree type (broadleaf, coniferous, swamp, jungle) and specify the temperature and soil quality it requires to grow. With that, I could plant seeds on the map hexes and watch it grow.[/p][p]But it also has gameplay purpose. The medieval era was defined by its agriculture (3 field rotation system on the manor). Most people worked the land. With this new variable it opens up lots of interaction and world spell possibilities for the player. Casting spells to improve soil fertility for a farmer, or turn lush fertile land into barren wasteland.[/p][p]With this in place I was able to generate plausible wilderness looking maps.[/p][p][/p][p]By moving the temperature slider I could get coniferous forests to appear.[/p][p][/p][h2]Adding More Terrain Types (Biomes)[/h2][h3]Ashworld[/h3][p]I started by adding a desolate mordor ash biome. Utilizing soil fertility I could ensure trees wouldn’t grow. I also could add dormant or active volcanoes and fumaroles.[/p][p][/p][h3]Tropical[/h3][p]Once I got 2 biomes working, it wasn’t too hard to add more biomes with different data and tiles.[/p][p]I added tropical plains and jungles.[/p][p]This screenshot shows a broadleaf forest grow into tropical, switch to jungle, switch back to broadleaf for one hex over grassland, and then switch back to jungle for the last 2 tropical.[/p][p][/p][h2]Desert[/h2][p]I have two terrain sets for desert: red (barrens or badlands) and yellow (more Sarah or Utah). They have different features available in them, like red deserts have savanah forests and mixed grass, while yellow deserts have salt flats and cacti. I learned a new word for ‘low moisture plants’: Xerophytes[/p][p][/p][p]Deserts can have oasis, dead trees, or mesas.[/p][p][/p][p]Red Desert[/p][p][/p][h2]Swamps[/h2][p]Doing this has taught me the difference between Swamp, Bogs, and Marshes. But as a gamer going back to Final Fantasy 1, I’ll continue calling it all Swamp. 😝[/p][p]I had to add more vegetation types and play with the soil fertility and now have swamp land. I think to sell the misery of it some color correction and some mist will help a lot, but I can do that later.[/p][p][/p][p][/p][h2]Hills / Highlands[/h2][p]Before moving on I needed to finish off with hills and Highlands. Highlands are more rocky (lower soil fertility). I use them as transitions around mountain ranges and I now have 3 layers showing correctly:[/p]
  • [p]Grassland base[/p]
  • [p]Hill/Highland on top[/p]
  • [p]Vegetation on top of that[/p]
[p]The map is actually capable of 7 layers - Base, rivers, chasms, roads, vegetation, structures, and decoration[/p][p][/p][h2]Landmarks[/h2][p]Before finishing off the terrain generation, I want to capture the geographic features with names. Because of how I generate them I actually know all the hexes that belong together (as a blob), making it easier to center and place a name. I call these named features “Landmarks” and store it so it is accessible to the rest of the game, including the tooltip.[/p][p]I like in Old World how the player can discover a landmark and name it. I’m going to allow this somehow. I like the idea of saving a town and they name the local forest after you.[/p][p][/p][p]It still needs some more work to make the text more clear, but I got landmark naming working for mountains before ending for the week. On Monday I'll get the rest, like forests, working.[/p][p][/p][p]So there you have it, what I’ve been working on for the past few weeks. While doing it I felt like it was taking forever, but now that I’ve written up this summary I feel pretty good about how far it’s come compared to what the game was generating.[/p][p]One issue that came up on the real-time discord dev channel is Rivers.[/p][p]It’s a bunch of work to put in rivers with, currently, no gameplay value. I’m not going to worry about rivers for now until I can sort out what gameplay role they play.[/p]

Dev Update Jan 17 - Villains, Threats, & Regions

[p]Good writing has one central focused topic. But, a lot has happened in the last 2 weeks, so this is a triple-topic blog post.[/p][p]These past two weeks mark my first stretch back working full-time on Archmage Rises in quite a while. [/p][p]First, I put out a significant bug fix patch with a lot more fixes than that short list conveys.[/p][p]Then I focused on the most foundational work the game needs.[/p][h2]Turning Down Contract Work[/h2][p]Over the Christmas holidays, a studio reached out to hire me as a consultant. At first I said yes. Certain income is nice! But the more I thought about it, the parameters of the deal just didn’t feel right.[/p][p]One consideration was it would steal energy and attention from Archmage Rises, mainly around mental context switching. The kind of background drain that does not show up on a timesheet. In the end, I passed on the offer.[/p][p]It was a risky choice, but my wife and I feel it was the right one for now. I want my attention fully on this game.[/p]
Macro Game Loop
[p]For our purposes I’ll define a macro game loop as “What am I doing and why do I want to do it?”[/p][p]Starting Jan 5 my main effort is on the macro game loop. I have been working through a systems-driven approach for creating large, persistent problems in the world that the player has to respond to over time.[/p][p]The game must answer this question:[/p]
[p]“What gets worse if the player does nothing?[/p]
[p]Most of the games I play the answer is simple: “nothing.”
Archmage Rises is different and I have to bring that difference to the forefront.[/p][p]To make design discussion easier and more focused, I spun up a dedicated Design Discord channel and started posting questions and design examples there, this pairs alongside the Real Time Dev blog where I’m posting almost hourly as I work.[/p][p]For those that prefer Steam, I posted design discussions on Steam forums. I check these threads each morning as I start work.[/p][p]Threat System[/p][p]Regions [/p][p]Early feedback has been encouraging. The direction feels right.[/p][p][/p]
Threat System Design
[p]For the first time in this project history, I’m sharing an internal design document. I didn’t know Confluence could do that!
You can read the real design doc of what I’m attempting to build (with good formatting!) and it gets updated whenever I make changes.[/p][p]Threat System[/p][p]In software we talk about features as “user stories”. I think a story is a better way to describe a system and convey it’s features and feels better than a series of logical bullets.[/p][p]I think about the threat system through the concrete story of a Spider Queen.[/p][p][/p][h2]The Spider Queen[/h2][p]A spider infestation slowly converts a human region into a breeding ground. The queen is an amoral biological force optimizing for reproduction and safety. The player hunts her by cornering her by destroying her location options.[/p][p]I’m just highlighting a piece of the design here, I think this bit about the Threat Escalation explains a lot.[/p][h3]Threat Escalation[/h3][p][/p]
  • [p] Threat Moves provide progress along the Threat Track Foundation → Aggression → Conquest → Domination[/p]
  • [p]However, Escalation on Threat Track is gated by certain requirements.[/p]
    • [p]Cannot enter Phase 3 Conquest until N sites are Infested[/p]
    • [p]Cannot full assault a Town until a minor attack is performed on it[/p]
    • [p]Queen cannot enter Phase 4 Domination of attacking the capital until she conquerors a Town[/p]
[p]This allows the player to block the Queens progress through defensive actions[/p][hr][/hr][p]After sharing the first macro threat example, I spent the next few days incorporating feedback and testing the design against another scenario, a goblin warband. Once the ideas felt stable, I shifted from pure design into technical design of classes and systems. I think I found a way to implement the threat tracking in a way that avoids keeping data in the save file and instead making it more systemic logic driven. This makes it safer for save file migration across updates.[/p][p]I considered the design phase complete and started to code the Spider Queen threat.[/p][p]Then reality hit.[/p]
Pre-req: Regions
[p]There is no way around it, the threat system depends heavily on a map made up of Regions, which in turn requires reworking how the world map is generated. This is a system I am not deeply familiar with, so there is both learning and refactoring involved.[/p][p]I’ve known I had to implement Regions for a while, you can read the design goals in this dev blog:
[/p][p]https://www.archmagerises.com/news/2024/3/9/developer-update-regions[/p][p][/p][p]This week:[/p]
  1. [p]Created a new, simpler, cleaner way to store map data and render it. All the logic was on the renderer, when it went to draw a hex is when it decided what kind of terrain and features it had. The renderer was hundreds of lines long and overly complex. It is now 12 lines and handles 6 layers of ‘stuff’.[/p]
  2. [p]Moved the logic to when the map is created (where it should have been). This setup now allows the player to modify terrain through world spells. Or state changes like a burned down forest or ruined village.[/p]
  3. [p]Added 12 new terrain types, like shallow vs deep ocean, badlands, volcanic ground, and jungles.[/p]
  4. [p]Created a new region generation algorithm. I’ve only put a few hours into it but I’m already liking the shapes it is making, I see fun in it.[/p]
[p]A game world is made up of 5-8 regions.[/p][p]Here is a WIP screenshot i pasted together for 30x30 region that won’t impress anyone but my mom 😛:[/p][p][/p][p]Next step is adding forests and mountains.[/p][p]Perhaps it is nostalgia, but the mental ‘goal’ for terrain generation is my fond memories playing Ultima V. I found a cool website that has the whole game map on it you can walk around in it. I printed out some of my favorite spots and put them up on the wall to inspire me
[/p][p][/p][p]Also on the wall is my favorite most inspirational quote from the Steam Forum. What you say matters.[/p][p]That summarizes where the project is at. I’m excited to hit the Region map generation next week![/p]

Patch 0.4.3 - Jan 13

[p]Hi everyone! [/p][p]I fixed the two most reported bugs over Christmas/New Years. [/p][p]There were a lot of code changes, likely fixing other bugs too, but I'm releasing it on the Beta branch first so we can see how well it performs.[/p]
Fixed
  1. [p]Knowledge Picker crashing - Fixed the Subject/Knowledge Picker when talking with NPCs. It was blowing up if there was a quest giver without a Job. I also got rid of the dummy text "hyrule castle" and "ninroot" so it is more clear it blew up, it now just says "error".[/p]
  2. [p]NPCs giving bad directions to Monsters - it now spawns a tracks Event on the map from which you can find monsters.[/p]
[p][/p][p]Not a very long list, but hopefully this will make your game play much more enjoyable![/p][p][/p]

Patch 0.4.3 - Jan 9

[p]Hi everyone! [/p][p]I fixed the two most reported bugs over Christmas/New Years. [/p][p]There were a lot of code changes, likely fixing other bugs too, but I'm releasing it on the Beta branch first so we can see how well it performs.[/p]
Fixed
  1. [p]Knowledge Picker crashing - Fixed the Subject/Knowledge Picker when talking with NPCs. It was blowing up if there was a quest giver without a Job. I also got rid of the dummy text "hyrule castle" and "ninroot" so it is more clear it blew up, it now just says "error".[/p]
  2. [p]NPCs giving bad directions to Monsters - it now spawns a tracks Event on the map from which you can find monsters.[/p]
[p][/p][p]Not a very long list, but hopefully this will make your game play much more enjoyable![/p][p][/p][p](Remember - to play this latest build switch to the Beta branch on Steam by going to the games Properties)[/p]