
Quake DeveLS - Player Speeds
Author: John Rittenhouse
Difficulty: Easy
I feel the
need...
Okay everyone has been
wondering how to have different player speeds I figured out how. I finally have
finished testing everything and getting all to work correctly. Alright paste
this code below in "p_client.c" right after the declaritions in
"void ClientThink (edict_t *ent, usercmd_t *ucmd)".
float ClassSpeedModifer, t; vec3_t velo; vec3_t end, forward, right, up,add; ClassSpeedModifer = ent->ClassSpeed * 0.2; //Figure out speed VectorClear (velo); AngleVectors (ent->client->v_angle, forward, right, up); VectorScale(forward, ucmd->forwardmove*ClassSpeedModifer, end); VectorAdd(end,velo,velo); AngleVectors (ent->client->v_angle, forward, right, up); VectorScale(right, ucmd->sidemove*ClassSpeedModifer, end); VectorAdd(end,velo,velo); //if not in water set it up so they aren't moving up or down when they press forward if (ent->waterlevel == 0) velo[2] = 0; if (ent->waterlevel==1)//feet are in the water { //Water slows you down or at least I think it should velo[0] *= 0.875; velo[1] *= 0.875; velo[2] *= 0.875; ClassSpeedModifer *= 0.875; } else if (ent->waterlevel==2)//waist is in the water { //Water slows you down or at least I think it should velo[0] *= 0.75; velo[1] *= 0.75; velo[2] *= 0.75; ClassSpeedModifer *= 0.75; } else if (ent->waterlevel==3)//whole body is in the water { //Water slows you down or at least I think it should velo[0] *= 0.6; velo[1] *= 0.6; velo[2] *= 0.6; ClassSpeedModifer *= 0.6; } if (ent->groundentity)//add VectorAdd(velo,ent->velocity,ent->velocity); else if (ent->waterlevel) VectorAdd(velo,ent->velocity,ent->velocity); else { //Allow for a little movement but not as much velo[0] *= 0.25; velo[1] *= 0.25; velo[2] *= 0.25; VectorAdd(velo,ent->velocity,ent->velocity); } //Make sure not going to fast. THis slows down grapple too t = VectorLength(ent->velocity); if (t > 300*ClassSpeedModifer || t < -300*ClassSpeedModifer) { VectorScale (ent->velocity, 300 * ClassSpeedModifer / t, ent->velocity); } //Set these to 0 so pmove thinks we aren't pressing forward or sideways since we are handling all the player forward and sideways speeds ucmd->forwardmove = 0; ucmd->sidemove = 0;
You now
need to define ClassSpeed in "g_local.h" so add at the bottom of the
edict_t declarations this
int ClassSpeed;
Alright
you will need to set ClassSpeed to a number somewhere. If I did this right 5
should be normal speed, 0 will be stopped. You could also set up some other
stuff so instead of a variable on the edict it is controlled by a console
variable but this is not necessary. I think I got most of the bugs worked out
but it seems whenever the ClassSpeed is 0 or real slow it seems to make the
player view spot move still. I might have forgot some other stuff but I think I
got it all.
|
This site, and all
content and graphics displayed on it, |