Skip to content

Instantly share code, notes, and snippets.

@bicobus
Last active July 4, 2017 22:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bicobus/df9fc76b59c250d4765cb475c48d9c91 to your computer and use it in GitHub Desktop.
Save bicobus/df9fc76b59c250d4765cb475c48d9c91 to your computer and use it in GitHub Desktop.
Exploration of a proper gag formula
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))
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