]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge commit 'origin/master' into diabolik/ignisplayermodel
authorSahil Singhal <sahil@sahil-desktop.(none)>
Mon, 24 May 2010 21:07:24 +0000 (17:07 -0400)
committerSahil Singhal <sahil@sahil-desktop.(none)>
Mon, 24 May 2010 21:07:24 +0000 (17:07 -0400)
42 files changed:
defaultXonotic.cfg
physics10.cfg
physics11.cfg
physics151.cfg
physics151b.cfg
physics16rc1.cfg
physics20.cfg
physics25.cfg
physics26.cfg
physicsCPMA.cfg
physicsHavoc.cfg
physicsLeeStricklin.cfg
physicsLzd.cfg
physicsNoQWBunny.cfg
physicsQ.cfg
physicsQ2.cfg
physicsQ2a.cfg
physicsQ3.cfg
physicsQBF.cfg
physicsQBFplus.cfg
physicsSamual.cfg
physicsWarsow.cfg
physicsWarsowClassicBunny.cfg
physicsWarsowDev.cfg
physicsXPM.cfg
qcsrc/client/d [deleted file]
qcsrc/common/constants.qh
qcsrc/menu/anim/animation.c
qcsrc/menu/anim/animhost.c
qcsrc/menu/item/slider.c
qcsrc/menu/item/textslider.c
qcsrc/menu/xonotic/slider.c
qcsrc/menu/xonotic/slider_decibels.c
qcsrc/menu/xonotic/textslider.c
qcsrc/server/cl_physics.qc
qcsrc/server/defs.qh
qcsrc/server/g_world.qc
qcsrc/server/sv_main.qc
sound/weapons/fireball_fly.ogg [new file with mode: 0644]
sound/weapons/fireball_fly.wav [deleted file]
sound/weapons/fireball_fly2.ogg [new file with mode: 0644]
sound/weapons/fireball_fly2.wav [deleted file]

index 1f7f53522d153b78ee1dd9da61379d3907316c5a..6a01ba59a42f720e9328be40efbf5ebb21ed59ab 100644 (file)
@@ -1846,3 +1846,5 @@ set g_weaponreplace_tuba ""
 set g_weaponreplace_fireball ""
 set g_weaponreplace_seeker ""
 set sv_q3acompat_machineshotgunswap 0 "shorthand for swapping uzi and shotgun (for Q3A map compatibility in mapinfo files)"
+
+set g_movement_highspeed 1 "movement speed modification factor (only changes movement when above maxspeed)"
index 4d9a118b34054eaefa65f3d51a55d368faa25b65..16331779c3bc3678daf5b37be4d32614c7093314 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 8fba5746a6449e439c5c8cbe79c3530a64067fcd..1a7afbd5c5bf893ec66348f8125c17e844749a53 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 59cf1de9dd3c39e3331c2388c2c3deb8c68f361b..52f2536da2a85b5f9a022371451952e21ecc962f 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 6ab373ffaedf270e66f3132b3612168998c617bd..325e7f6623b4c895920e4943c3a07692813bb88a 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index e6926e4c8ad39c9bdd166d34814879865787a7a7..751e527df3f1ad914903bda55b8408e455c3e8cc 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 39d1e6af5e6ec9ea8cc0304c518a2e02eda92e24..cf3f9110ba9400c4691036baf5fb9b94942a2817 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.93
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 048d2bb061b5afbee95706b1800c744e6ff3a9b4..ed1a85446cea1f6d187f9327b9bcb6f35bd6835e 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index b28cb4f7a0975389ac2da2bbc23e73607c29dc3a..34ab3cf940c238601daea8ce0d9796306b035c86 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 4ee66f297bc16ad994597771f9bbbdc959d5142f..7c985bfd69052e64e54a02a194cdc5dce673cf13 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 0
 sv_aircontrol 150
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 1731b12d4b32b73c84e755283802a392ea1ec1f3..cc90edcecfcb9f09451cb0fc775ca847bf8231f7 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index c0a5e21a3ac18a4a2dbd778cd946d6bef07f5e0e..446da86abfb44aee6a55069d149cf3f05cb77467 100644 (file)
@@ -17,6 +17,7 @@ sv_airaccel_qw -0.93
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index d408285ea730d9592c40b784e0fc82be7f9aaabf..4a73e899387da62e3cabe570f60a7864d1b92de8 100644 (file)
@@ -17,6 +17,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 7622096a0b65dbde0db2416d51ae24e914568031..742df8d0e3a9c19170647849e432be71ae027c0e 100644 (file)
@@ -1,29 +1,30 @@
 // 2.0-2.4.2 physics minus QW-bunnyhopping-bug, faster onground accel, CPMA air control
 sv_gravity 800
 sv_maxspeed 400
