I cleaned it up a bit but It's not pretty and could probably be optimized.
#3 & #8:
Code: Select all
;Author KuroiLight/[email protected]
;License MIT
#NoEnv
CoordMode, Mouse, Screen
;#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
Random,,%A_TickCount%
timer_on := false
return
GetWeightedRandom(varName, base, diff) {
static prior_base := {}
if(prior_base[varName] == "")
prior_base[varName] := base
Random, random_base, % (prior_base[varName] - diff), % (prior_base[varName] + diff)
next_random := (base + random_base) / 2
prior_base[varName] := next_random
return Round(next_random)
}
GetNoise(varName, rnd, every, tick_variance, spike_variance) {
static tickCounts := {}
if(tickCounts[varName] == "")
tickCounts[varName] := 0
tickCounts[varName] += 1
Random, every, % (every - tick_variance), % (every + tick_variance)
if(tickCounts[varName] > every) {
tickCounts[varName] := 0
return GetWeightedRandom(varName, rnd, spike_variance)
}
return rnd
}
F1::
if(timer_on) {
MouseMove, mx, my
} else {
MouseGetPos, mx, my
}
timer_on := !timer_on
SetTimer, main, 10
SetTimer, main, % (timer_on ? "On" : "Off")
return
main:
;without noise
; newX := GetWeightedRandom("X", mx, 25)
; newY := GetWeightedRandom("Y", my, 25)
;with noise
newX := GetNoise("X", GetWeightedRandom("X", mx, 100), 3, 2, 100)
newY := GetNoise("Y", GetWeightedRandom("Y", my, 100), 3, 2, 100)
ToolTip, % "Variance X=" . (mx - newX) . " Y=" . (my - newY), 0, 0, 1
MouseClick, Left, %newX%, %newY%, 1
return
#5 & #7 & #10
Code: Select all
;Author KuroiLight/[email protected]
;License MIT
#NoEnv
CoordMode, Mouse, Screen
;#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
Random,,%A_TickCount%
timer_on := false
return
AddSmoothing(varName, newVal) {
static prior_base := {}
if(prior_base[varName] == "")
prior_base[varName] := newVal
prior_base[varName] := (prior_base[varName] + newVal) / 2
return prior_base[varName]
}
AddSmoothingCenter(varName, newVal, base) {
static prior_base := {}
if(prior_base[varName] == "")
prior_base[varName] := newVal
Random, bias_chance, 1, 2
if(bias_chance > 1) {
prior_base[varName] := (prior_base[varName] + newVal) / 2
} else {
prior_base[varName] := (prior_base[varName] + newVal + base) / 3
}
return prior_base[varName]
}
TripleBoxRandom(base, max_variance) {
inner := (max_variance / 3)
outer := inner * 2
orbit := inner * 3
low_inner := (base - inner), high_inner := (base + inner)
low_outer := (base - outer), high_outer := (base + outer)
low_orbit := (base - orbit), high_orbit := (base + orbit)
Random, rng_base, %low_inner%, %high_inner%
;if(rng_base > (base + (inner / 2)) or rng_base < (base - (inner / 2))) {
Random, roll, 1, 2
if(roll > 1) {
Random, rng_base, %low_outer%, %high_outer%
;if(rng_base > (base + (outer / 2)) or rng_base < (base - (outer / 2))) {
Random, roll, 1, 2
if(roll > 1) {
Random, rng_base, %low_orbit%, %high_orbit%
}
;}
}
;}
return rng_base
}
F1::
if(timer_on) {
MouseMove, mx, my
} else {
MouseGetPos, mx, my
;init smoothers
AddSmoothing("newX", mx)
AddSmoothing("newY", my)
AddSmoothingCenter("newX", mx, mx)
AddSmoothingCenter("newY", my, my)
}
timer_on := !timer_on
SetTimer, main, 10
SetTimer, main, % (timer_on ? "On" : "Off")
return
main:
;TripleBoxGenerator
; newX := TripleBoxRandom(mx, 75)
; newY := TripleBoxRandom(my, 75)
;with prior value smoothing
newX := AddSmoothing("newX", TripleBoxRandom(mx, 200))
newY := AddSmoothing("newY", TripleBoxRandom(my, 200))
;with center value smoothing
; newX := AddSmoothingCenter("newX", TripleBoxRandom(mx, 200), mx)
; newY := AddSmoothingCenter("newY", TripleBoxRandom(my, 200), my)
ToolTip, % "Variance X=" . (mx - newX) . " Y=" . (my - newY), 0, 0, 1
MouseClick, Left, %newX%, %newY%, 1
return