Training Control

Name dcss:brainstorm:skills:training
Summary New training system to get rid of victory dancing and XP pool.
Added by galehar
Added on 2011-05-02 17:06

The basic idea is to add an option on the skill menu to toggle between automatic training and manual training. In manual mode, the player can select one or several skills and they are going to be trained as soon as XP is gained. In automatic mode, the game will choose the skills to train based on which ones have been recently exercised. The aim is to implement it for 0.9, so let's keep the proposals to something realistic with a 2 months delay.


Before we give full control of skill training to players, we might want to address the “no-brainer skills”. Let's start by reducing the HP bonus from fighting, and remove spellcasting from the spell power formula (discussed a bit here).

Manual mode


The player has to select at least one skill and up to any number. It is also possible to choose some skills to have a double weight. So there is 3 possible states for each skill: disabled, simple and double (shown as -, + and *). That way, it is easy to choose 2 skills and have one which trains twice as fast as the other for example. The interface shows for each skill the percentage of XP which will go into it. If I select one double skill and 2 simple ones, it will show 50%, 25% and 25%.
As the sharing is based on XP, if 2 skills are selected and they have different aptitudes, they won't train at the same rate. We can also base the sharing on skill points, but I like XP sharing better.


We might want to put a few restrictions on which skills can be selected for manual training.

  • Level 0 skills. Should the player be able to select them? Until the automatic mode is working properly, we'll probably allow it, but later, we might consider forcing the player to gain the first level by exercising the skill. Or maybe just for some of them. Gaining spellcasting by reading scrolls is an interesting mechanism for example, it would be a shame to lose it.
  • Weapon skill. The player has to carry one appropriate weapon (and missiles for launchers). We'll add a few checks like not cursed and no bad effects like mutagenic or teleportitis.
  • Stabbing. Carry one short blade.
  • Throwing. Carry any throwable weapon.
  • Magic schools. The player has to know one spell of the relevant school at a decent casting success (very good?). Alternatively, we might want to allow training by just carrying a book with a castable spell but then we have a functional difference from the automatic mode.
    • “Castable” would make people use automatic mode, remove armour, cast the spell a number of times then wear the armour again. I'd use knowing one.
      • You're right, let's forget about thie idea of training from a book. You need to know a spell with decent success for manual training. — galehar 2011-05-04 22:36
  • Spellcasting. If you can train one magic school, you can train spellcasting.
    • I'd turn this around: you can't learn any spells without spellcasting (_almost_ like currently, save for some Wanderers). You gain the ability after reading enough scrolls. — KiloByte 2011-05-02 18:54
  • Armour: Need to wear some armour with EVP. Maybe cap it at EVP*3.
  • Shield: wear a shield.
  • Evocation: this one is tricky. We should probably allow training it just by carrying any evokable, but again we have a functional difference with automatic mode as you would be able to train it indefinitely with a single wand or with an amulet of rage.
  • Invocation: worship a god and know at least one invocation.
  • No restriction: fighting, UC, T&D, stealth and dodging (the latter 2 could be capped with EVP too).
What about this extra rule: you can always train any skill you already have at least one rank in. — KiloByte 2011-05-02 18:54
This basically removes all the restrictions above, appart for gaining the first level. Once you've gained the first level in say, fire, you forget the spell and train the skill without even knowing a fire spell? Or train a weapon skill without carrying one? Train armour and shield without wearing any? — galehar 2011-05-04 22:36
Is this even an issue? It may be counter-intuitive to be able to train fire magic without knowing a fire spell, but if you don't have a fire spell you don't have any reason to train the skill in the first place. You're unlikely to be able to skip all the way up to Firestorm without finding a low-level training fire spell somewhere, so we're pretty much in Theory Crawl territory already. Similarly, there's no reason to want long blades skill if you aren't carrying around a long blade, or train shields if you haven't found a buckler yet. — KoboldLord 2011-05-05 00:00

Automatic mode

To make implementation easier, the automatic mode should just be the same as the current one (with exercising, victory dancing and XP pool) while we're coding manual mode. Once it is done, we switch automatic mode to a system without the XP pool.


In automatic mode, the player can enable and disable skills like in the current system. We can also add a double mode (“*”) in which exercising a skill once count for 2.


The game keeps track of recent exercising and gives a training percentage to each skill. There's many ways in which this can be done, I'll try to put implementation proposals later. It will probably need a lot of fine tuning before it's usable.

