1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
// Evol functions.
// Authors:
// 4144
// Reid
// Description:
// Math functions
// abs(<int>)
// returns the absolute value of the passed integer
function script abs {
.@n = getarg(0);
return .@n >= 0 ? .@n : -.@n;
}
// lognbaselvl({<multiplicator>{, <min value>}})
// returns BaseLevel * logn (BaseLevel * alpha).
function script lognbaselvl {
.@alpha = getarg(0, 1);
.@min = getarg(1, 1);
.@ret = 0;
.@pc_level = BaseLevel * .@alpha;
while (.@pc_level >>= 1)
{
++.@ret;
}
.@ret *= BaseLevel;
if (.@ret <= .@min)
{
.@ret = .@min;
}
return .@ret;
}
// log2(<int>)
// returns the base 2 logarithm of the passed integer
// Note: Negative values are first converted to positive.
// For 0, -1 is returned instead
// (as if passed value == 0.5, but that is not possible for integers).
function script log2 {
.@v = abs(getarg(0));
.@i = -1;
while (.@v > 0) {
.@i += 1;
.@v >>= 1;
}
return .@i;
}
// result is: lower < target <= higher
// is_between ( lower, higher, target)
function script is_between {
.@val=getarg(2);
.@min=getarg(0);
.@max=getarg(1);
return (.@min < .@val && .@val <= .@max);
}
// result is: lower < target <= higher
// is_between ( lower, target, higher)
function script is_between2 {
.@min=getarg(0);
.@val=getarg(1);
.@max=getarg(2);
return (.@min < .@val && .@val <= .@max);
}
// forces the equation: lower <= target <= higher.
// Note it still works if higher and target values are swapped.
// limit ( lower, target, higher)
function script limit {
return max(getarg(0), min(getarg(1), getarg(2)));
}
// result is the ponderate average.
// ponderate_avg ( arg1, sub1, arg2, sub2)
function script ponderate_avg {
.@a1=getarg(0);
.@s1=getarg(1);
.@a2=getarg(2);
.@s2=getarg(3);
.@h1=.@a1*.@s1;
.@h2=.@a2*.@s2;
.@dd=.@s1+.@s2;
return (.@h1+.@h2)/.@dd;
}
|