CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
9.95k stars 4.08k forks source link

Rework weakpoint proficiency #74426

Open osuphobia opened 3 weeks ago

osuphobia commented 3 weeks ago

Is your feature request related to a problem? Please describe.

In #74390 , @Venera3 pointed out that bestial mutants should not have wp learn speed bonus from dissection. After diving into the codes, I found out that the way we get weakpoint prof to improve is just wierd now. Hit a monster gives you 2 second, kill a monster gives you 1 minute, and finishing the job of dissection gives you 30 minute, to the progress. The numbers are fixed and the actual time and effort used is not considered, the progress of learning weakpoint proficiencies is not affected by any stats and buffs, except for your focus right now. The prof_boost factor from my new PR does affect it, but it's for all profs, and other things are just fine, only weakpoint profs are determined by these magic numbers.

It turns out that issue #49979 was solved in #60711 , so this comment seems to be outdated and the function can be changed. https://github.com/CleverRaven/Cataclysm-DDA/blob/23e26e777d3651edc7e1e9aa7fe0771ad00511e2/src/weakpoint.cpp#L151-L163

I will make another PR to solve it, as it's not limited to things implemented in the PR above, and I don't want to make the PR too complicated.

Solution you would like.

For weakpoint_families::practice_hit, increase the base xp to rng( 3, 6 ) second, earn an extra second for every point of perception higher than 8, and gain double xp with critical hit. For weakpoint_families::practice_kill, increase the base xp to rng( 60, 120 ) second, earn an extra minute for every four points of perception higher than 8, and gain double xp when killing with critical hit (). And make xp from weakpoint_families::practice_dissect relies on "how good the character is at dissecting" vs "how hard the task is". Give bestial mutants extra xp from hitting and killing monsters, but decrease xp gaining from dissecting.

(The result of git diff is a mess now, temporarily removed it.)

Describe alternatives you have considered.

I just ran out of idea, do you guys have any other plan?

Additional context

No response

IdleSol commented 3 weeks ago

Game version 2024-06-04-0517. Time to learn one weakness:

The dissection of a single zombie. It takes 12 hours to learn. https://github.com/CleverRaven/Cataclysm-DDA/blob/62b7550aeed64296ab33e8900ebffe24a2f001e9/data/json/proficiencies/chemistry.json#L17 Tool: scalpel. Time to dissect 1 zombie: 52 / 43 minutes. (I have no idea what this time depends on and why it varies). If I'm not mistaken, I've met a variant of 39 minutes.

Progress (min) Progress/30 min (%) Number of autopsies to study Time spent
12 60 2.19% = 15.8 min / 30 min = 53% 100 / 2.19 = 46 * 52 min = 2392 min = 39.8 h
12 60 4.73% = 34.1 min / 30 min = 114% 100 / 4.73 = 22 * 52 min = 1144 min = 19 h
12 60 7.60% = 54.7 min / 30 min = 182% 100 / 7.60 = 14 * 52 min = 676 min = 11.3 h

Now let's look at learning through combat. +2 seconds per hit? And +60 seconds per kill?

If we're talking about combat, it's most likely a situation with low intelligence (pain penalty) and low focus (lol. 50 hits: focus 115 -> 69. another 50 hits (100 total): focus -> 44. This is assuming 10 in skills)

2 53% = 1.1 sec 60 53% = 31.8 sec

To learn the principles of biology through combat: 12 60 60 / 31.8 = ~ 1358 Lol you need to kill over a thousand zombies.

IdleSol commented 3 weeks ago

My suggestions:

  1. A critical hit is a hit to a weak point. Hence critical hits should have an additional bonus. (Or take into account only critical hits).
  2. Increase the values of learning progress through combat at least 10 times. That is +20...30 seconds per hit, +10 minutes per kill. Or even higher.
  3. Perception. Why not add a bonus for perception? The character observes the behavior of zombies and notices details that will help in the fight. Each turn, you can get a random progression in learning the weaknesses of monsters. Provided that the monster in question is in range of visibility.
    • First restriction: no more than 50% (or no limit).
    • Second restriction: if there are many monsters in the range of visibility, the progress goes only for one skill. Determined randomly, but has a bonus for the number of monsters (no more than ... monsters).
  4. Add a random perception bonus to autopsy.
  5. Realistically speaking. I don't really understand why we need to dissect a lot of corpses to study their structure? Just dissect one corpse and see how it works. From a game point of view. It's too fast a learning curve. Perhaps we could add recipes for turning monsters into anatomical aids that can then be studied for a while?
osuphobia commented 3 weeks ago

@IdleSol The ideas about critical hit and perception seems interesting and reasonable to me, I'll try to write some codes to accomplish these parts. For the rationale of learning wp profs by dissecting, Venera3 and me have a difference of opinion, maybe you need to hear explanation from them, as they are the boss.

IdleSol commented 3 weeks ago

Is it possible to make multiple independent experience pools for one prof?

The idea is as follows. There is a profession weak point monster XXX. It has several experience scales:

  1. Observation experience, fills up from observation and gives a bonus to dodge. Possibly displays a numerical value of speed (move_cost) and/or health.
  2. Autopsy Experience, which is filled from autopsy. Increases the autopsy speed (and butchering) of this monster and gives a small bonus to damage. Or slightly increases the crit chance.
  3. Three or four different experience pools for each damage type (bash, cut..). Filled from hits with the appropriate weapon. Gives a bonus to the corresponding damage type.

They are not dependent and can be adjusted separately. For example, watch for 5 minutes, autopsy 10 bodies, deal 100 critical hits with the corresponding weapon.

Or, are partially independent. So first you need to get 100% (or more than 90%) of autopsy experience to make experience for damage type available.

Then the survivor actions are: first observe the monster. Then lure one out and perform an autopsy. And after that go and kill them in packs.

It can also be done with a single experience scale, just by setting thresholds. But I do not really like this option. Observation gives experience up to 10% of learning, autopsy gives experience up to 90% of learning, and combat gives experience always.

osuphobia commented 3 weeks ago

That might be too complicated and hardly intuitive. I'd like to go with this plan: For practice_hit, increase the base xp to rng( 3, 6 ) second, have an extra second for every point of perception higher than 8, and gain double xp with critical hit. For practice_kill, increase the base xp to rng( 60, 120 ) second, have an extra minute for every four points of perception higher than 8, and gain double xp when killing with critical hit.

OK, so I managed to pass the info to monster::on_hit, and practice_hit worked as expected. But I have no idea how to pass it to kill_tracker::notify.

osuphobia commented 3 weeks ago
--- a/src/activity_handlers.cpp
+++ b/src/activity_handlers.cpp
     if( action == butcher_type::DISSECT ) {
         you.practice( skill_firstaid, std::max( 0, practice ), mt.size + std::min( tool_quality, 3 ) + 2 );
-        mt.families.practice_dissect( you );
+        int score = static_cast<int>( you.get_skill_level( skill_firstaid ) ) + std::min( tool_quality, 3 )
+                    + you.get_int();
+        score = mt.difficulty < 3 ? std::clamp( score - 5, 1, 2)
+                : mt.difficulty < 10 ? std::clamp( score - 10, 1, 4)
+                : mt.difficulty < 20 ? std::clamp( score - 15, 2, 6)
+                : mt.difficulty < 30 ? std::clamp( score - 20, 2, 8)
+                : mt.difficulty < 50 ? std::clamp( score - 25, 3, 10)
+                : std::clamp( score - 30, 3, 12);
+        mt.families.practice_dissect( you, score );
     }

