1. Solace Crafting
  2. News

Solace Crafting News

Beta v 0.8.0.1 - Attribute & stat rework

Post contents:
I. Attributes & combat math rework II. NPC Towns III. Community assist sheets

I. Attribute & combat math rework


When starting out with big ambition for an open-world RPG in late 2017, writing a system of stats and attributes for our characters was one of the earliest things I worked on. Put nicely, I wasn't as experienced of a programmer nor as a designer, then, as I am now. As such there were not only a number of things missing completely from the system, but there were some underlying problems that did not mix well with the game overall.

I've talked about some of these problems at different times recently, primarily the fact that most games will either be using a linear growth system or an exponential growth system. The main problem with a linear growth system is that the difference between 2 damage and 4 damage is 100%, while the difference between 100 damage and 102 damage is only 2%. The amount increasing is equal, but the difference gets less and less noticeable. With Solace Crafting that was causing players that get up to levels 200-300+ to craft a new weapon dozens of levels higher than their previous, with little noticeable benefit to combat.
An exponential system on the other hand aims to keep the difference always the same so that if 2 becomes 4, then 100 should become 200. This usually works well for games that only go up to level 50 for example, but again, with some players reaching even up to level 1000 or higher, monster health quickly becomes hundreds of billions and all of the combat math starts to exceed the capabilities of 32 bit numbers. Working with 64 bit numbers is certainly possible, and is actually what Solace Crafting did previously in regards to monster health, because this was an actual problem some players ran into, but it was only a cover-up for a deeper problem.

To solve these problems, I have implemented a new a somewhat unorthodox system. I'm sure it will be a bit strange for newcomers, but it's not difficult to understand, especially at low levels, yet it solves all of the problems of both linear and exponential growth patterns, and makes programming skills and equipment much easier for yours truly.

Put simply, all combat math is now calculated on a scale of -100 to +150. This scale being the difference from your level. If for example you are level 20, your expected skill at anything is 20, whether that's armor, dodge, healing, or whatever.

Let's look at healing for an example.
Different skills then operate on a second min/max scale. Healing goes from 0%-250%, with 100% as its baseline. So with our primary scale being -100 to 150 that means that at 0 difference (20 at level 20) you'll be healing for 100%. Say you're level 20, but you only have 15 healing skill, that means you've got -5 on the primary scale and will only be healing for 95%.

Let's look at dodge for another example.
Dodge uses a secondary scale of 0%-40% with 5% being the baseline. So if you're level 100 with 100 dodge skill, you will have a 5% chance to dodge. If you had 0 you would be at 0%, if you had 250 you would be at 40%.

Keep in mind that the primary scale bring used to display your stats grows with each level you gain. However, in combat, it's actually being weighed against the level of your enemy. So when your stat window says you have a 5% chance to dodge level 20, you'll actually have a higher chance to dodge against a level 18 enemy, and a lower chance to dodge against a level 22 enemy. So this primary scale of -100 to +150 moves with you as you level, and is weighed against your target.

This brings in 3 major benefits.
As the underlying math is based on this shifting scale of differences, not endlessly growing numbers, the math under the hood is actually always very similar. Even at level 1000, it's only checking to see where you are on the scale of -100 to +150. So the results are very predictable and work at all levels.
This also means that skill damage, equipment damage, enchantment bonuses and so on are much easier to control as it's now their level that is most important, again instead of endlessly increasing numbers.
And lastly of course, because the numbers being used in the math are only increasing by 1 per level, there is practically no chance that they will grow to levels anywhere near the boundaries of 32 bit accuracy.

To explain things a little further, most stats are primarily based on your attributes. At level zero you have 0 in all your attributes, but the math wants to assume you have 1 in each as you start out with 6 attribute points to spend as you wish. If you spend them equally across your attributes, you will find that all of your stats increasing exactly 1 point, resulting in something like this:



This is due to the way I've spread out stats to be affected by different attributes. Stamina for example increases: Max Health by 0.4, Max Energy by 0.3, and so on. If you however spend 2 points on Strength, Stamina, and Agility, with zero points in Dexterity, Intelligence, and Wisdom, you'll find that some stats turn green, indicating that they are above their "assumed" value, while others will turn red, indicating that they are below their assumed value:



Mousing over any of the stats will now also give a detailed explanation of how that number has been reached, showing you the actual skill value. I think it's easier to just show 5% dodge chance than to show 20 dodge skill and make you mouse over it to see what that translates too, though it might be kinder to be showing both, though I think the color coding system will help alleviate the need for showing the actual skill numbers as well. We'll see how players feel about it though. On a side note I do plan to change the "mitigation" section to better explain damage reduction and how it works.



This is a step that I wanted to be sure and get right before moving onto improving combat, monster AI, and player skills, as attributes and combat stats play heavily into each of those systems. There will very likely need to be tweaking and balancing of two-handed weapon damage, enchants, and some things that will be affected by these changes, but those are all based off of very centralized math that can be easily changed to alter the entire system.

II. NPC Towns


NPC Towns were actually added into the beta last week without patch notes. I wanted to make this the first patch note for 0.8, and it ended up taking longer than I expected. Having said that, NPC towns are now spawning in-game, though are largely just cosmetic at this point, and still need a new map icon.



III. Community assist sheets


After Pixelnoise made the suggestion to me that perhaps the community could assist in documenting when and where audio seems lacking in the game, which I think is a great idea, I thought I would go ahead and make several different public sheets along those lines. These will be Google Sheets accessible to anyone that clicks the links posted in Discord, and offer a way for people to append their own suggestions.
I've currently added a sheet for audio suggestions and a sheet for player skills suggestions, and have some plans for others as well. Suggesting topics for suggestions also welcome as well! =D



All in all I had to rework the combat math a few times to get it to where it is now, but it was an important step towards improving combat and skills.

Thank you to everyone participating in early access and especially to everyone that posts here on Steam, in Discord, and of course to my patrons on Patreon that help make all of this possible! And if it's a thing where you live, I hope you have a happy Thanksgiving!

v 0.8.0.1 2021.11.25
- Changed attribute and statistic math to new system
- Increased flattening around procedural towers
- Monsters more than 15 levels under you will no longer agro
- Added a /checkheightmaps console command
- Fixed paper being unstackable
- Improved the strong harvesting skills descriptions to explain that they share a single hotkey

v 0.8.0.0 2021.11.15
- Improved terraforming performance
- Enabled terraforming in multi-player
- Added /dayspeed and /nightspeed multiplier commands as well as world creation settings
- Altered the ghost death animation so they don't "fall" through the floor
- Fixed an error that could cause terrains to despawn immediately after player spawn
- Added procedural NPC towns (wip)
- Fixed a problem that could cause players to go invisible in multi-player

You may need to restart Steam for the update to begin.

To opt into Beta you only need to go to your Steam Library, right-click on Solace Crafting, select Properties, click on the Beta tab, and opt-in to the beta.

Join us in Discord!

Interested in supporting development of Solace Crafting? Please consider becoming a patron via Patreon!

Check out the bug / suggestion tracker

Hotfix 0.7.8.5

I've been tidying up some things on beta for a couple of patches, and am now pushing those to the live builds. This should clear up beta for the first wave of 0.8 patches.

The condensed patch notes for the default live build are:

v 0.7.8.1 - 0.7.8.5 2021.11.03
- Added a 1s delay to input (movement/animation) while harvesting
- Added a harvesting "stance" animation to better blend with the various harvesting animations (wip)
- Added a set of optional secondary key bindings
- Added shift-click to remove a key binding
- Added Controller Axis settings to the in-game controls settings
- Added Mouse Pitch and Mouse Yaw settings to the in-game controls settings
- Floating island portals can now spawn underwater
- Animals rewarding chitin, feathers, or scales as their main resource will now reward skinning experience
- The procedural engine will now despawn 1 object per iteration rather than always prioritizing spawning
- Fire Golem, Fire Hound, and Imp can now drop Essence of Fire
- Water Elemental and Crasc can now drop Essence of Water

The most recent changes to beta, which are included in this patch, that I have not yet posted patch notes for are as follows:

v 0.7.8.5 2021.11.02
- Improved the to/from/during swimming animation blends
- Fixed an error interrupting the recall ability in MP

