Merge remote branch 'origin/fruitiex/gakarmor'
authorRudolf Polzer <divverent@alientrap.org>
Tue, 12 Oct 2010 17:16:05 +0000 (19:16 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Tue, 12 Oct 2010 17:16:05 +0000 (19:16 +0200)
22 files changed:
defaultXonotic.cfg
gfx/crosshair1.tga [new file with mode: 0644]
gfx/crosshair10.tga
gfx/crosshair11.tga
gfx/crosshair12.tga
gfx/crosshair13.tga
gfx/crosshair14.tga
gfx/crosshair16.tga
gfx/crosshair17.tga
gfx/crosshair2.tga [new file with mode: 0644]
gfx/crosshair3.tga [new file with mode: 0644]
gfx/crosshair4.tga [new file with mode: 0644]
gfx/crosshair5.tga [new file with mode: 0644]
gfx/crosshair6.tga [new file with mode: 0644]
gfx/crosshair7.tga
gfx/crosshair8.tga
gfx/crosshair9.tga
gfx/crosshairdot.tga [new file with mode: 0644]
qcsrc/client/View.qc
qcsrc/menu/xonotic/crosshairbutton.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c
qcsrc/warpzonelib/server.qc

index e00da32085eb42889faf444dcdc9464384fc005e..da7cf68a4eb71ea235d6ba87e90b06dfcc06cf9b 100644 (file)
@@ -87,7 +87,15 @@ _cl_color 102
 _cl_name Player
 _cl_playermodel models/player/umbra.iqm
 _cl_playerskin 0
-crosshair 1
+seta crosshair 3
+seta crosshair_color_red 0.6
+seta crosshair_color_green 0.8
+seta crosshair_color_blue 1
+seta crosshair_alpha 1
+seta crosshair_size 0.35
+seta crosshair_dot 1
+seta crosshair_dot_alpha 1
+seta crosshair_dot_size 1
 seta crosshair_per_weapon 0    "when 1, each gun will display a different crosshair"
 seta crosshair_color_override 0        "when 1, crosshair_color_* overrides the per-weapon color"
 seta crosshair_effect_speed -1 "how fast (in seconds) some crosshair effects should take place, 0 = instant, -1 = 2x weapon switch time"
@@ -1391,8 +1399,8 @@ seta scoreboard_accuracy_border_thickness 1 "accuracy stats border thickness"
 seta scoreboard_accuracy_doublerows 0 "use two rows instead of one"
 seta scoreboard_accuracy 1 "0 = no weapon accuracy stats panel on scoreboard"
 seta scoreboard_color_bg_r 0 "red color component of the HUD background"
-seta scoreboard_color_bg_g 0.25 "green color component of the HUD background"
-seta scoreboard_color_bg_b 0.17 "blue color component of the HUD background"
+seta scoreboard_color_bg_g 0.4 "green color component of the HUD background"
+seta scoreboard_color_bg_b 0.6 "blue color component of the HUD background"
 seta scoreboard_color_bg_team 0.5 "team color multiplier of the HUD background"
 seta scoreboard_alpha_bg 0.6 "scoreboard background alpha"
 seta scoreboard_alpha_fg 1 "scoreboard foreground alpha"
diff --git a/gfx/crosshair1.tga b/gfx/crosshair1.tga
new file mode 100644 (file)
index 0000000..d6c09e9
Binary files /dev/null and b/gfx/crosshair1.tga differ
index e9648b1e629cb6bbdc8d260ea9fd216cf6809f69..e7b5774e6f127cbf8a770c14a6a4c74c49f2c4ef 100644 (file)
Binary files a/gfx/crosshair10.tga and b/gfx/crosshair10.tga differ
index 8718e907fcbf110b19aed20a76e4c8f612dd8995..d1486adbe1a6bfb1c07e015b51d79780824cdf36 100644 (file)
Binary files a/gfx/crosshair11.tga and b/gfx/crosshair11.tga differ
index 4edabeaaafecdde4a9b5bf704c493d358522e7e8..95892abd6cb0279d62b8ebb27e38664885143262 100644 (file)
Binary files a/gfx/crosshair12.tga and b/gfx/crosshair12.tga differ
index 4a546781fa66184670478e309568e84e52f0b825..e9f17a796c51ff3c6d134fd4ffc964f1aa2c0cfe 100644 (file)
Binary files a/gfx/crosshair13.tga and b/gfx/crosshair13.tga differ
index df8136f1774e7c0c5ed25d63aedc5a0afa8d2379..b03e14d47a434da58ee829f2a7b9db5ef5115825 100644 (file)
Binary files a/gfx/crosshair14.tga and b/gfx/crosshair14.tga differ
index dc36814a7f388766988ff1536d370d457ad2f5a2..8e9d2d9fab481cbe5a6d82dd49c1f0305570e940 100644 (file)
Binary files a/gfx/crosshair16.tga and b/gfx/crosshair16.tga differ
index dc36814a7f388766988ff1536d370d457ad2f5a2..c22551aa09a2aafdb255423d2a4fdc9cee1b51b6 100644 (file)
Binary files a/gfx/crosshair17.tga and b/gfx/crosshair17.tga differ
diff --git a/gfx/crosshair2.tga b/gfx/crosshair2.tga
new file mode 100644 (file)
index 0000000..4e2bd79
Binary files /dev/null and b/gfx/crosshair2.tga differ
diff --git a/gfx/crosshair3.tga b/gfx/crosshair3.tga
new file mode 100644 (file)
index 0000000..db5f2cc
Binary files /dev/null and b/gfx/crosshair3.tga differ
diff --git a/gfx/crosshair4.tga b/gfx/crosshair4.tga
new file mode 100644 (file)
index 0000000..2c4f312
Binary files /dev/null and b/gfx/crosshair4.tga differ
diff --git a/gfx/crosshair5.tga b/gfx/crosshair5.tga
new file mode 100644 (file)
index 0000000..905045f
Binary files /dev/null and b/gfx/crosshair5.tga differ
diff --git a/gfx/crosshair6.tga b/gfx/crosshair6.tga
new file mode 100644 (file)
index 0000000..b005d96
Binary files /dev/null and b/gfx/crosshair6.tga differ
index dc7fe43db49927a7aee3c86b992d5c5af6cbf592..64f6d5d07ac0ba241cfebc30b0c496b0c8140b26 100644 (file)
Binary files a/gfx/crosshair7.tga and b/gfx/crosshair7.tga differ
index 06028298fac23095696ea822ef8f3b86eb390dbd..df9e414f7c73cbda181a75b94dc1334b1044e925 100644 (file)
Binary files a/gfx/crosshair8.tga and b/gfx/crosshair8.tga differ
index 75e033960f0f58373ec416b4441073a18ab09efc..a1e76940a7ffa0000fa2e2f4c7712dae1c667952 100644 (file)
Binary files a/gfx/crosshair9.tga and b/gfx/crosshair9.tga differ
diff --git a/gfx/crosshairdot.tga b/gfx/crosshairdot.tga
new file mode 100644 (file)
index 0000000..a2ffef2
Binary files /dev/null and b/gfx/crosshairdot.tga differ
index 6fc94ca4346d1ebfa395510f9270ad9234ad841b..157b68d007b45c207271e0a0a85a0c54fc8ee66e 100644 (file)
@@ -893,7 +893,12 @@ void CSQC_UpdateView(float w, float h)
                                {
                                        CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_RING, wcross_resolution, wcross_name, wcross_alpha);
                                }