--- a/src/weakpoint.cpp
+++ b/src/weakpoint.cpp
-bool weakpoint_families::practice_dissect( Character &learner ) const
+bool weakpoint_families::practice_dissect( Character &learner, int score,
+                                           const bool &ignore_focus ) const
 {
-    // Proficiency experience is no longer capped at 1000 seconds,
-    // but this still needs to be refactored, see #74426.
-    int progress = 1800;
-    // A work around to cut xp for predators to half of normals.
-    if( learner.has_flag( json_flag_PRED4 ) ) {
-        progress /= 8;
-    } else if( learner.has_flag( json_flag_PRED3 ) ) {
-        progress /= 6;
-    } else if( learner.has_flag( json_flag_PRED2 ) ) {
-        progress /= 4;
+    bool learned = false;
+    int progress = score;
+    for( const weakpoint_family &family : families ) {
+        if( learner.has_flag( json_flag_PRED2 ) ||
+            learner.has_flag( json_flag_PRED3 ) ||
+            learner.has_flag( json_flag_PRED4 ) ) {
+            score = progress / ( 2 * learner.enchantment_cache->modify_value(
+                    family.proficiency->prof_category(), 1.0 ) );
+            score = std::clamp( score, 0, 12 );
+            if( score = 0 ) {
+                break;
+            }
+        }
+        for( int i = 0; i < score; i++) {
+            learned |= family.practice( learner, time_duration::from_minutes( 5 ),
+                                        ignore_focus );
+        }
     }

In case you didn't see the codes about practice_dissect in my plan, let me explain them: Score = firstaid skill level + tool quality + int - 5/10/15/20/25/30( depends on the difficulty of monster) The xp gained from dissection = 5_minute * score The range of socre is ( 1/2/3, 2/4/6/8/10/12 ), and the min/max score also depends on the difficulty of monster.

Brambor commented 3 weeks ago
  1. I would give 5 (or even 10?) times the experience for critical, not just 2.
  2. Otherwise I do like the simple change.
  3. It is a weak point, not the complete erasure of a monster. I don't know how good the weak points are though.
  4. In Terraria, after killing 50 monsters you get a banner that improves your damage to and your defence from a monster.
  5. Maybe calculate how many kills you need (assuming some things) with the new system vs. the old. Then tweak the values so that you fully obtain the proficiency after killing 25, 50 or 100… monsters. Based on how strong the points are. I would calibrate the values to zombie weak point time.
  6. For practice_kill, increase the base xp to rng( 60, 120 ) second, have an extra minute for every four points of perception higher than 8

    • ~The perception is too strong when killing here, if we were going from the hits rng(3,6) + perception above 8 it should be + 22.2% per perception over 8.~ My bad, you have 25% already, you just said it different.
kevingranade commented 3 weeks ago

I need this to have a better design basis. Characterize how this works now. Explain why that's a problem. Suggest changes that mitigate those problems.

As it is your stated rationale is "if I throw a bunch of numbers at it, that's better"

osuphobia commented 3 weeks ago

I need this to have a better design basis. Characterize how this works now. Explain why that's a problem. Suggest changes that mitigate those problems.

As it is your stated rationale is "if I throw a bunch of numbers at it, that's better"

This one is not that much relevant to my rationale about #74285 and #74390 . https://github.com/CleverRaven/Cataclysm-DDA/blob/23e26e777d3651edc7e1e9aa7fe0771ad00511e2/src/weakpoint.cpp#L127-L163 Now, you can learn weakpoint proficiency by either hitting, killing, or dissecting a monster. As stated above, hitting gives you 2 seconds, killing gives you 1 minute, and finishing the job of dissection gives you 30 minutes to the progress. The progress will then be scaled by adjust_for_focus. The progress before scaling relies on fixed number, so they can't reflect how your activity was done actually.

So I want to make the ability, the actual effort and the result depandent. And my plan is:

For practice_hit, increase the base xp to rng( 3, 6 ) second, have an extra second for every point of perception higher than 8, and gain double xp with critical hit. For practice_kill, increase the base xp to rng( 60, 120 ) second, have an extra minute for every four points of perception higher than 8, and gain double xp when killing with critical hit. I can change critical hit to weakpoint hit if you think crit and weakpoint are completely seperate things, but that's not a big deal, and using dealt_dam.wp_hit is literally way more convenient here.

For practice_dissect, the formula is 5_minute * firstaid skill level + tool quality + int - 5/10/15/20/25/30( depends on the difficulty of monster), the progress gained now ranges from 5 minutes to 60 minutes. It reflects "how good the character is at dissecting" and "how hard the task is".

If you think that dissecting should be much more effective than combat for gaining xp, that's reasonable and I can adjust the numbers in my plan and keep the huge gap as it is. But that's another stuff, maybe more relevant to my PR. At least, it's dumb to just add 30 minutes to the progress for every single task.

kevingranade commented 3 weeks ago

You didn't answer my question, you're just reiterating what you want to happen, not why that's an improvement to the game.

Brambor commented 3 weeks ago

If my comment doesn't help, ignore it.

I need this to have a better design basis. Characterize how this works now. Explain why that's a problem.

In other words: You should explain the higher level thinking of how things are (thinking about why they are that way) and where you want them to be. You shouldn't explain the code and how are things implemented from the code perspective.

Just as a regular player who cannot see the code and stumbles upon something weird.

Only after that is established:

Suggest changes that mitigate those problems.

Talk about the code. You already did this part.

If my comment doesn't help, ignore it.

IdleSol commented 3 weeks ago

My personal opinion.

A lot of it depends on the specific numbers. But this change could give:

  1. Strengthening the alternative way of learning this prof. Not only spend n hours dissecting corpses. But also learn weaknesses directly in combat. (At the moment, it takes too much time. 1000+ kills to learn the principles of biology, followed by a bunch of other profs, is a lot. It's easier to kill 10 monsters and do an autopsy on them.)

  2. Amplifying the effects of other character parameters. Now, if you want to learn faster, take maximum intelligence. And watch the focus. Adding perception as an alternative source of experience for learning these profs. Actually adds an alternative. Maybe not as strong as a commensurate intelligence value, but an alternative. (But one has to look at specific numbers and implementation).

NetSysFire commented 3 weeks ago

I agree that alternative ways of learning weakpoints should be buffed and that it is currently much too slow. Even pulping the corpse should give you some small progress.

osuphobia commented 3 weeks ago

You didn't answer my question, you're just reiterating what you want to happen, not why that's an improvement to the game.

The problems of current system are:

First, the formula is not reflecting the abilities of the character. As a surgeon or as an average refugee with a high school degree, whether you did a "delicate surgical operation" or just cut the corpose with a crude knife, and no matter how complicated the structure of the zed is, there is no difference on the xp gained from dissection. That's why I changed the formula about dissection and involved first aid skill, tool, int, and the difficulty of monster.

Secondly, what does the 30 minute really mean? To learn half of the wp profs, you need to first get the proficiency Principles of Biology. And it's NOT a wp prof, but applied science. Then what kind of knowledge are we getting, just by cutting some corpse of zeds? As you said, we are not doing some research, right?

And last but not least, what on earth should "weakpoint proficiency" reflect? I just saw your opinion on discord, that dissection should be even more efficient, like we only need to cut one zed or two to get the prof(s) of similar zeds. From a player POV that would be a change welcomed, but again how can your character learn things like that, especially when they are barely amateurs of all the relevant areas? I always think that the idea of surgeon knowing how to effectively hurt and kill things is just a myth, but even if we assume that's real, there are years of efforts learning theoretical knowledges and tons of time practicing behind. And that's only for the knowledges about human beings. If you say that, the effort needed for surgeon is not the same as finding a weakpoint, as we only need to know some basic, maybe obvious things, then why hitting and killing zeds directly are incompetent? It's a gap like 10 dissections vs more than 1000 kills right now, and if you make it 1 vs 1000, that would be something really funny: after hitting zeds for ten thousand times and killing them thousand of times, you are still totally ignorance on how to hit their weakpoints (you only get rid of the penalty and get the bonus when the progress reaches 100% right now)!

All in all, weakpoint proficiency should reflect both theoretical and practical knowledges IMO. You may find places suspicious while dissecting a corpse, but somewhere easy to cut in the flesh is not necessarily a weakpoint when it's alive, especially with the supernatural vitality of the zeds from blob. On the other hand, if you managed to perform a deadly stroke to a zed, it's natural that you have a chance to remember where you hit and the haptic feedback of it, and try to repeat it in later combats.

osuphobia commented 3 weeks ago

72450

Oh, I just missed this discussion.

osuphobia commented 3 weeks ago

So, if we are to split weakpoint proficiencies to two kind of things, and nobody has set out to do it yet, then how about do it like this:

  1. For the exsiting wp profs, no longer require biology as a prereq, and rebalance xp gained from combat and dissection. Rename them so players will no longer think they are knowledges of anatomy. Basicly what Erk said in https://github.com/CleverRaven/Cataclysm-DDA/issues/72450. Oh, and Physiology should also be moved to applied science, it ought not to be a wp prof.
  2. For default_weakpoint_bonus/default_weakpoint_penalty, there are only two states, known or unknow. Make it the same as craft profs, by decreasing penalties along with the progress of getting the prof. Then starting to get bonus when the progress reaches certain level. I just found out that it only needs several lines to do this.
  3. Then add a couple of new profs. They could be descendents of Principles of Biology/Physiology, should have several stages, and will give you a speed boost on getting relevant wp profs. Like you can learn Fungaloid basic/Fungaloid detailed wp faster when you have Mycology knowledges. The speed boost thing can be obtained by the infrastructure I want to add in #74390.
  4. The process of dissection can be more lore friendly, now you'll need pen and paper (or e-ink tablet PC etc) to record your progress. Maybe add them to your diary? A new page "Zedex" to record all these post-cataclysm critters you have met and dissected.
osuphobia commented 3 weeks ago

Maybe other 3 need more discussion, but I think part 2 can be applied very quickly. Just something like this:

diff --git a/src/weakpoint.cpp b/src/weakpoint.cpp
index 356e97d791..77ffc60c12 100644
--- a/src/weakpoint.cpp
+++ b/src/weakpoint.cpp
@@ -102,9 +102,17 @@ float Character::throw_weakpoint_skill() const

 float weakpoint_family::modifier( const Character &attacker ) const
 {
-    return attacker.has_proficiency( proficiency )
-           ? bonus.value_or( proficiency.obj().default_weakpoint_bonus() )
-           : penalty.value_or( proficiency.obj().default_weakpoint_penalty() );
+    float weakpoint_bonus = bonus.value_or( proficiency.obj().default_weakpoint_bonus() );
+    float weakpoint_penalty = penalty.value_or( proficiency.obj().default_weakpoint_penalty() );
+    float pct = attacker.get_proficiency_practice( proficiency );
+
+    return weakpoint_bonus * pct + weakpoint_penalty * ( 1.00f - pct );
 }
IdleSol commented 3 weeks ago

So, if we are to split weakpoint proficiencies to two kind of things, and nobody has set out to do it yet, then how about do it like this:

Point 1 and 3. I don't like these points.

We're excluding anatomy/biology/whatever from the prerequisites to learn weaknesses. There's logic in that, I don't need to know how the body works to spot a weakness... by experimenting with lots of punches.

And we add anatomy/biology/whatever as a means to speed up the learning of weaknesses. There's a logic to that too. If I know how an organism works, then I know how to hurt it.

But how is that anatomy/biology/whatever going to be learned? You need to dissect the organism again. And the whole difference is whether the study goes in parallel or sequentially. So like now you study the principles of biology, after which you study the weak points. Or you study them simultaneously. And most likely you'll learn the weak points before you learn biology. Yeah, it'll just be one weak point. And biology will work for all subsequent weak points. But fundamentally nothing will change.

My personal opinion. It's better to leave it as it is now. Biology/anatomy opens access to weak points. Human biology to zombie weak points. Mushroom to mushrooms and so on. And also speeds up autopsy, thus reducing the time to study weak points.

Point 2. I agree. There should be two states. But I'm against a smooth change and transitioning a penalty into a bonus. I'm generally in favor of keeping the difference between the two to a minimum. Provided that the current system is maintained, in terms of armor reduction.

osuphobia commented 3 weeks ago

But fundamentally nothing will change.

One plan is, heavily decrease the amount needed for basic principles (like Kevin's idea, possibly just one), but for high level knowledges, if you skill and int etc are not high enough, make the process slower. And it's just for a small amonut of learning speed boost, like what Erk said, it's not even necessary.

Point 2. I agree.

Sorry, I'm not sure if it's the translator that misinterpreted your opinion. You are for or against my change?

IdleSol commented 3 weeks ago

Sorry, I'm not sure if it's the translator that misinterpreted your opinion. You are for or against my change?

That's what I was talking about:

For default_weakpoint_bonus/default_weakpoint_penalty, there are only two states, known or unknow. Make it the same as craft profs, by decreasing penalties along with the progress of getting the prof. Then starting to get bonus when the progress reaches certain level. I just found out that it only needs several lines to do this.

I agree with the part about the two states:

For default_weakpoint_bonus/default_weakpoint_penalty, there are only two states, known or unknow.

I don't like the next part. About the smooth bonus change, depending on the percentage of learning.

Make it the same as craft profs, by decreasing penalties along with the progress of getting the prof. Then starting to get bonus when the progress reaches certain level.

Because it implies a big difference between the starting point and the end point. Just to make that progress visible.

I was going to describe this in another post, where I would suggest a different version of the mechanics. (Or just my rambling thoughts, whichever one you like.)

The current implementation of weak points can be described as follows. “We'll reinforce enemies and give players a skill to learn that will cancel out that reinforcement.” Or in other words, we're making it harder to start and easier to play in the late game again.

How do weak points work? Correct me if I'm wrong. A weak point, if learned, reduces a monster's defense. And the bonus is applied to each hit.

In reality, it would be like this. I hit the head and you hit the head. I don't know that it's a weak point. Therefore, my opponent took no damage. You know it's a weak point. Therefore your opponent died.

That's why I think the bonus from weak points should be very small. So that a character with no knowledge of weak points can deal damage. Or change the bonuses from decreasing defense to increasing chance. Chance of critical hit, dodge or something else.

osuphobia commented 3 weeks ago

You did misunderstand how default_weakpoint_bonus/default_weakpoint_penalty works. It's not a direct bonus/penalty, but bonus/penalty to the chance of hitting a weakpoint.

IIRC, your relevant skill level, dex and per, relevant limb score, and total bonus/penalty. All of these will be calculated (in some quite complicated formulas), and we will compare the result to rng_float( 0.0f, 100.0f ) to see if we can hit one weakpoint. If we passed the check, select current weakpoint, and if not, try another weakpoint, untill all weakpoints of the monster have been visited once.

In addition, there are two different things: weakpoint families and weakpoint_sets. Weakpoint families are wp profs bind to the monster, and we get default_weakpoint_bonus/default_weakpoint_penalty for every wp. Weakpoint sets record the actual weakpoints of a monster, like abdomen, leg_joint, body_joint, etc. When we pass the check above, we got a chance to deal more damage and apply debuffs to the monster. The damage multiplier and effects are recorded in weakpoint_sets.

IdleSol commented 3 weeks ago

So I was wrong.

The general idea behind my “announced” proposal was to divide the weaknesses into two parts:

Where the first was responsible for the chance to damage the armor and then break it. The second was responsible for the chance to weaken the enemy: less action points, less speed, more bleeding, less chance to hit, and so on.

Armor would be independent of anatomy and learned in combat or through training. Anatomy, would be in the form of a tree, where the root: general anatomy of species XXX. And at the top would be the peculiarities of specific members of that species. Studied through autopsy.

Critical hit, in turn, would ignore the proficiency checks studied. Randomly hitting a weak spot.

kevingranade commented 3 weeks ago

Overall I'm somewhat sympathetic to the idea of making the progress toward gaining proficiencies from dissection dependent on character traits, but it's not at all clear to me that you're focusing on the right traits. As for greatly accelerating the progress toward gaining weak point proficiencies from actions in combat, that's a hard no. Instead, what seems to need to happen is to make more specialized and easier to obtain proficiencies that only deal with learning where enemy weak points are, these would still be predominately gained via dissection, but scaled to gaining the proficiency via one dissection of an eligible corpse, not many.

As for your proposal here: https://github.com/CleverRaven/Cataclysm-DDA/issues/74426#issuecomment-2162455132 the only thing that should be changed is adding the new (faster to obtain) weak point proficiencies and unhooking the biology/anatomy proficiencies from weak points (there are also complications like granting these new proficiencies if a character already has the medical proficiencies). With such a drastic change we shouldn't do multiple things at one time. Once that new thing is in place the overall flow of the system will be different and it's very likely to be the only change needed.

More detailed responses and rationales follow.

First, the formula is not reflecting the abilities of the character. As a surgeon or as an average refugee with a high school degree, whether you did a "delicate surgical operation" or just cut the corpose with a crude knife, and no matter how complicated the structure of the zed is, there is no difference on the xp gained from dissection.

I'm not sure there's enough nuance here for there to be that much variance in outcomes. Knife selection is pretty irrelevant, using the right knife is more about avoiding unwanted damage to tissue than anything else, and I'm not at all convinced that different creatures are meaningfully more or less complex. Even if they are, shouldn't that be scaled by how difficult the proficiency is to acquire rather than on the practice side? I'm not sure what your proposed formula is so I can't go into any more detail.

To learn half of the wp profs, you need to first get the proficiency Principles of Biology. And it's NOT a wp prof, but applied science. Then what kind of knowledge are we getting, just by cutting some corpse of zeds? As you said, we are not doing some research, right?

If we're talking about weak point proficiencies specifically, as I've already said those should stop being based on the medical proficiencies (as if you're studying for medical purposes) and have their own much easier to acquire weak point location proficiencies. The kind of knowledge you're acquiring is very specifically "where are the major organs and blood vessels that I can hit without being blocked by things like bones".

The next paragraph you're just repeating yourself so I'll answer the crux of the issue

then why hitting and killing zeds directly are incompetent?

Because if you hit or stab a target you get little to no feedback about what actually happened to them. Did they show pain? Well either they're immune to pain and no, or they're not and yes, they show effects of the attack being painful. So all hits are the same. How about the real dominant issue, bleeding? Well if you stab someone, or even more so hit them and cause internal damage, how do you know how much bleeding you inflicted with that hit? You don't really, you'd be able to see some amount of bleeding with a stab, but much of it is going to be hidden from you via internal bleeding, clothing, fur, etc, so you're not getting direct feedback from that either. When your opponent goes down, it's not necessarily because of some finishing blow, at the end of the fight the winner is already clear in a lot of cases you can just stop fighting and back away and your opponent is going to fall over from blood loss anyway, so how do you decide which if the attacks you made during that fight were the critical ones and which ones hardly did anything? The answer is, you have no way to tell unless you're following some weird approach where you hit each target over and over again in the same spot and keep track of how many hits it took when restricting yourself to attacking in certain places.

All in all, weakpoint proficiency should reflect both theoretical and practical knowledges IMO.

This can't work, if you say it's both, that means you can only ever do one or the other and it still works. The only way for it to be both is if you have one set of proficiencies for knowing where weak points are (those are the proficiencies we're talking about) and another for being good at making attacks, which is melee proficiencies and a completely different issue. That's actually how it works already.

somewhere easy to cut in the flesh is not necessarily a weakpoint when it's alive That is not a weak point, a weak point is somewhere that when hit bleeds a lot, that's more or less it. Side note, as it turns out nothing except cartilage, bone, and skin are meaningfully more resistant to being cut. Skin and cartlage are notably more cut resistant than fat or muscle or organs, bone is much, much, much more resistant, and everything else is about the same.

On the other hand, if you managed to perform a deadly stroke to a zed, it's natural that you have a chance to remember where you hit and the haptic feedback of it, and try to repeat it in later combats.

This is not how combat works. A deadly attack may or may not have involved a weak point, it can be deadly just from accumulation of wounds. The final hit might not be anything special at all. You can win a fight without hitting any particular weak point at all. A meaningful wound to more or less anywhere in the body is going to cause some bleeding, repeat several times or make big enough wounds and your opponent is going to bleed out. At the same time, a decisive strike that causes massive bleeding may or may not end the fight immediately, so you would never actually know it was the decisive strike.

Critical hit, in turn, would ignore the proficiency checks studied. Randomly hitting a weak spot.

Critical hits have nothing to do with weak points. A critical hit is "you got an extra extra solid/deep/effective hit" independent of where it landed. It is very likely that critical hits are going away as it makes little sense once we have weak points working properly.

osuphobia commented 3 weeks ago

Well, you are the boss, so if you say hard no to those things, I'll stop working on them.

I'm not sure what your proposed formula is so I can't go into any more detail.

--- a/src/activity_handlers.cpp
+++ b/src/activity_handlers.cpp
     if( action == butcher_type::DISSECT ) {
         you.practice( skill_firstaid, std::max( 0, practice ), mt.size + std::min( tool_quality, 3 ) + 2 );
-        mt.families.practice_dissect( you );
+        int score = static_cast<int>( you.get_skill_level( skill_firstaid ) ) + std::min( tool_quality, 3 )
+                    + you.get_int();
+        score = mt.difficulty < 3 ? std::clamp( score - 5, 1, 2)
+                : mt.difficulty < 10 ? std::clamp( score - 10, 1, 4)
+                : mt.difficulty < 20 ? std::clamp( score - 15, 2, 6)
+                : mt.difficulty < 30 ? std::clamp( score - 20, 2, 8)
+                : mt.difficulty < 50 ? std::clamp( score - 25, 3, 10)
+                : std::clamp( score - 30, 3, 12);
+        mt.families.practice_dissect( you, score );
     }

It's this part I posted above, but seems that it's against your standpoint.

kevingranade commented 3 weeks ago

Wow no, none of first aid, tool quality, and inteligence should have that much impact on how much you learn per dissection.

It's extremely difficult to figure out what you're trying to do from reading the code because of all the disjoint functions based on difficulty. At the end of the day trying to dissect a "more difficult" corpse is usually going to be better, and the exceptions are definitely not going to be obvious to the player.

Meanwhile the magnitude of change available (roughly 8x as much progress per dissection) based on difficulty and skills is way too big.

IdleSol commented 3 weeks ago

What if we used training (crafting menu) instead of dissection? Then it would be possible to set additional conditions.

As an example: The weak point of the zombie:

(*)Two options. Or one training session takes 1 hour and gives 1 hour of learning progress. Or one training session lasts several hours and gives 100% learning progress at once.

If desired, you could include the influence of all 4 parameters on the resulting progress or reduction of training time. As well as the influence of tools.

For example, the parameters of the character, counted relative to 8:

The same could be done with the quality of the basic autopsy tool. Relative to a scalpel with quality 3, you could add or subtract a few minutes per deviation.

But as I understand it, you want to remove the influence of parameters?

kevingranade commented 3 weeks ago

Why are you trying to make this so complicated when I already said the scope for weak point gain should be "dissect one corpse of the appropriate type, which should take about 20 minutes"?