Exercise queue

In Automatic mode, we keep track in a queue of the 100 last exercises. We count the number of occurrence of each skill in the queue and use it for the percentage of XP gained attributed to the skill. Each time a skill is exercised, the oldest exercise is removed (FIFO). — galehar 2011-05-11 12:31

So you propose to expire exercises by a queue rather than exponential decay by time or xp? This might work too. — KiloByte 2011-05-11 12:37
It's one way to do it. Probably the simplest, that's why I'm proposing it :)
As someone pointed out on the Tavern, you'd need to use care to determine which actions to queue up for consideration, or else you've just shifted victory dancing from a post-XP gain to a pre-XP gain activity. — jeffqyzt 2011-05-11 14:49
This the proposed implementation for the automatic mode (natural training). Its purpose is to train the skills you use. There's no dancing involved since if you want to train a specific skill, you'll use the manual mode. — galehar 2011-05-11 16:53

Exercise vector

We add an exercise FixedVector<uint8_t, NUM_SKILLS> to the player class. In manual mode, we split 20 between the skills selected for training and drop the rest. Select 1 skill, it gets 20, 2 they get 10, 3 they get 6. Known skills exercises are ignored, but when an unknown skill (level 0) is exercised, its exercise counter is incremented. When the skill is actually trained, its exercise counter is decremented.
In automatic mode, the exercise vector is filled with the content of the queue. When a skill is exercised, we don't have to check the whole queue, we just increment the exercise counter of the trained skill, and decrement the counter of the skill popped off the queue. That way, the code for splitting the XP to the skills doesn't care if we're in automatic or manual mode, it will be the same.

What's the point in this complexity? Here's a simpler system: whenever you practice an unknown skill (read a scroll for Spc), you train it. Exp that went into this training counts as if it was drained. There's a minor time shift, but the XP that's time shifted is very tightly capped so it's not a concern. — KiloByte 2011-06-10 13:31
I don't see what's the added complexity. Even if we ignore unknown skills, we still need some way to record selected skills (manual mode) or exercised skills (automatic mode), and an int vector is as good as any. Draining skills when unknown skills are trained, seriously? Even if we take care of not doing it when a drained skill could lose a level, it could be seen in the skill menu (progress running backward). Carefully avoiding those cases doesn't sound any simpler. — galehar 2011-06-10 22:29

XP split

With the current skill cost system, skill points have a different cost for skills at different level. It means that to be fair, all incoming XP has to be split first and then skills are trained. Which means we need to have a mini XP pool for each skill and a main one, and they will all keep a few XP when there isn't enough to train a skill. This is ugly.
If we can fix the skill cost system so that it only depends on skill_cost_level and not skill_level, it will make splitting the XP much simpler. We only have to do a random_choose_weighted to choose which skill is trained, until the XP pool is lower than the current skill cost. Training unknown skills in manual mode will be very simple with this system too. So I'll start working on that. — galehar 2011-06-10 12:35

Other considerations


Note that for Spellcasting/Spell/Evocation/Invocation schools, removing victory dancing eliminates or reduces the hunger aspect of training up the skills. Should there be a hunger cost for training via this mechanism? (This is also true for combat skills, of course, but to a much lesser degree.) — jeffqyzt 2011-05-02 20:45

Most people dance using a level 1 spell, so it's not a noticeable factor anyway. — KiloByte 2011-05-04 01:29
Spell School's not if you're doing it midgame or later, but it's very noticeable early game if you're trying to e.g. take advantage of an early complementary spellbook find, wanderer scenarios, etc. Spellcasting (for non casters)/Invocation/Evocation hunger is always there. Overall, the effect is to make it easier to diversify. This may not be a bad thing, but it is an impact. — jeffqyzt 2011-05-04 14:22
Instead of instantly training skills when XP is gained, we can have hidden XP pools for each skill. We divide the XP into them when it's gained, and then at each turn, we exercise all the skills which have some XP to spend. Some skills will have a hunger cost when exercised. Fighting and weapon skill will cost the same as an attack, magic schools will cost the same as the casting of your cheaper spell, etc… That way, we can keep the hunger cost of training skills without having the player starving to death after killing a unique. I think skill training would also be smoother and more natural than if it's done instantly after a big fight. — galehar 2011-05-04 22:36
On that note - should auto-training of large-hunger-factor skills cease if it will cause you to drop below a certain satiation level? Consider: as a mid-level fighter diversifying into spells, I use rings/staves of wizardry to learn the only charms school spell I've found, which happens to have a honeycomb casting cost, and enable Charms auto-training. I then go put my armor back on and whack an OOD critter with my axe a few times, resulting in a large XP gain. Unfortunately, I was hungry when I encountered said OOD critter. The amount of XP means that the auto-train would be triggered several times. Could I bring myself to starving (or even starve to death) this way? If not, how does my XP get allocated since there's no pool any longer? — jeffqyzt 2011-05-05 14:56
Having no access to a level 1 spell by that point seems to be pretty far-fetched. I don't see any gain in emulating this factor of victory dancing, and there are costs like special case you mentioned. Remember: we're trying to get rid of it, not merely to automate it. — KiloByte 2011-05-05 16:21