-sv_maxairspeed 300
+sv_maxairspeed 400
 sv_stopspeed 100
-sv_accelerate 20
-sv_airaccelerate 8
+sv_accelerate 15
+sv_airaccelerate 1
 sv_friction 7
 edgefriction 1
 sv_stepheight 34
 sv_jumpvelocity 300
 sv_wateraccelerate -1
 sv_waterfriction -1
-sv_airaccel_sideways_friction -0.15
-sv_airaccel_qw -0.975
-sv_airstopaccelerate 0
-sv_airstrafeaccelerate 0
-sv_maxairstrafespeed 0
-sv_aircontrol 150
+sv_airaccel_sideways_friction -0.2
+sv_airaccel_qw -0.895
+sv_airstopaccelerate 2.5
+sv_airstrafeaccelerate 70
+sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw -0.98
+sv_aircontrol 125
 sv_aircontrol_power 2.5
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
 sv_warsowbunny_backtosideratio 0.8
 sv_friction_on_land 0
-sv_doublejump 1
-sv_jumpspeedcap_min 0
-sv_jumpspeedcap_max 1
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
index 343971ca1df1229a10f21486605c48efb9ef09ef..5839a6137796a36e93f392742bc621388606cc98 100644 (file)
@@ -17,6 +17,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index de8ff7239c7a23e5c1b10d256a082922ddd2f2cb..e6c1ea3eefae6269c791eb058e05ccbe82ef939b 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index ff08d0784f74edc5d310fe38715e06931c3899ff..03e4008dc8d898cce34fec23575a238b7a6e971e 100644 (file)
@@ -17,6 +17,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 716728e9aa64849b0176e9aeb798ef5677b1c202..37643ed9afb79619b380005bcffe38a0c4bb59ce 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 88e7e8f40e2e2dc5f932e21c4b43e39bfdda3181..8b677e6cd71ade18726037b6f631db95e7c83b80 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 7c5da3f5e281fdb2158864c4c22ca697e739424e..58b2a45d5a7e8887c2cd106b11bb5afab9f297fd 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.93
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 9a3f1e113c9dfc5cc5bcc380e85d65bc727ddb09..8d2fa30a050cb4ab2dd7f41b91f56fe2c5c01ee0 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.93
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index bc53f7a6764faf514828af8766f7f4b48ffd86bf..1c87870a1934e7b8500fb4ce4d0238709d90dc1e 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 9 // activates warsow movement mode
index 6c60724d2228d343f1bab5c886b2c9400296f215..e73204d662f2d3bf09e93baeb9b86b6486a737d6 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 0
 sv_aircontrol 150
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 324676d2ee587ccb6349ece0fec6a1f2ec21a596..f63f67e11110e3a87a561c5615f5a011e5d6d5d7 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 2
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 6 // activates warsow movement mode
index da81a24ee2a06a3537ee736bceb8dd130a346db4..1737f1aeaf163c44ea0d27b16df6d5c2c9c1aff8 100644 (file)
@@ -20,6 +20,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 1
 sv_aircontrol 150
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
diff --git a/qcsrc/client/d b/qcsrc/client/d
deleted file mode 100644 (file)
index d5a11c1..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- sbar.qc.BASE.4129.qc       2010-05-06 19:58:30.171990860 +0200
-+++ sbar.qc    2010-05-06 20:01:25.251979343 +0200
-@@ -3395,8 +3395,15 @@
-               rr = RACE_RECORD;
-       t = stof(db_get(ClientProgsDB, strcat(shortmapname, rr, "time")));
--      if(score && score < t || !t)
-+      if(score && (score < t || !t)) {
-               db_put(ClientProgsDB, strcat(shortmapname, rr, "time"), ftos(score));
-+              if(cvar("cl_autodemo_delete_keeprecords"))
-+              {
-+                      f = cvar("cl_autodemo_delete");
-+                      f &~= 1;
-+                      cvar_set("cl_autodemo_delete", ftos(f)); // don't delete demo with new record!
-+              }
-+      }
-       if(t != crecordtime_prev) {
-               crecordtime_prev = t;
index cdf92f0709035ad3a2dc012518ab84b06fe08db5..d747b70dbe44ea9da825aab2506a788ce1821a66 100644 (file)
@@ -279,6 +279,11 @@ const float STAT_NB_METERSTART = 45;
 const float STAT_SHOTORG = 46; // compressShotOrigin
 const float STAT_LEADLIMIT = 47;
 const float STAT_BULLETS_LOADED = 48;
+
+// see DP source, quakedef.h
+const float STAT_MOVEVARS_AIRSTRAFEACCEL_QW = 223;
+const float STAT_MOVEVARS_AIRACCEL_QW = 254;
+
 const float CTF_STATE_ATTACK = 1;
 const float CTF_STATE_DEFEND = 2;
 const float CTF_STATE_COMMANDER = 3;
index 1019fdacb3ec706b25c45b5734e7c081bcb85493..d6fb114c2c4a9c113ccaaa5cd7732a093679c03c 100644 (file)
@@ -106,6 +106,7 @@ void finishAnimAnimation(entity me)
 {
        me.value = me.delta + me.startValue;
        me.finished = TRUE;
+       me.setter(me.object, me.value);
 }
 
 void setterDummy(entity obj, float objValue)
index 1052e2a1bcb99e6b91306fcbc2bbe4833fa1a806..41a26d5e0dace443b32be76b912810c04d4e9a38 100644 (file)
@@ -2,8 +2,14 @@
 CLASS(AnimHost) EXTENDS(Object)
        METHOD(AnimHost, addAnim, void(entity, entity))
        METHOD(AnimHost, removeAnim, void(entity, entity))
+       METHOD(AnimHost, removeAllAnim, void(entity))
+       METHOD(AnimHost, removeObjAnim, void(entity, entity))
        METHOD(AnimHost, stopAllAnim, void(entity))
+       METHOD(AnimHost, stopObjAnim, void(entity, entity))
+       METHOD(AnimHost, resumeAllAnim, void(entity))
+       METHOD(AnimHost, resumeObjAnim, void(entity, entity))
        METHOD(AnimHost, finishAllAnim, void(entity))
+       METHOD(AnimHost, finishObjAnim, void(entity, entity))
        METHOD(AnimHost, tickAll, void(entity))
        ATTRIB(AnimHost, firstChild, entity, NULL)
        ATTRIB(AnimHost, lastChild, entity, NULL)
@@ -61,6 +67,31 @@ void removeAnimAnimHost(entity me, entity other)
                me.lastChild = p;
 }
 
+void removeAllAnimAnimHost(entity me)
+{
+       entity e, tmp;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               tmp = e;
+               e = tmp.prevSibling;
+               me.removeAnim(me, tmp);
+       }
+}
+
+void removeObjAnimAnimHost(entity me, entity obj)
+{
+       entity e, tmp;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               if (e.object == obj)
+               {
+                       tmp = e;
+                       e = tmp.prevSibling;
+                       me.removeAnim(me, tmp);
+               }
+       }
+}
+
 void stopAllAnimAnimHost(entity me)
 {
        entity e;
@@ -70,6 +101,39 @@ void stopAllAnimAnimHost(entity me)
        }
 }
 
+void stopObjAnimAnimHost(entity me, entity obj)
+{
+       entity e;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               if (e.object == obj)
+               {
+                       e.stopAnim(e);
+               }
+       }
+}
+
+void resumeAllAnimAnimHost(entity me)
+{
+       entity e;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               e.resumeAnim(e);
+       }
+}
+
+void resumeObjAnimAnimHost(entity me, entity obj)
+{
+       entity e;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               if (e.object == obj)
+               {
+                       e.resumeAnim(e);
+               }
+       }
+}
+
 void finishAllAnimAnimHost(entity me)
 {
        entity e, tmp;
@@ -78,7 +142,22 @@ void finishAllAnimAnimHost(entity me)
                tmp = e;
                e = tmp.prevSibling;
                me.removeAnim(me, tmp);
-               e.finishAnim(tmp);
+               tmp.finishAnim(tmp);
+       }
+}
+
+void finishObjAnimAnimHost(entity me, entity obj)
+{
+       entity e, tmp;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               if (e.object == obj)
+               {
+                       tmp = e;
+                       e = tmp.prevSibling;
+                       me.removeAnim(me, tmp);
+                       tmp.finishAnim(tmp);
+               }
        }
 }
 
