[nexuiz-commits] r6521 - trunk/data/qcsrc/client
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Fri Apr 17 07:05:33 EDT 2009
Author: div0
Date: 2009-04-17 07:05:31 -0400 (Fri, 17 Apr 2009)
New Revision: 6521
Modified:
trunk/data/qcsrc/client/bgmscript.qc
Log:
fix behaviour on "cd stop" etc. commands
Modified: trunk/data/qcsrc/client/bgmscript.qc
===================================================================
--- trunk/data/qcsrc/client/bgmscript.qc 2009-04-17 10:22:19 UTC (rev 6520)
+++ trunk/data/qcsrc/client/bgmscript.qc 2009-04-17 11:05:31 UTC (rev 6521)
@@ -1,3 +1,5 @@
+#define CONSTANT_SPEED_DECAY
+
float bgmscriptbuf;
float bgmscriptbufsize;
float bgmscriptbufloaded;
@@ -4,11 +6,10 @@
.float bgmscriptline;
.float bgmscriptline0;
-.float bgmscriptvelocity;
+.float bgmscriptvolume;
.float bgmscripttime;
.float bgmscriptstate;
.float bgmscriptstatetime;
-.float bgmscriptdelta;
float GetAttackDecaySustainAmplitude(float a, float d, float s, float t)
{
@@ -130,16 +131,44 @@
e.bgmscriptline = e.bgmscriptline0 = i;
if(i >= bgmscriptbufsize)
{
- print("func_pointparticles: bgmscript does not define ", e.bgmscript, "\n");
+ print("ERROR: bgmscript does not define ", e.bgmscript, "\n");
e.bgmscript = "";
}
}
}
+float GetCurrentAmplitude(entity e, float trel)
+{
+ if(e.bgmscriptstate)
+ return GetAttackDecaySustainAmplitude(e.bgmscriptattack, e.bgmscriptdecay, e.bgmscriptsustain, trel) * e.bgmscriptvolume;
+ else
+ {
+#ifdef CONSTANT_SPEED_DECAY
+ return GetReleaseAmplitude(e.bgmscriptdecay, e.bgmscriptsustain * e.bgmscriptvolume, e.bgmscriptrelease, trel);
+#else
+ return GetReleaseAmplitude(e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscriptrelease, trel) * e.bgmscriptvolume;
+#endif
+ }
+}
+
+float GetTimeForAmplitude(entity e, float amp)
+{
+ if(e.bgmscriptstate)
+ return GetAttackTime(e.bgmscriptattack, amp / e.bgmscriptvolume);
+ else
+ {
+#ifdef CONSTANT_SPEED_DECAY
+ return GetReleaseTime(e.bgmscriptdecay, e.bgmscriptsustain * e.bgmscriptvolume, e.bgmscriptrelease, amp);
+#else
+ return GetReleaseTime(e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscriptrelease, amp / e.bgmscriptvolume);
+#endif
+ }
+}
+
float BGMScript(entity e)
{
float t;
- float amp;
+ float amp, vel;
if(e.bgmscript == "")
return 1;
@@ -150,11 +179,21 @@
e.just_toggled = FALSE;
t = gettime(GETTIME_CDTRACK);
+ if(t < 0)
+ return -1;
+
if(t < e.bgmscripttime)
{
+ //print("reset ", e.bgmscript, "\n");
+ amp = GetCurrentAmplitude(e, e.bgmscripttime - e.bgmscriptstatetime + drawframetime);
+
e.bgmscriptline = e.bgmscriptline0;
- e.bgmscripttime = 0;
- e.bgmscriptstatetime = t - drawframetime - e.bgmscriptdelta; // FIXME this causes a tiny hitch
+ e.bgmscripttime = t;
+
+ // treat this as a stop event for all notes, to prevent sticking keys
+ e.bgmscriptstate = FALSE;
+ e.bgmscriptvolume = 1;
+ e.bgmscriptstatetime = t - GetTimeForAmplitude(e, amp);
}
// find the CURRENT line
@@ -173,36 +212,23 @@
e.bgmscriptline += 1;
e.bgmscripttime = stof(argv(1));
- if(e.bgmscriptstate)
- amp = GetAttackDecaySustainAmplitude(e.bgmscriptattack, e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscripttime - e.bgmscriptstatetime) * e.bgmscriptvelocity;
- else
- amp = GetReleaseAmplitude(e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscriptrelease, e.bgmscripttime - e.bgmscriptstatetime);
+ amp = GetCurrentAmplitude(e, e.bgmscripttime - e.bgmscriptstatetime);
// time code reached!
- e.bgmscriptvelocity = stof(argv(2));
- if(e.bgmscriptvelocity > 0)
+ vel = stof(argv(2));
+ if(vel > 0)
+ {
e.just_toggled = e.bgmscriptstate = TRUE;
+ e.bgmscriptvolume = vel;
+ }
else
e.just_toggled = e.bgmscriptstate = FALSE;
- if(e.bgmscriptstate)
- e.bgmscriptstatetime = e.bgmscripttime - GetAttackTime(e.bgmscriptattack, amp / e.bgmscriptvelocity);
- else
- e.bgmscriptstatetime = e.bgmscripttime - GetReleaseTime(e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscriptrelease, amp);
+ e.bgmscriptstatetime = e.bgmscripttime - GetTimeForAmplitude(e, amp);
}
}
- if(e.bgmscriptstate)
- {
- // attack, decay or sustain
- e.bgmscriptdelta = t - e.bgmscriptstatetime;
- return GetAttackDecaySustainAmplitude(e.bgmscriptattack, e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscriptdelta) * e.bgmscriptvelocity;
- }
- else
- {
- // release
- e.bgmscriptdelta = t - e.bgmscriptstatetime;
- return GetReleaseAmplitude(e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscriptrelease, self.bgmscriptdelta);
- }
+ e.bgmscripttime = t;
+ return GetCurrentAmplitude(e, t - e.bgmscriptstatetime);
}
More information about the nexuiz-commits
mailing list