1. Archmage Rises
  2. News

Archmage Rises News

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]

Patch 0.4.2 - Dec 31

[p]Jan 1: Some players are reporting save game incompatibility between Dec 6 build and this Dec 31 build.[/p][p]For now, I have made the Beta Branch the Dec 6 Build so you can load your saves.[/p][p][/p][p]I carved out some time today to look into a few recently reported bugs.[/p]
  1. [p]Fixed Glassmaker not selling any glass. What was she doing with her time?! ːlaughing_yetiː Well I got them back to work![/p]
  2. [p]Fixed casting Haste on plants makes the plant yield on the FIRST day of the season instead of some date within the season.[/p]
  3. [p]Expanded the text display area for Random Events[/p]
  4. [p]Added Console command: [c]HexEvents.Reload[/c] to allow Events writers to reload their JSON without having to restart the game. This coincides with the documentation I provided few days ago.[/p]
  5. [p]Fixed Dead Body random event where you find a body with a note and no options. Now it has options and rewards.[/p]
[h2]Organic Resources[/h2][p]There were a few bugs reported on plants not yielding their fruit/resources.[/p][p]I investigated and double checked it is all working correctly and as expected. [/p][p]I think the issue is some confusion on how it works, so hopefully here is a better more clear description of the complexity and subtlety of it:[/p][p]My Mental Model[/p][p]It has to do with the 'realism' of the growth cycles of organic resources. My mental model revolves around 'Strawberries' which I just happen to be eating right now 😋 [/p][p]Where I live strawberries ripen late June.[/p][p]If I go to a strawberry plant in May, there are 0 strawberries.[/p][p]If I go to it late June, early July, they are strawberries.[/p][p]How long do strawberries last on the plant after they ripen? I don't really know, so I just made it in game that summer bearing plants have their fruit ruined by pests and rot in Winter. [/p][p]So if I go to a strawberry plant in Fall, the fruit will be there.[/p][p]I go in Winter, it's back to 0. And will continue to be 0 until late June.[/p][p]In Game[/p][p]This is how it works in game: If you ask someone about fireseed, which yields in summer, and go to the plant in Spring, there will be 0 fruit. It all go ruined back in Winter before you even knew about the plant existing.[/p][p]But if you wait until Summer, it will bear it's fireseed fruit.[/p][p]This is also why when you show up at some plants there is resources there, and for others there aren't. It depends on the growth cycle. And I made them somewhat different - snow moss blooms in Winter and is ruined in Spring. [/p][p]Most plants bloom in Spring and are ruined in Winter.[/p][p]Some plants, like Cocoa, bloom in Fall and are ruined in Winter.[/p][p][/p][p]If you still encounter problems, let me know![/p][p]Have a happy New Year everyone! I'm excited for 2026![/p]