v 0.7.8.4 2021.11.01
- Reduced the frequency of flora in the desert biome and darkened the large stones to better match the ground color
- Added a 1s delay to input (movement/animation) while harvesting
- Added a harvesting "stance" animation to better blend with the various harvesting animations (wip)
- Added LOD group to light pedastals
- Stomp graphic will now align with ground normals
- Floating island portals can now spawn underwater
- Fixed some MP problems with temperature
- Fixed some MP problems with new caves trying to run server commands on clients

You may need to restart Steam for the update to begin.

Join us in Discord!

Interested in supporting development of Solace Crafting? Please consider becoming a patron via Patreon!

Check out the bug / suggestion tracker

Beta v 0.7.8.3

I've implemented a few more much needed features for partial controller support. You can now set a secondary key or button for every key binding in the in-game settings, which allows you to have a controller bind without having to overwrite a keyboard bind. I still want to add an auto-loot options, but I've been really busy this past week working out some potential business matters, and reorganizing my/our plan/priorities.

v 0.7.8.3 2021.10.28
- Animals rewarding chitin, feathers, or scales as their main resource will now reward skinning experience
- Fixed grass density and distance not properly being reapplied from saved settings after restarting
- Added a set of optional secondary key bindings
- Added shift-click to remove a key binding

You may need to restart Steam for the update to begin.

To opt into Beta you only need to go to your Steam Library, right-click on Solace Crafting, select Properties, click on the Beta tab, and opt-in to the beta.

Join us in Discord!

Interested in supporting development of Solace Crafting? Please consider becoming a patron via Patreon!

Check out the bug / suggestion tracker

Beta v 0.7.8.2

Two larger changes in this patch, so I'm going to push it to beta first to be safe.

For one, I've added the first of three steps of better controller support. The first step being manual selection of controller axis for look and move controls. I'm still using the legacy input manager, which accounts for up to 28 possible axis, but I don't actually think there are controllers with that many axis? So I've set up a system where in the in-game settings you can now cycle between axis 1-11. My XBox-like generic controller I'm testing with has axis 1 and 2 for the movement X and Y, as well as axis 4 and 5 for the look X and Y. I also added sensitivity settings, Y inversion, and a "current input" display so you can hold down a joypad while cycling through the choices without having to exit out of the settings window to test it, in the event that your controller may not use the same axis as mine.



The second step I want to add in tomorrow, being a secondary key binding option for all keys. Without this, you can only either have a controller key bound, or a keyboard key bound, and that's not nice. Even with this added step there is still going to be a variety of actions like UI navigation, building, and crafting, that won't be possible with a controller. But you will be able to setup hotbar buttons, camera, and movement on a controller for general running around, fighting, and harvesting. I will also make sure to add an "always auto-loot" option or something of that nature as looting individual items from monsters won't yet be possible.

The third step will then be full UI navigation, but there are some things on the development table right now that make waiting on implementing full controller support the correct choice for right now.

Besides that I have made some changes to the procedural generation engine. Previously it would always prefer to spawn things before opting to despawn things. This became problematic for some people when quickly teleporting to different locations, or moving around a lot to cause the "loaded" game area to grow and grow before any of it be prioritized to despawn. Instead, this patch now opts to despawn one thing, if anything exists in the "to despawn" queues, per iteration of the procedural engine. Despawning, like spawning, can be a hefty operation in some cases and is the main cause of "lagg" or hiccups in the engine at the moment, so I want to send this to beta first and give it some more testing myself before we go ahead with it as is.

Also there are a number of threads here on Steam I have not gone through yet. My apologies if I am slow to respond to any problems anyone may be experiencing!

v 0.7.8.2 2021.10.21
- Added Controller Axis settings to the in-game controls settings
- Added Mouse Pitch and Mouse Yaw settings to the in-game controls settings
- Fixed the /mousepitchmultiplier console command
- Fixed crafting multiple items of non-stackable items in one go causing them to stack
- The procedural engine will now despawn 1 object per iteration rather than always prioritizing spawning
- Improved boat performance
- Fire Golem, Fire Hound, and Imp can now drop Essence of Fire
- Water Elemental and Crasc can now drop Essence of Water
- Going under water in water caves will now properly cause your breath to wear out

You may need to restart Steam for the update to begin.

To opt into Beta you only need to go to your Steam Library, right-click on Solace Crafting, select Properties, click on the Beta tab, and opt-in to the beta.

Join us in Discord!

Interested in supporting development of Solace Crafting? Please consider becoming a patron via Patreon!

