]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/View.qc
Merge branch 'master' into divVerent/csqcmodel
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / View.qc
index 077a0d21c0799e94553908e206507f9f6a1dd1b3..ac2f12cb52a9eba1196579b8616b4a6631d6d53a 100644 (file)
@@ -78,30 +78,6 @@ void Porto_Draw()
        }
 }
 
-/**
- * Checks whether the server initiated a map restart (stat_game_starttime changed)
- *
- * TODO: Use a better solution where a common shared entitiy is used that contains
- * timelimit, fraglimit and game_starttime! Requires engine changes (remove STAT_TIMELIMIT
- * and STAT_FRAGLIMIT to be auto-sent)
- */
-void CheckForGamestartChange() {
-       float startTime;
-       startTime = getstatf(STAT_GAMESTARTTIME);
-       if (previous_game_starttime != startTime) {
-               if ((time + 5.0) < startTime) {
-                       //if connecting to server while restart was active don't always play prepareforbattle
-                       sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/prepareforbattle.wav"), VOL_BASEVOICE, ATTN_NONE);
-               }
-               if (time < startTime) {
-                       restartAnnouncer = spawn();
-                       restartAnnouncer.think = restartAnnouncer_Think;
-                       restartAnnouncer.nextthink = startTime - floor(startTime - time); //synchronize nextthink to startTime
-               }
-       }
-       previous_game_starttime = startTime;
-}
-
 void Porto_Init()
 {
        porto = spawn();
@@ -351,6 +327,8 @@ void PostInit(void);
 void CSQC_Demo_Camera();
 float HUD_WouldDrawScoreboard();
 float camera_mode;
+float CAMERA_FREE = 1;
+float CAMERA_CHASE = 2;
 float reticle_type;
 string NextFrameCommand;
 void CSQC_SPIDER_HUD();
@@ -383,6 +361,8 @@ vector damage_blurpostprocess, content_blurpostprocess;
 
 float checkfail[16];
 
+#define BUTTON_3 4
+#define BUTTON_4 8
 void CSQC_UpdateView(float w, float h)
 {
        entity e;
@@ -391,8 +371,14 @@ void CSQC_UpdateView(float w, float h)
        vector v;
        vector vf_size, vf_min;
        float a;
+
        hud = getstati(STAT_HUD);
 
+       if(checkextension("DP_CSQC_MINFPS_QUALITY"))
+               view_quality = getproperty(VF_MINFPS_QUALITY);
+       else
+               view_quality = 1;
+
        button_attack2 = (input_buttons & BUTTON_3);
        button_zoom = (input_buttons & BUTTON_4);
 
@@ -410,9 +396,10 @@ void CSQC_UpdateView(float w, float h)
        CHECKFAIL_ASSERT(3, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{111}\{118}\{101}\{114}\{100}\{114}\{97}\{119}", 0);
        CHECKFAIL_ASSERT(4, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{108}\{105}\{103}\{104}\{116}", 0);
        CHECKFAIL_ASSERT(5, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{115}\{104}\{97}\{100}\{111}\{119}\{118}\{111}\{108}\{117}\{109}\{101}\{115}", 0);
+       CHECKFAIL_ASSERT(6, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{111}\{118}\{101}\{114}\{100}\{114}\{97}\{119}", 0);
 
-       vf_size = R_SetView3fv(VF_SIZE);
-       vf_min = R_SetView3fv(VF_MIN);
+       vf_size = getpropertyvec(VF_SIZE);
+       vf_min = getpropertyvec(VF_MIN);
        vid_width = vf_size_x;
        vid_height = vf_size_y;
 
@@ -421,9 +408,13 @@ void CSQC_UpdateView(float w, float h)
 
        WaypointSprite_Load();
 
+       CSQCPlayer_SetCamera();
+
+#ifdef COMPAT_XON050_ENGINE
        if(spectatee_status)
                myteam = GetPlayerColor(spectatee_status - 1);
        else
+#endif
                myteam = GetPlayerColor(player_localentnum - 1);
 
        ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
@@ -434,10 +425,10 @@ void CSQC_UpdateView(float w, float h)
                if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || intermission)
                {
                        // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.)
-                       vector current_view_origin = R_SetView3fv(VF_ORIGIN);
+                       vector current_view_origin = getpropertyvec(VF_ORIGIN);
                        
                        // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing).
-                       // Ideally, there should be another way to enable third person cameras, such as through R_SetView()
+                       // Ideally, there should be another way to enable third person cameras, such as through setproperty()
                        if(!autocvar_chase_active)
                                cvar_set("chase_active", "-1"); // -1 enables chase_active while marking it as set by this code, and not by the user (which would be 1)
 
@@ -457,8 +448,8 @@ void CSQC_UpdateView(float w, float h)
                        eventchase_target_origin = current_view_origin - v_forward * eventchase_current_distance * (trace_fraction - 0.1);
                        WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, self);
 
-                       R_SetView(VF_ORIGIN, trace_endpos);
-                       R_SetView(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles));
+                       setproperty(VF_ORIGIN, trace_endpos);
+                       setproperty(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles));
                }
                else if(autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
                {
@@ -470,21 +461,21 @@ void CSQC_UpdateView(float w, float h)
        // do lockview after event chase camera so that it still applies whenever necessary.
        if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1)
        {
-               R_SetView(VF_ORIGIN, freeze_org);
-               R_SetView(VF_ANGLES, freeze_ang);
+               setproperty(VF_ORIGIN, freeze_org);
+               setproperty(VF_ANGLES, freeze_ang);
        }
        else
        {
-               freeze_org = R_SetView3fv(VF_ORIGIN);
-               freeze_ang = R_SetView3fv(VF_ANGLES);
+               freeze_org = getpropertyvec(VF_ORIGIN);
+               freeze_ang = getpropertyvec(VF_ANGLES);
        }
 
        WarpZone_FixView();
        //WarpZone_FixPMove();
 
        // Render the Scene
-       view_origin = R_SetView3fv(VF_ORIGIN);
-       view_angles = R_SetView3fv(VF_ANGLES);
+       view_origin = getpropertyvec(VF_ORIGIN);
+       view_angles = getpropertyvec(VF_ANGLES);
        makevectors(view_angles);
        view_forward = v_forward;
        view_right = v_right;
@@ -525,16 +516,15 @@ void CSQC_UpdateView(float w, float h)
                PostInit();
 
        if(intermission && !isdemo() && !(calledhooks & HOOK_END))
+       {
                if(calledhooks & HOOK_START)
                {
                        localcmd("\ncl_hook_gameend\n");
                        calledhooks |= HOOK_END;
                }
-
-       CheckForGamestartChange();
-       serverAnnouncer();
-       maptimeAnnouncer();
-       carrierAnnouncer();
+       }
+       
+  Announcer();
 
        fov = autocvar_fov;
        if(fov <= 59.5)
@@ -587,31 +577,31 @@ void CSQC_UpdateView(float w, float h)
        }
 
        // ALWAYS Clear Current Scene First
-       R_ClearScene();
+       clearscene();
 #ifdef WORKAROUND_XON010
        if(checkextension("DP_CSQC_ROTATEMOVES"))
        {
 #endif
-       R_SetView(VF_ORIGIN, view_origin);
-       R_SetView(VF_ANGLES, view_angles);
+       setproperty(VF_ORIGIN, view_origin);
+       setproperty(VF_ANGLES, view_angles);
 #ifdef WORKAROUND_XON010
        }
 #endif
 
        // FIXME engine bug? VF_SIZE and VF_MIN are not restored to sensible values by this
-       R_SetView(VF_SIZE, vf_size);
-       R_SetView(VF_MIN, vf_min);
+       setproperty(VF_SIZE, vf_size);
+       setproperty(VF_MIN, vf_min);
 
        // Assign Standard Viewflags
        // Draw the World (and sky)
-       R_SetView(VF_DRAWWORLD, 1);
+       setproperty(VF_DRAWWORLD, 1);
 
        // Set the console size vars
        vid_conwidth = autocvar_vid_conwidth;
        vid_conheight = autocvar_vid_conheight;
        vid_pixelheight = autocvar_vid_pixelheight;
 
-       R_SetView(VF_FOV, GetCurrentFov(fov));
+       setproperty(VF_FOV, GetCurrentFov(fov));
 
        // Camera for demo playback
        if(camera_active)
@@ -640,10 +630,10 @@ void CSQC_UpdateView(float w, float h)
        }
 
        // Draw the Crosshair
-       R_SetView(VF_DRAWCROSSHAIR, 0); //Make sure engine crosshairs are always hidden
+       setproperty(VF_DRAWCROSSHAIR, 0); //Make sure engine crosshairs are always hidden
 
        // Draw the Engine Status Bar (the default Quake HUD)
-       R_SetView(VF_DRAWENGINEHUD, 0);
+       setproperty(VF_DRAWENGINESBAR, 0);
 
        // Update the mouse position
        /*
@@ -658,8 +648,8 @@ void CSQC_UpdateView(float w, float h)
                        self.draw();
        self = e;
 
-       R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);
-       R_RenderScene();
+       addentities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);
+       renderscene();
 
        // now switch to 2D drawing mode by calling a 2D drawing function
        // then polygon drawing will draw as 2D stuff, and NOT get queued until the
@@ -670,7 +660,11 @@ void CSQC_UpdateView(float w, float h)
        if not(serverflags & SERVERFLAG_ALLOW_FULLBRIGHT)
        {
                // apply night vision effect
-               vector rgb, tc_00, tc_01, tc_10, tc_11;
+               vector tc_00, tc_01, tc_10, tc_11;
+               vector rgb;
+               rgb_x = 0; // fteqcc sucks
+               rgb_y = 0; // fteqcc sucks
+               rgb_z = 0; // fteqcc sucks
 
                if(!nightvision_noise)
                {
@@ -729,7 +723,7 @@ void CSQC_UpdateView(float w, float h)
        else if(activeweapon == WEP_NEX && button_attack2 || activeweapon == WEP_RIFLE && button_attack2)
                reticle_type = 2; // nex zoom
     
-       if (reticle_type)
+       if(reticle_type && autocvar_cl_reticle)
        {
                if(autocvar_cl_reticle_stretch)
                {
@@ -1235,7 +1229,7 @@ void CSQC_UpdateView(float w, float h)
 
                        wcross_scale *= 1 - autocvar__menu_alpha;
                        wcross_alpha *= 1 - autocvar__menu_alpha;
-                       wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
+                       wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
 
                        if(wcross_scale >= 0.001 && wcross_alpha >= 0.001)
                        {
@@ -1352,7 +1346,7 @@ void CSQC_UpdateView(float w, float h)
                                if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev)
                                {
                                        f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime);
-                                       wcross_size = drawgetimagesize(wcross_name_goal_prev_prev) * wcross_scale;
+                                       wcross_size = draw_getimagesize(wcross_name_goal_prev_prev) * wcross_scale;
                                        CROSSHAIR_DRAW(wcross_resolution_goal_prev_prev, wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev);
                                        f = 1 - f;
                                }
@@ -1362,7 +1356,7 @@ void CSQC_UpdateView(float w, float h)
                                }
                                wcross_name_alpha_goal_prev = f;
 
-                               wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
+                               wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
                                CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f);
 
                                if(autocvar_crosshair_dot)
@@ -1411,11 +1405,11 @@ void CSQC_UpdateView(float w, float h)
                string w0, h0;
                w0 = ftos(autocvar_vid_conwidth);
                h0 = ftos(autocvar_vid_conheight);
-               //R_SetView(VF_VIEWPORT, '0 0 0', '640 480 0');
-               //R_SetView(VF_FOV, '90 90 0');
-               R_SetView(VF_ORIGIN, '0 0 0');
-               R_SetView(VF_ANGLES, '0 0 0');
-               R_SetView(VF_PERSPECTIVE, 1);
+               //setproperty(VF_VIEWPORT, '0 0 0', '640 480 0');
+               //setproperty(VF_FOV, '90 90 0');
+               setproperty(VF_ORIGIN, '0 0 0');
+               setproperty(VF_ANGLES, '0 0 0');
+               setproperty(VF_PERSPECTIVE, 1);
                makevectors('0 0 0');
                vector v1, v2;
                cvar_set("vid_conwidth", "800");
@@ -1447,8 +1441,8 @@ void CSQC_UpdateView(float w, float h)
             CSQC_BUMBLE_HUD();
     }
        // let's reset the view back to normal for the end
-       R_SetView(VF_MIN, '0 0 0');
-       R_SetView(VF_SIZE, '1 0 0' * w + '0 1 0' * h);
+       setproperty(VF_MIN, '0 0 0');
+       setproperty(VF_SIZE, '1 0 0' * w + '0 1 0' * h);
 }
 
 
@@ -1463,7 +1457,7 @@ void CSQC_common_hud(void)
             if(acc_color_levels)
                 strunzone(acc_color_levels);
             acc_color_levels = strzone(autocvar_accuracy_color_levels);
-            acc_levels = tokenize(acc_color_levels);
+            acc_levels = tokenize_console(acc_color_levels);
             if (acc_levels > MAX_ACCURACY_LEVELS)
                 acc_levels = MAX_ACCURACY_LEVELS;
 
@@ -1645,6 +1639,6 @@ void CSQC_Demo_Camera()
                current_position = current_origin + current_camera_offset;
        }
 
-       R_SetView(VF_ANGLES, current_angles);
-       R_SetView(VF_ORIGIN, current_position);
+       setproperty(VF_ANGLES, current_angles);
+       setproperty(VF_ORIGIN, current_position);
 }