index f71bb32da9703c561d0a8d72caec4bfe9551b606..eeac0edd844ba43d3e1e25ae197cd2188eda9bd6 100644 (file)
@@ -13,10 +13,13 @@ CLASS(Slider) EXTENDS(Label)
        METHOD(Slider, valueToText, string(entity, float))
        METHOD(Slider, toString, string(entity))
        METHOD(Slider, setValue, void(entity, float))
+       METHOD(Slider, setSliderValue, void(entity, float))
        METHOD(Slider, showNotify, void(entity))
        ATTRIB(Slider, src, string, string_null)
        ATTRIB(Slider, focusable, float, 1)
        ATTRIB(Slider, value, float, 0)
+       ATTRIB(Slider, animated, float, 1)
+       ATTRIB(Slider, sliderValue, float, 0)
        ATTRIB(Slider, valueMin, float, 0)
        ATTRIB(Slider, valueMax, float, 0)
        ATTRIB(Slider, valueStep, float, 0)
@@ -43,8 +46,19 @@ ENDCLASS(Slider)
 #ifdef IMPLEMENTATION
 void setValueSlider(entity me, float val)
 {
+       if (me.animated) {
+               anim.stopObjAnim(anim, me);
+               anim.removeObjAnim(anim, me);
+               makeHostedEasing(me, setSliderValueSlider, easingQuadInOut, 1, me.sliderValue, val);
+       } else {
+               me.setSliderValue(me, val);
+       }
        me.value = val;
 }
