Inside3D!
     

Tutorial: Adding r_viewmodeloffset to GLQuake/WinQuake

 
Post new topic   Reply to topic    Inside3d Forums Forum Index -> Programming Tutorials
View previous topic :: View next topic  
Author Message
Baker



Joined: 14 Mar 2006
Posts: 1538

PostPosted: Wed Nov 19, 2008 5:15 am    Post subject: Tutorial: Adding r_viewmodeloffset to GLQuake/WinQuake Reply with quote

Adding r_viewmodeloffset cvar to a Quake engine

The r_viewmodeloffset console variable allows you to position the gun to the left or right by any amount you choose. One example is using r_viewmodeloffset 5 or -5 to shift the gun to the left or right.

This code isn't renderer specific so both GLQuake and WinQuake receive the functionality.

[It can also position higher or farther in front if you want via r_viewmodeloffset "0 5 6". But that doesn't appear to be commonly used.]



Instuctions adding it to stock GLQuake/WinQuake


1. First we need 1 extra addition to mathlib so open mathlib.h

Quote:
//Add this definition to very bottom
int ParseFloats(char *s, float *f, int *f_size);


2. Now open mathlib.c and add the function itself

Quote:
Code:
// Add this to the bottom if you prefer.

int ParseFloats(char *s, float *f, int *f_size) {
   int i, argc;

   if (!s || !f || !f_size)
      Sys_Error("ParseFloats() wrong params");

   if (f_size[0] <= 0)
      return (f_size[0] = 0); // array have no size, unusual but no crime

   Cmd_TokenizeString(s);
   argc = min(Cmd_Argc(), f_size[0]);
   
   for(i = 0; i < argc; i++)
      f[i] = Q_atof(Cmd_Argv(i));

   for( ; i < f_size[0]; i++)
      f[i] = 0; // zeroing unused elements

   return (f_size[0] = argc);
}


3. Open view.c - Near the top, find "cvar_t crosshair" (about 60 lines from top).

Quote:
//Add this after crosshair cvar declaration
// the "true" means it saves to config
cvar_t r_viewmodeloffset = {"r_viewmodeloffset", "0", true};


4. Still in view.c, find void V_CalcRefdef (void) around line 850-860

Locate this rotten code:

Quote:
Code:
   for (i=0 ; i<3 ; i++)
   {
      view->origin[i] += forward[i]*bob*0.4;
//      view->origin[i] += right[i]*bob*0.4;
//      view->origin[i] += up[i]*bob*0.8;
   }
   view->origin[2] += bob;


Replace it with this ...

Quote:
Code:
#if 0
   for (i=0 ; i<3 ; i++)
   {
      view->origin[i] += forward[i]*bob*0.4;
//      view->origin[i] += right[i]*bob*0.4;
//      view->origin[i] += up[i]*bob*0.8;
   }
   view->origin[2] += bob;
#endif

#if 1   
   VectorCopy (r_refdef.vieworg, view->origin);
   VectorMA (view->origin, bob * 0.4, forward, view->origin);

   if (r_viewmodeloffset.string[0]) {
      float offset[3];
      int size = sizeof(offset)/sizeof(offset[0]);

      ParseFloats(r_viewmodeloffset.string, offset, &size);
      VectorMA (view->origin,  offset[0], right,   view->origin);
      VectorMA (view->origin, -offset[1], up,      view->origin);
      VectorMA (view->origin,  offset[2], forward, view->origin);
   }
#endif


5. In view.c, find the section where Cvar_RegisterVariable is. Add this one in there as such ...

Quote:
Code:
Cvar_RegisteVariable (&r_viewmodeloffset);


You are done. Compile + start up Quake and type r_viewmodeloffset 5 in the console. Or type r_viewmodeloffset -5 in the console.

I'm pretty sure this code made it's first appearance in FTEQW back in 2005 maybe.


Last edited by Baker on Fri Nov 21, 2008 1:24 pm; edited 5 times in total
Back to top
View user's profile Send private message
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Thu Nov 20, 2008 3:01 am    Post subject: Reply with quote

I've tried several times and cant seem to get it to work Question

compiles fine though, but when i type in command in console it has unknown command Confused
_________________
bah
Back to top
View user's profile Send private message AIM Address
Baker



Joined: 14 Mar 2006
Posts: 1538

PostPosted: Thu Nov 20, 2008 4:23 am    Post subject: Reply with quote

I've added a step #5, the part where r_viewmodeloffset gets registered was missing.
Back to top
View user's profile Send private message
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Thu Nov 20, 2008 4:40 am    Post subject: Reply with quote

yay with a capital V and a [space] it works perfectly

horrra for forward development of eyecandy useless but fun stuff Very Happy

http://www.albinoblacksheep.com/video/developers-remix
_________________
bah
Back to top
View user's profile Send private message AIM Address
Baker



Joined: 14 Mar 2006
Posts: 1538

PostPosted: Thu Nov 20, 2008 11:19 am    Post subject: Reply with quote

MeTcHsteekle wrote:
yay with a capital V and a [space] it works perfectly

horrra for forward development of eyecandy useless but fun stuff Very Happy

http://www.albinoblacksheep.com/video/developers-remix


Fixxored.
Back to top
View user's profile Send private message
Team Xlink



Joined: 25 Jun 2009
Posts: 320

PostPosted: Mon Nov 09, 2009 8:09 am    Post subject: Re: Tutorial: Adding r_viewmodeloffset to GLQuake/WinQuake Reply with quote

Baker wrote:
Adding r_viewmodeloffset cvar to a Quake engine

5. In view.c, find the section where Cvar_RegisterVariable is. Add this one in there as such ...

Quote:
Code:
Cvar_RegisteVariable (&r_viewmodeloffset);


Your missing the letter "r" on the end of Register, it should look like this:

Code:
Cvar_RegisterVariable (&r_viewmodeloffset);


Thank you for the tutorial, it works like a charm.
_________________
Anonymous wrote:
if it works, it works. if it doesn't, HAHAHA!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Inside3d Forums Forum Index -> Programming Tutorials All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2004 phpBB Group