Various fixes - Weapon positioning

This commit is contained in:
Simon 2019-11-14 22:26:24 +00:00
parent a04f1ffed3
commit 3ffe6dd335
9 changed files with 79 additions and 40 deletions

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.drbeef.quake2quest" package="com.drbeef.quake2quest"
android:versionCode="1" android:versionCode="2"
android:versionName="0.1.0" android:installLocation="auto" > android:versionName="0.2.0" android:installLocation="auto" >
<!-- Tell the system this app requires OpenGL ES 3.1. --> <!-- Tell the system this app requires OpenGL ES 3.1. -->
<uses-feature android:glEsVersion="0x00030001" android:required="true"/> <uses-feature android:glEsVersion="0x00030001" android:required="true"/>

View file

@ -335,7 +335,7 @@ void HandleInput_Right(ovrMobile * Ovr, double displayTime )
#ifndef NDEBUG #ifndef NDEBUG
Cbuf_AddText( "cheats 1\n" ); Cbuf_AddText( "cheats 1\n" );
Cbuf_AddText( "give weapons\n" ); Cbuf_AddText( "give all\n" );
#endif #endif
} }

View file

@ -537,18 +537,30 @@ void CL_ParsePlayerstate (frame_t *oldframe, frame_t *newframe)
if (flags & PS_M_TYPE) if (flags & PS_M_TYPE)
state->pmove.pm_type = MSG_ReadByte (&net_message); state->pmove.pm_type = MSG_ReadByte (&net_message);
if (flags & PS_M_ORIGIN) if (flags & PS_VRSERVER) {
{ if (flags & PS_M_ORIGIN) {
state->pmove.origin[0] = MSG_ReadFloat (&net_message); state->pmove.origin[0] = MSG_ReadFloat(&net_message);
state->pmove.origin[1] = MSG_ReadFloat (&net_message); state->pmove.origin[1] = MSG_ReadFloat(&net_message);
state->pmove.origin[2] = MSG_ReadFloat (&net_message); state->pmove.origin[2] = MSG_ReadFloat(&net_message);
} }
if (flags & PS_M_VELOCITY) if (flags & PS_M_VELOCITY) {
{ state->pmove.velocity[0] = MSG_ReadFloat(&net_message);
state->pmove.velocity[0] = MSG_ReadFloat (&net_message); state->pmove.velocity[1] = MSG_ReadFloat(&net_message);
state->pmove.velocity[1] = MSG_ReadFloat (&net_message); state->pmove.velocity[2] = MSG_ReadFloat(&net_message);
state->pmove.velocity[2] = MSG_ReadFloat (&net_message); }
} else {
if (flags & PS_M_ORIGIN) {
state->pmove.origin[0] = MSG_ReadShort(&net_message);
state->pmove.origin[1] = MSG_ReadShort(&net_message);
state->pmove.origin[2] = MSG_ReadShort(&net_message);
}
if (flags & PS_M_VELOCITY) {
state->pmove.velocity[0] = MSG_ReadShort(&net_message);
state->pmove.velocity[1] = MSG_ReadShort(&net_message);
state->pmove.velocity[2] = MSG_ReadShort(&net_message);
}
} }
if (flags & PS_M_TIME) if (flags & PS_M_TIME)
@ -557,15 +569,26 @@ void CL_ParsePlayerstate (frame_t *oldframe, frame_t *newframe)
if (flags & PS_M_FLAGS) if (flags & PS_M_FLAGS)
state->pmove.pm_flags = MSG_ReadByte (&net_message); state->pmove.pm_flags = MSG_ReadByte (&net_message);
if (flags & PS_M_GRAVITY) if (flags & PS_VRSERVER) {
state->pmove.gravity = MSG_ReadFloat (&net_message); if (flags & PS_M_GRAVITY)
state->pmove.gravity = MSG_ReadFloat(&net_message);
if (flags & PS_M_DELTA_ANGLES) {
state->pmove.delta_angles[0] = MSG_ReadFloat(&net_message);
state->pmove.delta_angles[1] = MSG_ReadFloat(&net_message);
state->pmove.delta_angles[2] = MSG_ReadFloat(&net_message);
}
} else {
if (flags & PS_M_GRAVITY)
state->pmove.gravity = MSG_ReadShort(&net_message);
if (flags & PS_M_DELTA_ANGLES) {
state->pmove.delta_angles[0] = MSG_ReadShort(&net_message);
state->pmove.delta_angles[1] = MSG_ReadShort(&net_message);
state->pmove.delta_angles[2] = MSG_ReadShort(&net_message);
}
}
if (flags & PS_M_DELTA_ANGLES)
{
state->pmove.delta_angles[0] = MSG_ReadFloat (&net_message);
state->pmove.delta_angles[1] = MSG_ReadFloat (&net_message);
state->pmove.delta_angles[2] = MSG_ReadFloat (&net_message);
}
if (cl.attractloop) if (cl.attractloop)
state->pmove.pm_type = PM_FREEZE; // demo playback state->pmove.pm_type = PM_FREEZE; // demo playback
@ -598,10 +621,11 @@ void CL_ParsePlayerstate (frame_t *oldframe, frame_t *newframe)
{ {
state->gunindex = MSG_ReadByte (&net_message); state->gunindex = MSG_ReadByte (&net_message);
if (!isMultiplayer()) { if (flags & PS_VRSERVER) {
//Only read this if not multiplayer
state->weapmodel = MSG_ReadByte(&net_message); state->weapmodel = MSG_ReadByte(&net_message);
} } else {
state->weapmodel = 0;
}
} }
if (flags & PS_WEAPONFRAME) if (flags & PS_WEAPONFRAME)
@ -1352,6 +1376,7 @@ extern cvar_t *vr_worldscale;
extern vec3_t weaponangles; extern vec3_t weaponangles;
extern vec3_t weaponoffset; extern vec3_t weaponoffset;
extern vec3_t hmdorientation; extern vec3_t hmdorientation;
extern vec3_t hmdPosition;
void convertFromVRtoQ2(vec3_t in, vec3_t offset, vec3_t out); void convertFromVRtoQ2(vec3_t in, vec3_t offset, vec3_t out);
@ -1401,9 +1426,14 @@ static void SetWeapon6DOF(int weapmodel, vec3_t origin, vec3_t gunorigin, vec3_t
VectorAdd(origin, gunoffset, gunorigin); VectorAdd(origin, gunoffset, gunorigin);
VectorAdd(gunorigin, position_adjust, gunorigin); VectorAdd(gunorigin, position_adjust, gunorigin);
gunorigin[2] -= 12;
VectorCopy(weaponangles, gunangles); //add player actual real world height - controller location is relative to HMD
gunangles[PITCH] -= 5; // HACK!! (gun angle not quite right) gunorigin[2] -= (QUAKE_MARINE_HEIGHT * vr_worldscale->value);
gunorigin[2] += (hmdPosition[1] * vr_worldscale->value);
VectorCopy(weaponangles, gunangles);
gunangles[PITCH] -= 3; // HACK!! (gun angle not quite right)
} }
/* /*

View file

@ -518,11 +518,8 @@ V_RenderView
extern vec3_t hmdPosition; extern vec3_t hmdPosition;
extern cvar_t *vr_worldscale; extern cvar_t *vr_worldscale;
#define QUAKE_MARINE_HEIGHT 1.57
void V_RenderView( float stereo_separation ) void V_RenderView( float stereo_separation )
{ {
extern int entitycmpfnc( const entity_t *, const entity_t * ); extern int entitycmpfnc( const entity_t *, const entity_t * );
if (cls.state != ca_active) if (cls.state != ca_active)

View file

@ -620,7 +620,7 @@ void Con_DrawConsole (float frac, float separation)
SCR_AddDirtyPoint (offset,0); SCR_AddDirtyPoint (offset,0);
SCR_AddDirtyPoint (offset+viddef.width-1,lines-1); SCR_AddDirtyPoint (offset+viddef.width-1,lines-1);
Com_sprintf (version, sizeof(version), "v%4.2f", VERSION); Com_sprintf (version, sizeof(version), "Quake2Quest v%4.2f", VERSION);
for (x=0 ; x<5 ; x++) for (x=0 ; x<5 ; x++)
#ifdef QMAX #ifdef QMAX
re.DrawChar (offset+viddef.width-44+x*8, lines-12, 128+version[x],1); re.DrawChar (offset+viddef.width-44+x*8, lines-12, 128+version[x],1);

View file

@ -1574,6 +1574,7 @@ vec3_t angles_b;
extern vec3_t weaponangles; extern vec3_t weaponangles;
extern vec3_t weaponoffset; extern vec3_t weaponoffset;
extern vec3_t hmdPosition;
extern cvar_t *vr_worldscale; extern cvar_t *vr_worldscale;
@ -1600,9 +1601,17 @@ static void SV_SetWeapon_Client6DOF(edict_t *ent)
vec3_t origin; vec3_t origin;
vec3_t weaponoffsetQ2; vec3_t weaponoffsetQ2;
vec3_t offset; vec3_t offset;
VectorSet(offset, 0, 0, ent->viewheight-8); VectorSet(offset, 0, 0, 7-ent->viewheight);
convertFromVRtoQ2(weaponoffset, offset, weaponoffsetQ2); convertFromVRtoQ2(weaponoffset, offset, weaponoffsetQ2);
VectorCopy(ent->s.origin, origin); VectorCopy(ent->s.origin, origin);
//add player actual real world height - controller location is relative to HMD
if (ent->client->ps.pmove.pm_flags & PMF_DUCKED)
{
origin[2] -= 48; //??
}
origin[2] += (hmdPosition[1] * vr_worldscale->value);
VectorAdd(weaponoffsetQ2, origin, ent->s.origin); VectorAdd(weaponoffsetQ2, origin, ent->s.origin);
VectorCopy(weaponangles, ent->client->v_angle); // use adjusted angles VectorCopy(weaponangles, ent->client->v_angle); // use adjusted angles
} }

View file

@ -1506,7 +1506,7 @@ void Qcommon_Init (int argc, char **argv)
dedicated = Cvar_Get ("dedicated", "0", CVAR_NOSET); dedicated = Cvar_Get ("dedicated", "0", CVAR_NOSET);
#endif #endif
s = va("%4.2f %s %s %s", VERSION, CPUSTRING, __DATE__, BUILDSTRING); s = va("Quake2Quest %4.2f %s %s %s", VERSION, CPUSTRING, __DATE__, BUILDSTRING);
Cvar_Get ("version", s, CVAR_SERVERINFO|CVAR_NOSET); Cvar_Get ("version", s, CVAR_SERVERINFO|CVAR_NOSET);

View file

@ -26,7 +26,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "../game/q_shared.h" #include "../game/q_shared.h"
#define VERSION 3.21 //#define VERSION 3.21
#define VERSION 0.2
#define BASEDIRNAME "baseq2" #define BASEDIRNAME "baseq2"
@ -193,6 +194,8 @@ PROTOCOL
#define PROTOCOL_VERSION 34 #define PROTOCOL_VERSION 34
#define QUAKE_MARINE_HEIGHT 1.57
//========================================= //=========================================
#define PORT_MASTER 27900 #define PORT_MASTER 27900
@ -278,6 +281,8 @@ enum clc_ops_e
#define PS_WEAPONFRAME (1<<13) #define PS_WEAPONFRAME (1<<13)
#define PS_RDFLAGS (1<<14) #define PS_RDFLAGS (1<<14)
#define PS_VRSERVER (1<<15)
//============================================== //==============================================
// user_cmd_t communication // user_cmd_t communication

View file

@ -241,7 +241,7 @@ void SV_WritePlayerstateToClient (client_frame_t *from, client_frame_t *to, size
// //
// determine what needs to be sent // determine what needs to be sent
// //
pflags = 0; pflags = PS_VRSERVER; // we are a VR server!
if (ps->pmove.pm_type != ops->pmove.pm_type) if (ps->pmove.pm_type != ops->pmove.pm_type)
pflags |= PS_M_TYPE; pflags |= PS_M_TYPE;
@ -373,10 +373,8 @@ void SV_WritePlayerstateToClient (client_frame_t *from, client_frame_t *to, size
{ {
MSG_WriteByte (msg, ps->gunindex); MSG_WriteByte (msg, ps->gunindex);
if (!isMultiplayer()) { //We are a VR server so write this out
//Add if for multiplayer MSG_WriteByte(msg, ps->weapmodel);
MSG_WriteByte(msg, ps->weapmodel);
}
} }
if (pflags & PS_WEAPONFRAME) if (pflags & PS_WEAPONFRAME)