+
                                CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f);
+
+                               if(cvar("crosshair_dot"))
+                                       CROSSHAIR_DRAW(wcross_resolution * cvar("crosshair_dot_size"), "gfx/crosshairdot.tga", wcross_alpha * f * cvar("crosshair_dot_alpha"));
+
                                wcross_name_alpha_goal_prev = f;
                        }
                }
index b290f3d218b1faab5a5ee5de4e8ff7770a827a09..058bfd7eb16638eb4722631ce48d2f022685050d 100644 (file)
@@ -8,6 +8,7 @@ CLASS(XonoticCrosshairButton) EXTENDS(RadioButton)
 
        ATTRIB(XonoticCrosshairButton, useDownAsChecked, float, 1)
        ATTRIB(XonoticCrosshairButton, src3, string, string_null)
+       ATTRIB(XonoticCrosshairButton, src4, string, string_null)
 
        ATTRIB(XonoticCrosshairButton, cvarName, string, string_null)
        ATTRIB(XonoticCrosshairButton, cvarValueFloat, float, 0)
@@ -33,6 +34,7 @@ void XonoticCrosshairButton_configureXonoticCrosshairButton(entity me, float the
        me.configureRadioButton(me, string_null, me.fontSize, me.image, theGroup, 0);
        me.srcMulti = 1;
        me.src3 = strzone(strcat("/gfx/crosshair", ftos(me.cvarValueFloat)));
+       me.src4 = "/gfx/crosshairdot";
 }
 void XonoticCrosshairButton_setChecked(entity me, float val)
 {
@@ -76,12 +78,14 @@ void XonoticCrosshairButton_draw(entity me)
 
        sz = draw_PictureSize(me.src3);
        sz = globalToBoxSize(sz, draw_scale);
-       sz = sz * cvar("crosshair_size");
+       sz = (10 * '1 1 0' + sz * cvar("crosshair_size")) * 0.05; // (10 * '1 1 0' + ...) * 0.05 here to make visible size changes happen also at bigger sizes
        if(sz_x > 0.95)
                sz = sz * (0.95 / sz_x);
        if(sz_y > 0.95)
                sz = sz * (0.95 / sz_y);
 
        draw_Picture('0.5 0.5 0' - 0.5 * sz, me.src3, sz, rgb, a);
+       if(cvar("crosshair_dot"))
+               draw_Picture('0.5 0.5 0' - 0.5 * sz * cvar("crosshair_dot_size"), me.src4, sz * cvar("crosshair_dot_size"), rgb, a * cvar("crosshair_dot_alpha"));
 }
 #endif
index 754da256a9ffc3f44a2165339fc62aec8f6140c1..751c5559180c592e5ac2b350dea2ad1b00afb0d6 100644 (file)
@@ -84,7 +84,7 @@ void XonoticPlayerSettingsTab_fill(entity me)
                }
 
        me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Field of View:"));
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Field of view:"));
                me.TD(me, 1, 2, e = makeXonoticSlider(60, 130, 1, "fov"));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Damage kick:"));
@@ -92,11 +92,9 @@ void XonoticPlayerSettingsTab_fill(entity me)
        me.TR(me);
                sl = makeXonoticSlider(0.45, 0.75, 0.01, "cl_bobcycle");
                me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, sl, "View bobbing:"));
-               me.TD(me, 1, 2, sl);
-       
-       me.TR(me);
+               me.TD(me, 1, 2, sl);    
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Zoom Factor:"));
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Zoom factor:"));
                me.TD(me, 1, 2, e = makeXonoticSlider(2, 16, 0.5, "cl_zoomfactor"));
        me.TR(me);
                sl = makeXonoticSlider(1, 8, 0.5, "cl_zoomspeed");
@@ -110,40 +108,55 @@ void XonoticPlayerSettingsTab_fill(entity me)
                        e0.textEntity = main.weaponsDialog;
                        e0.allowCut = 1;
        me.TR(me);
-       me.TR(me);
-               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "crosshair_per_weapon", "Per weapon crosshairs"));
-               me.TD(me, 1, 1.3, e = makeXonoticCheckBox(1, "crosshair_color_override", "& crosshair colors"));
+               me.TD(me, 1, 0.75, e = makeXonoticTextLabel(0, "Crosshair:"));
+               me.TD(me, 1, 1.00, e = makeXonoticCheckBox(0, "crosshair_per_weapon", "Per weapon"));
+               me.TD(me, 1, 1.25, e = makeXonoticCheckBox(1, "crosshair_color_override", "& Per weapon colors"));
                setDependent(e, "crosshair_per_weapon", 1, 1);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair:"));
+               me.TDempty(me, 0.5);
                for(i = 1; i <= 10; ++i) {
                        me.TDNoMargin(me, 1, 2 / 10, e = makeXonoticCrosshairButton(3, i), '1 1 0');
                        setDependent(e, "crosshair_per_weapon", 0, 0);
                }
        me.TR(me);
-               me.TDempty(me, 1);
+               me.TDempty(me, 0.5);
                for(i = 11; i <= 20; ++i) {
                        me.TDNoMargin(me, 1, 2 / 10, e = makeXonoticCrosshairButton(3, i), '1 1 0');
                        setDependent(e, "crosshair_per_weapon", 0, 0);
                }
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair Size:"));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0.40, 2, 0.05, "crosshair_size"));
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair size:"));
+               me.TD(me, 1, 1.8, e = makeXonoticSlider(0.10, 1.5, 0.05, "crosshair_size"));
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair Alpha:"));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.01, "crosshair_color_alpha"));
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair alpha:"));
+               me.TD(me, 1, 1.8, e = makeXonoticSlider(0, 1, 0.1, "crosshair_color_alpha"));
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair Red:"));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.01, "crosshair_color_red"));
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair red:"));
+               me.TD(me, 1, 1.8, e = makeXonoticSlider(0, 1, 0.01, "crosshair_color_red"));
                setDependentOR(e, "crosshair_per_weapon", 0, 0, "crosshair_color_override", 1, 1);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair Green:"));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.01, "crosshair_color_green"));
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair green:"));
+               me.TD(me, 1, 1.8, e = makeXonoticSlider(0, 1, 0.01, "crosshair_color_green"));
                setDependentOR(e, "crosshair_per_weapon", 0, 0, "crosshair_color_override", 1, 1);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair Blue:"));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.01, "crosshair_color_blue"));
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair blue:"));
+               me.TD(me, 1, 1.8, e = makeXonoticSlider(0, 1, 0.01, "crosshair_color_blue"));
                setDependentOR(e, "crosshair_per_weapon", 0, 0, "crosshair_color_override", 1, 1);
+       me.TR(me);
+               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "crosshair_dot", "Enable centered dot"));
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, "Size:"));
+               me.TD(me, 1, 0.9, e = makeXonoticSlider(0.2, 2, 0.1, "crosshair_dot_size"));
+                       setDependent(e, "crosshair_dot", 1, 1);
+               me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, "Alpha:"));
+               me.TD(me, 1, 0.9, e = makeXonoticSlider(0.10, 1, 0.1, "crosshair_dot_alpha"));
+                       setDependent(e, "crosshair_dot", 1, 1);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Hit test:"));
                me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "crosshair_hittest", "0",    "None"));
@@ -157,13 +170,13 @@ void XonoticPlayerSettingsTab_fill(entity me)
                me.TDempty(me, 0.5);
        me.TR(me);
                me.TDempty(me, 0.4);
-               me.TD(me, 1, 2.2, e = makeXonoticButton("HUD Setup", '0 0 0'));
+               me.TD(me, 1, 2.2, e = makeXonoticButton("Enter HUD editor", '0 0 0'));
                        e.onClick = HUDSetup_Join_Click;
                        e.onClickEntity = me;
                me.TDempty(me, 0.5);
        me.TR(me);
        #ifdef ALLOW_FORCEMODELS
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Force Models:"));
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Force models:"));
                me.TD(me, 1, 2/3, e = makeXonoticRadioButton(2, string_null, string_null, "None"));
                me.TD(me, 1, 2/3, e = makeXonoticRadioButton(2, "cl_forceplayermodelsfromxonotic", string_null, "Custom"));
                me.TD(me, 1, 2/3, e = makeXonoticRadioButton(2, "cl_forceplayermodels", string_null, "All"));
index cfa6ef965ec768949733736a165038d08555fd28..6e0ecb5b33811de1c266da4a90c617a84d16b2c3 100644 (file)
@@ -48,7 +48,7 @@ float WarpZone_Teleport(entity player)
 
        o1 = WarpZone_TransformOrigin(self, o0);
        v1 = WarpZone_TransformVelocity(self, v0);
-       if(player.classname == "player")
+       if(clienttype(player) != CLIENTTYPE_NOTACLIENT)
                a1 = WarpZone_TransformVAngles(self, player.v_angle);
        else
                a1 = WarpZone_TransformAngles(self, a0);
@@ -335,12 +335,17 @@ void WarpZonePosition_InitStep_FindTarget()
 
 void WarpZoneCamera_InitStep_FindTarget()
 {
+       entity e;
+       float i;
        if(self.target == "")
        {
                error("Camera with no target");
                return;
        }
-       self.enemy = find(world, targetname, self.target);
+       self.enemy = world;
+       for(e = world, i = 0; (e = find(e, targetname, self.target)); )
+               if(random() * ++i < 1)
+                       self.enemy = e;
        if(self.enemy == world)
        {
                error("Camera with nonexisting target");
@@ -348,6 +353,7 @@ void WarpZoneCamera_InitStep_FindTarget()
        }
        ++warpzone_cameras_exist;
        WarpZone_Camera_SetUp(self, self.enemy.origin, self.enemy.angles);
+       self.SendFlags = 0xFFFFFF;
 }
 
 void WarpZone_InitStep_UpdateTransform()
@@ -567,6 +573,8 @@ void WarpZones_Reconnect()
                WarpZone_InitStep_ClearTarget();
        for(self = warpzone_first; self; self = self.warpzone_next)
                WarpZone_InitStep_FindTarget();
+       for(self = warpzone_camera_first; self; self = self.warpzone_next)
+               WarpZoneCamera_InitStep_FindTarget();
        for(self = warpzone_first; self; self = self.warpzone_next)
                WarpZone_InitStep_FinalizeTransform();
        self = e;
@@ -583,8 +591,6 @@ void WarpZone_StartFrame()
                        WarpZone_InitStep_FindOriginTarget();
                for(self = warpzone_position_first; self; self = self.warpzone_next)
                        WarpZonePosition_InitStep_FindTarget();
-               for(self = warpzone_camera_first; self; self = self.warpzone_next)
-                       WarpZoneCamera_InitStep_FindTarget();
                for(self = warpzone_first; self; self = self.warpzone_next)
                        WarpZone_InitStep_UpdateTransform();
                self = e;
@@ -594,6 +600,16 @@ void WarpZone_StartFrame()
                WarpZone_StoreProjectileData(e);
 }
 
+.float warpzone_reconnecting;
+float visible_to_some_client(entity ent)
+{
+       entity e;
+       for(e = nextent(world); clienttype(e) != CLIENTTYPE_NOTACLIENT; e = nextent(e))
+               if(e.classname == "player" && clienttype(e) == CLIENTTYPE_REAL)
+                       if(checkpvs(e.origin + e.view_ofs, ent))
+                               return 1;
+       return 0;
+}
 void trigger_warpzone_reconnect_use()
 {
        entity e;
@@ -601,13 +617,20 @@ void trigger_warpzone_reconnect_use()
        // NOTE: this matches for target, not targetname, but of course
        // targetname must be set too on the other entities
        for(self = warpzone_first; self; self = self.warpzone_next)
-               if(e.target == "" || self.target == e.target)
+               self.warpzone_reconnecting = ((e.target == "" || self.target == e.target) && !((e.spawnflags & 1) && (visible_to_some_client(self) || visible_to_some_client(self.enemy))));
+       for(self = warpzone_camera_first; self; self = self.warpzone_next)
+               self.warpzone_reconnecting = ((e.target == "" || self.target == e.target) && !((e.spawnflags & 1) && visible_to_some_client(self)));
+       for(self = warpzone_first; self; self = self.warpzone_next)
+               if(self.warpzone_reconnecting)
                        WarpZone_InitStep_ClearTarget();
        for(self = warpzone_first; self; self = self.warpzone_next)
-               if(e.target == "" || self.target == e.target)
+               if(self.warpzone_reconnecting)
                        WarpZone_InitStep_FindTarget();
+       for(self = warpzone_camera_first; self; self = self.warpzone_next)
+               if(self.warpzone_reconnecting)
+                       WarpZoneCamera_InitStep_FindTarget();
        for(self = warpzone_first; self; self = self.warpzone_next)
-               if(e.target == "" || self.target == e.target || self.enemy.target == e.target)
+               if(self.warpzone_reconnecting || self.enemy.warpzone_reconnecting)
                        WarpZone_InitStep_FinalizeTransform();
        self = e;
 }