+void setSliderValueSlider(entity me, float val)
+{
+       me.sliderValue = val;
+}
 string toStringSlider(entity me)
 {
        return strcat(ftos(me.value), " (", me.valueToText(me, me.value), ")");
@@ -70,6 +84,7 @@ void configureSliderVisualsSlider(entity me, float sz, float theAlign, float the
 void configureSliderValuesSlider(entity me, float theValueMin, float theValue, float theValueMax, float theValueStep, float theValueKeyStep, float theValuePageStep)
 {
        me.value = theValue;
+       me.sliderValue = theValue;
        me.valueStep = theValueStep;
        me.valueMin = theValueMin;
        me.valueMax = theValueMax;
@@ -137,9 +152,14 @@ float keyDownSlider(entity me, float key, float ascii, float shift)
 float mouseDragSlider(entity me, vector pos)
 {
        float hit;
-       float v;
+       float v, animed;
        if(me.disabled)
                return 0;
+
+       anim.finishObjAnim(anim, me);
+       animed = me.animated;
+       me.animated = false;
+
        if(me.pressed)
        {
                hit = 1;
@@ -157,6 +177,9 @@ float mouseDragSlider(entity me, vector pos)
                else
                        me.setValue(me, me.previousValue);
        }
+
+       me.animated = animed;
+
        return 1;
 }
 float mousePressSlider(entity me, vector pos)
@@ -236,9 +259,9 @@ void drawSlider(entity me)
        if(me.disabled)
                draw_alpha *= me.disabledAlpha;
        draw_ButtonPicture('0 0 0', strcat(me.src, "_s"), eX * (1 - me.textSpace) + eY, me.color2, 1);
-       if(almost_in_bounds(me.valueMin, me.value, me.valueMax))
+       if(almost_in_bounds(me.valueMin, me.sliderValue, me.valueMax))
        {
-               controlLeft = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth);
+               controlLeft = (me.sliderValue - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth);
                if(me.disabled)
                        draw_Picture(eX * controlLeft, strcat(me.src, "_d"), eX * me.controlWidth + eY, me.colorD, 1);
                else if(me.pressed)
@@ -253,4 +276,4 @@ void drawSlider(entity me)
        drawLabel(me);
        me.text = string_null; // TEMPSTRING!
 }
-#endif
\ No newline at end of file
+#endif
index 628c8a579b86d6a48d2c34a0e60d38b0872f071a..b6a345481171b949904913e5010a6c57ac24bc08 100644 (file)
@@ -37,10 +37,10 @@ void setValueFromIdentifierTextSlider(entity me, string id)
        for(i = 0; i < me.nValues; ++i)
                if(me.valueToIdentifier(me, i) == id)
                {
-                       me.value = i;
+                       setValueSlider( me, i );
                        return;
                }
-       me.value = -1;
+       setValueSlider( me, -1 );
 }
 string getIdentifierTextSlider(entity me)
 {
index 13ea0f2dd0c34390196a88900e12e8e385d392be..134557da7dcd9bd1c12065e89f213d78fea799d1 100644 (file)
@@ -53,7 +53,7 @@ void setValueXonoticSlider(entity me, float val)
 {
        if(val != me.value)
        {
-               me.value = val;
+               setValueSlider( me, val );
                me.saveCvars(me);
        }
 }
@@ -62,7 +62,7 @@ void loadCvarsXonoticSlider(entity me)
        if not(me.cvarName)
                return;
 
-       me.value = cvar(me.cvarName);
+       me.setValue( me, cvar(me.cvarName) );
 }
 void saveCvarsXonoticSlider(entity me)
 {
index 20beec911e6144f7c42cda41986a423e8c82d31a..ba7cffc22f049b99564ca11fb7582225716b90db 100644 (file)
@@ -25,11 +25,11 @@ void loadCvarsXonoticDecibelsSlider(entity me)
 
        v = cvar(me.cvarName);
        if(v >= 0.98)
-               me.value = 0;
+               setValueSlider( me, 0 );
        else if(v < 0.0005)
-               me.value = -1000000;
+               setValueSlider( me, -1000000 );
        else
-               me.value = 0.1 * floor(0.5 + 10.0 * log10(cvar(me.cvarName)) * 10);
+               setValueSlider( me, 0.1 * floor(0.5 + 10.0 * log10(cvar(me.cvarName)) * 10) );
 }
 void saveCvarsXonoticDecibelsSlider(entity me)
 {
index d4786a7910aa7e43fbe1f915090abc8bee1fad54..2236bc51fe362b88705c10b353e0e57b6e5ef7fe 100644 (file)
@@ -46,7 +46,7 @@ void setValueXonoticTextSlider(entity me, float val)
 {
        if(val != me.value)
        {
-               me.value = val;
+               setValueSlider( me, val );
                me.saveCvars(me);
        }
 }
index ff5fbaa37ee4cf436796d3bc709e8164993c5de6..f42e1420916deb3b52e04c9d9801050f8e370bd9 100644 (file)
@@ -13,6 +13,7 @@ float sv_airaccel_qw;
 float sv_airstopaccelerate;
 float sv_airstrafeaccelerate;
 float sv_maxairstrafespeed;
+float sv_airstrafeaccel_qw;
 float sv_aircontrol;
 float sv_aircontrol_power;
 float sv_warsowbunny_airforwardaccel;
@@ -386,7 +387,7 @@ float IsMoveInDirection(vector mv, float angle) // key mix factor
 {
        if(mv_x == 0 && mv_y == 0)
                return 0; // avoid division by zero
-       angle = RAD2DEG * atan2(mv_y, mv_x);
+       angle -= RAD2DEG * atan2(mv_y, mv_x);
        angle = remainder(angle, 360) / 45;
        if(angle >  1)
                return 0;
@@ -395,6 +396,25 @@ float IsMoveInDirection(vector mv, float angle) // key mix factor
        return 1 - fabs(angle);
 }
 
+float GeomLerp(float a, float lerp, float b)
+{
+       if(a == 0)
+       {
+               if(lerp < 1)
+                       return 0;
+               else
+                       return b;
+       }
+       if(b == 0)
+       {
+               if(lerp > 0)
+                       return 0;
+               else
+                       return a;
+       }
+       return a * pow(fabs(b / a), lerp);
+}
+
 void CPM_PM_Aircontrol(vector wishdir, float wishspeed)
 {
        float zspeed, xyspeed, dot, k;
@@ -585,6 +605,7 @@ string GetMapname(void);
 float speedaward_lastupdate;
 float speedaward_lastsent;
 .float jumppadusetime;
+var float autocvar_g_movement_highspeed = 1;
 void SV_PlayerPhysics()
 {
        local vector wishvel, wishdir, v;
@@ -594,6 +615,13 @@ void SV_PlayerPhysics()
        float not_allowed_to_move;
        string c;
 
+       // fix physics stats for g_movement_highspeed
+       self.stat_sv_airaccel_qw = copysign(bound(0, 1-(1-fabs(sv_airaccel_qw))*autocvar_g_movement_highspeed, 1), sv_airaccel_qw);
+       if(sv_airstrafeaccel_qw)
+               self.stat_sv_airstrafeaccel_qw = copysign(bound(0.001, 1-(1-fabs(sv_airstrafeaccel_qw))*autocvar_g_movement_highspeed, 1), sv_airstrafeaccel_qw);
+       else
+               self.stat_sv_airstrafeaccel_qw = 0;
+
     if(self.PlayerPhysplug)
         if(self.PlayerPhysplug())
             return;
@@ -1138,8 +1166,9 @@ void SV_PlayerPhysics()
                        float accelerating;
                        float wishspeed2;
                        float airaccelqw;
+                       float strafity;
 
-                       airaccelqw = sv_airaccel_qw;
+                       airaccelqw = self.stat_sv_airaccel_qw;
                        accelerating = (self.velocity * wishdir > 0);
                        wishspeed2 = wishspeed;
 
@@ -1147,24 +1176,21 @@ void SV_PlayerPhysics()
                        if(sv_airstopaccelerate)
                                if(self.velocity * wishdir < 0)
                                        airaccel = sv_airstopaccelerate*maxspd_mod;
-                       // this doesn't play well with analog input, but can't r
-                       // fixed like the AirControl can. So, don't set the maxa
-                       // cvars when you want to support analog input.
-                       if(self.movement_x == 0 && self.movement_y != 0)
-                       {
-                               if(sv_maxairstrafespeed)
-                               {
-                                       wishspeed = min(wishspeed, sv_maxairstrafespeed*maxspd_mod);
-                                       if(sv_maxairstrafespeed < sv_maxairspeed)
-                                               airaccelqw = 1;
-                               }
-                               if(sv_airstrafeaccelerate)
-                               {
-                                       airaccel = sv_airstrafeaccelerate*maxspd_mod;
-                                       if(sv_airstrafeaccelerate > sv_airaccelerate)
-                                               airaccelqw = 1;
-                               }
-                       }
+                       // note that for straight forward jumping:
+                       // step = accel * frametime * wishspeed0;
+                       // accel  = bound(0, wishspeed - vel_xy_current, step) * accelqw + step * (1 - accelqw);
+                       // -->
+                       // dv/dt = accel * maxspeed (when slow)
+                       // dv/dt = accel * maxspeed * (1 - accelqw) (when fast)
+                       // log dv/dt = logaccel + logmaxspeed (when slow)
+                       // log dv/dt = logaccel + logmaxspeed + log(1 - accelqw) (when fast)
+                       strafity = IsMoveInDirection(self.movement, -90) + IsMoveInDirection(self.movement, +90); // if one is nonzero, other is always zero
+                       if(sv_maxairstrafespeed)
+                               wishspeed = min(wishspeed, GeomLerp(sv_maxairspeed*maxspd_mod, strafity, sv_maxairstrafespeed*maxspd_mod));
+                       if(sv_airstrafeaccelerate)
+                               airaccel = GeomLerp(airaccel, strafity, sv_airstrafeaccelerate*maxspd_mod);
+                       if(self.stat_sv_airstrafeaccel_qw)
+                               airaccelqw = copysign(1-GeomLerp(1-fabs(self.stat_sv_airaccel_qw), strafity, 1-fabs(self.stat_sv_airstrafeaccel_qw)), ((strafity > 0.5) ? self.stat_sv_airstrafeaccel_qw : self.stat_sv_airaccel_qw));
                        // !CPM
 
                        if(sv_warsowbunny_turnaccel && accelerating && self.movement_y == 0 && self.movement_x != 0)
index 41ca098b7796de764f4eb2c9ae3f8eb100201d2a..fec2a0976f196e2f1e29c154b1f86587f57057b9 100644 (file)
@@ -534,6 +534,9 @@ string cvar_changes;
 float game_starttime; //point in time when the countdown is over
 .float stat_game_starttime;
 
+.float stat_sv_airaccel_qw;
+.float stat_sv_airstrafeaccel_qw;
+
 void W_Porto_Remove (entity p);
 
 .float projectiledeathtype;
index c815b0815a8539690c0c882f2b0e9b5a7663e6f5..e969146ca40e145ed8e73e7e04a20f1f09e94330 100644 (file)
@@ -635,6 +635,10 @@ void spawnfunc_worldspawn (void)
        addstat(STAT_LEADLIMIT, AS_FLOAT, stat_leadlimit);
        addstat(STAT_BULLETS_LOADED, AS_INT, campingrifle_bulletcounter);
 
+       // g_movementspeed hack
+       addstat(STAT_MOVEVARS_AIRACCEL_QW, AS_FLOAT, stat_sv_airaccel_qw);
+       addstat(STAT_MOVEVARS_AIRSTRAFEACCEL_QW, AS_FLOAT, stat_sv_airstrafeaccel_qw);
+
        next_pingtime = time + 5;
        InitializeEntity(self, cvar_changes_init, INITPRIO_CVARS);
 
index 603aad7fd0977eb30b0f84f651db59d1677a1358..0212fce8a43fa7fe3e78951aa77e273f57e01468 100644 (file)
@@ -190,6 +190,7 @@ void StartFrame (void)
        sv_airstopaccelerate = cvar("sv_airstopaccelerate");
        sv_airstrafeaccelerate = cvar("sv_airstrafeaccelerate");
        sv_maxairstrafespeed = cvar("sv_maxairstrafespeed");
+       sv_airstrafeaccel_qw = cvar("sv_airstrafeaccel_qw");
        sv_aircontrol = cvar("sv_aircontrol");
        sv_aircontrol_power = cvar("sv_aircontrol_power");
        sv_warsowbunny_airforwardaccel = cvar("sv_warsowbunny_airforwardaccel");
diff --git a/sound/weapons/fireball_fly.ogg b/sound/weapons/fireball_fly.ogg
new file mode 100644 (file)
index 0000000..05c6d37
Binary files /dev/null and b/sound/weapons/fireball_fly.ogg differ
diff --git a/sound/weapons/fireball_fly.wav b/sound/weapons/fireball_fly.wav
deleted file mode 100644 (file)
index f5f79db..0000000
Binary files a/sound/weapons/fireball_fly.wav and /dev/null differ
diff --git a/sound/weapons/fireball_fly2.ogg b/sound/weapons/fireball_fly2.ogg
new file mode 100644 (file)
index 0000000..4e7a929
Binary files /dev/null and b/sound/weapons/fireball_fly2.ogg differ
diff --git a/sound/weapons/fireball_fly2.wav b/sound/weapons/fireball_fly2.wav
deleted file mode 100644 (file)
index 5e8a1ca..0000000
Binary files a/sound/weapons/fireball_fly2.wav and /dev/null differ