Good point. So let's simplify as you suggested: the only restriction to use manual training on a skill is to have it already trained it to level 1. We just have to be careful of not giving it any strategical use. It needs to stay an interface convenience, not a way to avoid hunger issues or save up on amnesia scrolls for example. — galehar 2011-05-06 10:10

For what it's worth, I find that the hunger cost of victory-dancing a magic school isn't in the spell hunger, it's in the time spent resting after you've emptied your mana pool, which can be a significant factor even if the spell itself costs no nutrition to cast (especially when you need to empty your mana pool several times over before your experience pool is completely worked off). However, it'd be really annoying to have a hunger cost attached to the passive skill training system, because how much you value your satiation varies a lot depending on subtle factors and it'd be a royal pain to be turning it on and off all the time to make sure you don't starve/waste permafood. A good balance of accuracy and convenience might be to have magic training consume no additional nutrition, but be disabled while you're hungry or worse, since you wouldn't feel safe victory-dancing in that circumstance anyway. Unless the system allocates experience in such a way that this would totally prevent you from benefiting from any monsters you killed while hungry, as you'd often kill a monster, eat it, and then victory dance. — Sjohara 2011-05-13 06:44

Why emulate current training restrictions and costs at all? They add nothing interesting to the game, and doing so would needlessly complicate the new training system. Imagine you are a new player and you will immediately see why this would be horrible design. I prefer to look at it this way: this change should not be about closely emulating the convoluted old training system, it should be about creating a new, better and simpler one. You should be able to assign your experience wherever you want, without restrictions or cost. Not the manual mode but the automated training should be considered an interface convenience (it automatically trains the skills you use). Nothing interesting would be lost by removing the cost of victory dancing. Food cost can be balanced by reducing chunk nutrition. Restrictions are not needed because there is a large opportunity cost to putting exp into a skill you cant use. The single exception to this rule might be training spell schools with no spellcasting skill. I also don't see the sense in having a hidden xp pool for every skill to delay training after killing an enemy. Having instant training gives the player valuable feedback about the exp he just earned, feedback that is otherwise gone without the xp pool. — Galefury 2011-06-13 17:22

I strongly agree. Training spell schools with no spellcasting skill isn't a problem, either. A skill being at level 0 doesn't mean you are absolutely incapable of using it; you can still evade attacks with 0 Dodging, block attacks with 0 Shields, swing an axe with 0 Axes, etc. — minmay 2011-06-13 20:13
I completely agree with Galefury, the whole hunger/delay thing seems too convoluted and confusing. I can't see it being open to massive amounts of abuse, and even so, a ring of sustenance and good spellcasting means that the cost of victory dancing is negligible. I also think that the automatic format, while good, might seem 'unfair' to players, especially if it trained something they didn't want it too. At the moment its annoying if you train up something you don't want to (throwing/evocations/spellcasting) but it can be turned off straight away, but if it was automatic (even a very good system) it may seem, even if not the case, that xp was being spent on things you didn't want it to be, leading players to avoid using creative strategies to get out of trouble in case it used up a lot of CP (again, even if this was not true, it may be perceived this way). I also don't see why everything needs to be behind the scenes, I quite like seeing the XP pool, its quite fulfilling to kill a special and see a massive boost in xp, and I like knowing how much I've got to 'spend' if you get what I mean, although I do like the idea of cutting down on Victory Dancing. — Bim 2011-06-17 22:16
The automatic system will still allow you to disable skills you don't want to train. — galehar 2011-06-21 13:46

