Last active
July 4, 2017 22:34
-
-
Save bicobus/df9fc76b59c250d4765cb475c48d9c91 to your computer and use it in GitHub Desktop.
Exploration of a proper gag formula
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from random import randint | |
gag_skill = trials = successes = 0 # base starting values should be 0 | |
SPEECH = 25 # character's speech skill. | |
loops = 50 # For testing purpose | |
def skill_mod(): | |
""" | |
Increase gag skill by a percentage value derivated from the player's speech skills. | |
If base skill is 0, default it to 5 (could be customizable). | |
Base skill will always be lowered to 100 if above that value. | |
""" | |
global gag_skill, SPEECH | |
if 0 < gag_skill < 100: | |
gag_skill+= gag_skill*(SPEECH/100) | |
elif gag_skill == 0: | |
gag_skill = 5 | |
else: | |
gag_skill = 100 | |
def trial(): | |
""" | |
Compute the player's ability to challenge a talking event. | |
The nature of this function will naturally increase the chances of success | |
for each call. | |
If the skill of the player is maxed, the chances of passing the trial | |
naturally go down after each success, but by a slight margin and shouldn't | |
get under 100. | |
""" | |
global gag_skill, trials, successes, SPEECH, c | |
result = (gag_skill + ( (trials+SPEECH) / (successes+SPEECH) * 100)) / 2 | |
print("Challenge: {:<6}| player ability: {:.2f}".format(c, result)) | |
trials+=1 | |
return result | |
def gagTalk(challenge): | |
""" | |
Challenge is an integer between 1 and any other number. | |
The challenge is added to a random integer taken from 0 and 100. | |
The sum needs to be higher than the result of trial() to fail the task. | |
""" | |
global successes, c | |
c = (randint(0, 100) + challenge) /2 | |
if c > trial(): | |
return False | |
successes+=1 | |
skill_mod() | |
return True | |
data = [ | |
["Gag skill:", gag_skill], | |
["Trials:", trials], | |
["Successes:", successes], | |
["Speech:", SPEECH] | |
] | |
print("Formula is: (gag_skill + ( (trials+SPEECH) / (successes+SPEECH) * 100)) / 2") | |
print("Generating test samples:\n") | |
print("Base values are:") | |
for d in data: | |
print("{:<15}{}".format(*d, width=100)) | |
print() | |
print("Starting {} loops at maximum challenge...".format(loops)) | |
a=0 | |
while a < loops: | |
print("{:-<25}".format("Success!<")) if gagTalk(50) else print("{0:->25}".format(">Failure.")) | |
a+=1 | |
print() | |
data = [ | |
["Gag skill:", gag_skill], | |
["Trials:", trials], | |
["Successes:", successes], | |
["Speech:", SPEECH] | |
] | |
print("Modded values are:") | |
for d in data: | |
print("{:<15}{:.2f}".format(*d, width=100)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 loops with a gagTalk(50) | |
---- | |
Formula is: (base_skill + ( (trials+SPEECH) / (successes+SPEECH) * 100)) / 2 | |
Generating test samples: | |
Base values are: | |
Base skill: 0 | |
Trials: 0 | |
Successes: 0 | |
Speech: 25 | |
Starting 50 loops at maximum challenge... | |
Challenge: 55.5 | result percentage: 50.00 | |
---------------->Failure. | |
Challenge: 40.0 | result percentage: 52.00 | |
Success!<---------------- | |
Challenge: 63.5 | result percentage: 54.42 | |
---------------->Failure. | |
Challenge: 44.5 | result percentage: 56.35 | |
Success!<---------------- | |
Challenge: 65.0 | result percentage: 56.83 | |
---------------->Failure. | |
Challenge: 25.5 | result percentage: 58.68 | |
Success!<---------------- | |
Challenge: 50.5 | result percentage: 59.26 | |
Success!<---------------- | |
Challenge: 63.0 | result percentage: 60.06 | |
---------------->Failure. | |
Challenge: 71.0 | result percentage: 61.78 | |
---------------->Failure. | |
Challenge: 54.0 | result percentage: 63.50 | |
Success!<---------------- | |
Challenge: 55.0 | result percentage: 64.44 | |
Success!<---------------- | |
Challenge: 63.0 | result percentage: 65.69 | |
Success!<---------------- | |
Challenge: 33.5 | result percentage: 67.35 | |
Success!<---------------- | |
Challenge: 27.5 | result percentage: 69.50 | |
Success!<---------------- | |
Challenge: 70.5 | result percentage: 72.25 | |
Success!<---------------- | |
Challenge: 52.0 | result percentage: 75.77 | |
Success!<---------------- | |
Challenge: 59.5 | result percentage: 80.23 | |
Success!<---------------- | |
Challenge: 44.5 | result percentage: 85.86 | |
Success!<---------------- | |
Challenge: 60.0 | result percentage: 92.96 | |
Success!<---------------- | |
Challenge: 25.5 | result percentage: 101.88 | |
Success!<---------------- | |
Challenge: 70.0 | result percentage: 113.09 | |
Success!<---------------- | |
Challenge: 74.0 | result percentage: 106.10 | |
Success!<---------------- | |
Challenge: 53.5 | result percentage: 105.95 | |
Success!<---------------- | |
Challenge: 54.5 | result percentage: 105.81 | |
Success!<---------------- | |
Challenge: 59.5 | result percentage: 105.68 | |
Success!<---------------- | |
Challenge: 42.5 | result percentage: 105.56 | |
Success!<---------------- | |
Challenge: 69.5 | result percentage: 105.43 | |
Success!<---------------- | |
Challenge: 57.5 | result percentage: 105.32 | |
Success!<---------------- | |
Challenge: 71.0 | result percentage: 105.21 | |
Success!<---------------- | |
Challenge: 27.5 | result percentage: 105.10 | |
Success!<---------------- | |
Challenge: 70.5 | result percentage: 105.00 | |
Success!<---------------- | |
Challenge: 55.0 | result percentage: 104.90 | |
Success!<---------------- | |
Challenge: 28.5 | result percentage: 104.81 | |
Success!<---------------- | |
Challenge: 43.0 | result percentage: 104.72 | |
Success!<---------------- | |
Challenge: 49.0 | result percentage: 104.63 | |
Success!<---------------- | |
Challenge: 64.5 | result percentage: 104.55 | |
Success!<---------------- | |
Challenge: 33.0 | result percentage: 104.46 | |
Success!<---------------- | |
Challenge: 58.5 | result percentage: 104.39 | |
Success!<---------------- | |
Challenge: 36.5 | result percentage: 104.31 | |
Success!<---------------- | |
Challenge: 39.5 | result percentage: 104.24 | |
Success!<---------------- | |
Challenge: 68.5 | result percentage: 104.17 | |
Success!<---------------- | |
Challenge: 41.5 | result percentage: 104.10 | |
Success!<---------------- | |
Challenge: 38.5 | result percentage: 104.03 | |
Success!<---------------- | |
Challenge: 26.0 | result percentage: 103.97 | |
Success!<---------------- | |
Challenge: 46.5 | result percentage: 103.91 | |
Success!<---------------- | |
Challenge: 34.5 | result percentage: 103.85 | |
Success!<---------------- | |
Challenge: 49.5 | result percentage: 103.79 | |
Success!<---------------- | |
Challenge: 58.5 | result percentage: 103.73 | |
Success!<---------------- | |
Challenge: 45.5 | result percentage: 103.68 | |
Success!<---------------- | |
Challenge: 28.0 | result percentage: 103.62 | |
Success!<---------------- | |
Modded values are: | |
Base skill: 100.00 | |
Trials: 50.00 | |
Successes: 45.00 | |
Speech: 25.00 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment