Choose the Most Dramatic Outcome
R, 86 bytes



function(a,b,d=a*(1-a))runif(1)&lt;="if"(d,"if"(d&gt;999e-6,a,1-round(a)),"if"(b,.9-.8*a,a))


Try it online!

a is P' and b is 1 or 0 for "in the climax" or not. 

If a is 0 or 1, then d will be 0, in which case if b is 0 just return a, otherwise .9 minus .8*a.

Otherwise if a is not near 0 or 1, d will be "far" from 0 so return a. Otherwise 1-round(a) will take a to the "opposite" 0 or 1.

Then see if a random selection from [0,1] is less than or equal to the resulting probability. 

The link does a little simulation for all the possible scenarios to demonstrate that it all seems to work.