Possible Alternative

Has anyone put any thought into a system based on meditating on what the player has learned? It seems to me that many of these balance issues can be solved, and the goal met(I completely agree that the victory dance needs to go away…), by mimicing the current system in a way that removes the bore-work from it… Kinda like auto-explore. The thought I've had is to handle skill growth in two distinct ways…

For automatic skill gain, through use, a number of points are accumulated per level and are automatically applied to skills being used. I'm thinking this should be roughly 25%(Could easily be 10-50% for balancing) of experience gained. These points would be applied actively as you use skills, in the same general way as the current system. This growth should also be hidden(a.k.a. no visible exp pool), to follow the philosophy of clarity. If it's not seen, it'll be harder to manipulate, while still having a natural feel to it. It's clear in that, if you're using it, it will grow. (I'd think this should be regardless of skill growth settings…)

For manual skill gain… We leave the remainder of XP to the player. Use the current skill menu for manual growth, but make it a command. Allow the player to set growth priorities, then proceed with a practice command that automates the victory dance. The player sets the growth rate for skills they want to practice/meditate upon/etc…, and a number of turns are spent while the character develops their talents. This should also be influenced through the actual usage of skills. As the player applies skills in REAL situations(a.k.a. the action didn't fizzle, hit nothing, worked as it should), the trainable cap for that particular skill is increased. In this way, the character has to actively use the skill to manually train it, but they're left the choice to neglect it as well. The number of uses in relation to how many skill levels can be gained should be significantly less than the current requirements are… Otherwise we'd end up with another form of time wasting dance to prep skills for leveling.

Witha system like this, the general flow of skill development can be preserved, while removing the victory dance grind. The basic gist would be that, as the player gains exp, some is automatically applied to what's been used… The rest is pooled and can be used for a “training session” action at a later point to build skills that have been put to use, at the player's whim.

Does this sound reasonable and feasible? I have more thoughts on the technical implementation if anyone cares to hear them. I'd code it out, too, if it comes down to it. — Wolfe 2011-07-23 15:09

Are you aware that the new training system has already been implemented, is currently being tested in trunk and will be released in 0.9 in a couple of weeks? Your proposal seems needlessly complicated. And by giving the player the control over only half the XP, it encourages him to dance the other half if he wants to direct as much XP as possible in a specific skill. — galehar 2011-07-24 10:46
I don't exactly recall if this topic had been marked done when I added this, but it's meant to be in response to possible problems I could foresee with the changes outlined above(I haven't been playing 0.9, but I've read about a few of those things over on the forum)… And, my apologies, I didn't effectively explain the concept.

Here's an abstract example, the numbers are made up for simplicity's sake:

We're keeping track of skill exercising whether our player has exp on hand or not. Our player has excercised Short Blades 60 times, and Dodging 40 times, since the last time they gained experience points. They stumble across a Three-headed Rabid Chihuahua, kill it, and earn 5000 exp.

Phase 1, Automatic distribution(@20% of earned exp, 1000 exp to distribute):

Short Blades at Level 8.0 gains 600 points(60/100 * 1000) and increases by 0.5 to 8.5. Dodging at level 5.0 gains 400 points(40/100 * 1000) and increases by 1.0 to 6.0.

Phase 2, Manual distribution(Remaining 80%, 4000 exp available):

Now our player pops into the skills screen, and applies the rest of the pool as they see fit.

We'll say the player has gained 4 levels total now for Short Blades skill through automatic distribution. We've been keeping track of this in the background. We inform the player that they can increase Short Blades up to level 12 total now. The player opts to dump 3200 or so points into it, raising it to level 11. Then they put the remainder in the Traps and Doors skill they already had 2 “auto-levels” in from earlier, and it ends up at/around level 5.

The various rates would need to be balanced out to be on par with the previous system's rate of skill progression, of course. But, this method would make level 0 skills an non-issue, since the automatic portion would cover that. It also preserves the need to actually use skills to level them up, and make things much more natural in the progress. The skills you've been using will go up some on their own, as they logically should, and the tedium of victory dancing is traded off for letting the player crank up the skills they want to focus into with a few button presses. — Wolfe 2011-07-26 19:26

Logged in as: Anonymous (VIEWER)
dcss/brainstorm/skills/training.txt · Last modified: 2011-12-22 00:26 by XuaXua
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki