In combat_phrase.cpp, a combat action results in a "miss" if the function testPhraseSuccess (lines 1422-1465) returns a value of false. This happens if the call to getSuccessFactor returns a value <= 0.0.
The code that Jarnys discussed is the function getSuccessFactor (lines 322-351) in phrase_utilities_functions.cpp, which is called by testPhraseSuccess. Basically, if the action is not determined to be a success or partial success, then it will result in a miss.
Perhaps someone that is better at reading C++ code than me can figure out how the probabilities of success and partial success are determined. :)
The code that Jarnys discussed is the function getSuccessFactor (lines 322-351) in phrase_utilities_functions.cpp, which is called by testPhraseSuccess. Basically, if the action is not determined to be a success or partial success, then it will result in a miss.
Perhaps someone that is better at reading C++ code than me can figure out how the probabilities of success and partial success are determined. :)