View difference between Paste ID: vgMPUxWJ and wfS43BJY
SHOW: | | - or go back to the newest paste.
1
#include "zcommon.acs"
2
3
int TID = 5; // unique tag of thing which is center of sound
4
int MAX = 800.00; // distance from thing when volume should be 0%
5
int MIN = 400.00; // distance from thing when volume should be MAX_VOL
6
int MAX_VOL = 1.0; // 0.0 -> 1.0
7
8
9
int CHAN = 7;
10
11
// this func copied off zdoom wiki
12
function int fdistance (int tid1, int tid2)
13
{
14
	int len;
15
	int y = getactory(tid1) - getactory(tid2);
16
	int x = getactorx(tid1) - getactorx(tid2);
17
	int z = getactorz(tid1) - getactorz(tid2);
18
19
	int ang = vectorangle(x,y);
20
	if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(y, sin(ang));
21
	else len = fixeddiv(x, cos(ang));
22
23
	ang = vectorangle(len, z);
24
	if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(z, sin(ang));
25
	else len = fixeddiv(len, cos(ang));
26
27
	return len;
28
}
29
30
31
script 123 ENTER
32
{
33
34
	int range = MAX - MIN;
35
36
	int newVol;
37
38
	PlaySound (TID, "song", CHAN, 0.001, TRUE, ATTN_NONE); // 0.0 vol at start causes sound to never work
39
40
    while (TRUE)
41
    {
42
43
        int distance = fdistance(0, 5);
44
45
		if (distance >= MAX) {
46
			newVol = 0.0;
47
		} else {
48
			if (distance <= MIN) {
49
				newVol = MAX_VOL;
50
			} else {
51
52
				int distToMax = max - distance;
53
54
				HudMessage(s:"Dist to max radius: ", i:distToMax >> 16;
55
					       HUDMSG_PLAIN, 1, CR_GRAY, 0.01, 0.4, 0.1);
56
57
58
				newVol = FixedMul(FixedDiv(distToMax, range), MAX_VOL);
59
60
			}
61
62
		}
63
64
		SoundVolume(TID, CHAN, newVol);
65
66
		HudMessage(s:"Dist to center: ", i:distance >> 16;
67
					   HUDMSG_PLAIN, 2, CR_GRAY, 0.01, 0.45, 0.1);
68
69
		HudMessage(s:"Volume: ", f:newVol;
70
					   HUDMSG_PLAIN, 3, CR_GRAY, 0.01, 0.5, 0.1);
71
72
        Delay (1);
73
74
75
76
    }
77
}