Check out the bug / suggestion tracker

Now Live - v 0.7.8.0

Now pushing all of the recent changes from beta onto the default live branch!

We've got two new locations, 11 new monsters, 21 new items, and 31 new enchants.



This finishes up the 0.7 branch and I'll be starting tomorrow on 0.8 which is primarily focused on combat, player skills, monster abilities, as well as an in-depth overhaul of combat math. I thought I'd go over the planned changes a bit and offer a chance here for input, though I do encourage you join our Discord server and post in the #ideas-discussion channel.

[h2]Player Skills[/h2]
The current skill trees in-game are the four main Archetypes. Each Archetype is planned to branch off into two different Jobs at a minimum level of 10, with each job then branching into 2 different classes at a minimum level of 30, like so:

Squire
- Guardian
- - Knight
- - Paladin (*Priest)
- Fighter
- - Warrior
- - Duelist (*Adventurer)

Scout
- Adventurer
- - Rogue
- - Bard (*Magician)
- Archer
- - Marksman
- - Ranger (*Spiritualist)

Apprentice
- Magician
- - Summoner
- - Enchanter (*Archer)
- Scholar
- - Wizard
- - Spellsword (*Fighter)

Disciple
- Spritualist
- - Shaman
- - Druid (*Scholar)
- Priest
- - Cleric
- - Monk (*Guard)

The Classes listed with a starred job next to them are hybrid classes that require a certain amount of points to be added into a different skill tree before they can be unlocked. For example Paladin needs:
1. 40 points spent in the Squire tree and player level 10 to unlock Guardian/Fighter
2. 80 points spent in the Guardian tree and player level 30 to unlock Knight/Paladin
3. 40 points spent in the Disciple tree to unlock Spritualist/Priest
4. 20 points spent in the Priest tree
Bear in mind that a player gets 6 skill points per level, so at level 29 (counting level 0), you've earned 180 points, making 40+80+40+20 the exact amount you need to start spending skills in the Paladin tree at level 30, if that's what you're aiming to do. At least that's my plan. And if you were wondering you'd need to reach level 520 to fully unlock all of the skills.

Due to the infinite procedural nature of Solace Crafting the current iteration of skills allows for infinite skill point spending. The problems with this are numerous and I do not intend to uphold this system with the coming changes. I am still considering adding a certain type of passive skill at the end of each Class tree that would allow for the continual improvement of a skill tree. For example if a player wanted to remain a "pure" Wizard, not spending points outside of the Wizard trees, but had already spent every skill point possible in the Apprentice, Scholar, and Wizard skill trees, they would keep earning skill points as they level but not have anywhere to spend them. Having a general "Wizard Power" sort of uncapped general magic damage buff skill at the end of the tree would let a player remain "pure," but there is some math I need to finish up before I can really decide if that's a fair way to approach things. Ultimately the goal is always fun more than it is realistic/fair, so we'll see.

[h2]Combat Math & Attribues[/h2]
Similar to what I was talking about above, the current attribute and combat math systems increasingly scale up to numbers and methods that slowly fall apart.
For example, if a level 1 sword does 4-6 damage, then you craft a way better level 1 sword and you're doing 14-17 damage, the change is drastic and obvious. But at level 50 that looks more like 400-600 upgrading into 410-623, and you hardly notice the difference.
This is true for all statistics, not just damage. The general way around it is to just use bigger and bigger numbers, scaling exponentially rather than linearly so the changes look bigger and bigger, and you quickly get into doing 1,000,000 damage and monsters have a billion hit points, and so on. Add that to the fact the we have had players go above level 1000, and the math actually starts to go beyond what 32-bit numbers are capable of. Switching all of the math to 64-bit would of course "work," but again we're talking about monsters with hundreds of billions of hit points, and I really just think that's silly and much more difficult to understand than what it could be.

I've designed and am propsing a new approach. As it is new it will be different than what people are used to, and I'm sure for a lot of people it will seem a bit confusing at first, but ultimately I think it will actually be easier to understand and make combat math make a lot more sense regardless of what level you are.
Put simply all numbers will carry a "level" with them, instead of an arbitrary hard value. These levels will then be weighed against whatever counterpart they're being used against to determine final results. In short, a one-handed weapon will always deal 100 damage to it's target,