Several fixes

- Weapon stabilisation will reduce erratic fire of the machine gun
- If cheats enabled then pressing left thumbstick will "give all"
- Correct crap orientation of machine gun model
- Improved weapon scale
This commit is contained in:
Simon 2019-11-17 23:47:22 +00:00
parent c482550f80
commit 218361b56a
8 changed files with 66 additions and 34 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="4" android:versionCode="5"
android:versionName="0.4.0" android:installLocation="auto" > android:versionName="0.5.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

@ -1346,7 +1346,8 @@ void VR_Init()
vr_control_scheme = Cvar_Get( "vr_control_scheme", "0", CVAR_ARCHIVE); vr_control_scheme = Cvar_Get( "vr_control_scheme", "0", CVAR_ARCHIVE);
vr_enable_crouching = Cvar_Get( "vr_enable_crouching", "0.85", CVAR_ARCHIVE); vr_enable_crouching = Cvar_Get( "vr_enable_crouching", "0.85", CVAR_ARCHIVE);
vr_height_adjust = Cvar_Get( "vr_height_adjust", "0.0", CVAR_ARCHIVE); vr_height_adjust = Cvar_Get( "vr_height_adjust", "0.0", CVAR_ARCHIVE);
vr_weaponscale = Cvar_Get( "vr_weaponscale", "0.6", CVAR_ARCHIVE); vr_weaponscale = Cvar_Get( "vr_weaponscale", "0.56", CVAR_ARCHIVE);
vr_weapon_stabilised = Cvar_Get( "vr_weapon_stabilised", "0.0", CVAR_LATCH);
//The Engine (which is a derivative of Quake) uses a very specific unit size: //The Engine (which is a derivative of Quake) uses a very specific unit size:
//Wolfenstein 3D, DOOM and QUAKE use the same coordinate/unit system: //Wolfenstein 3D, DOOM and QUAKE use the same coordinate/unit system:

View file

@ -10,3 +10,4 @@ cvar_t *vr_enable_crouching;
cvar_t *vr_height_adjust; cvar_t *vr_height_adjust;
cvar_t *vr_worldscale; cvar_t *vr_worldscale;
cvar_t *vr_weaponscale; cvar_t *vr_weaponscale;
cvar_t *vr_weapon_stabilised;

View file

@ -19,6 +19,8 @@ Authors : Simon Brown
#include "../quake2/src/client/client.h" #include "../quake2/src/client/client.h"
extern cvar_t *cl_forwardspeed; extern cvar_t *cl_forwardspeed;
extern cvar_t *sv_cheats;
extern cvar_t *vr_weapon_stabilised;
void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking,
@ -32,7 +34,6 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
static qboolean dominantGripPushed = false; static qboolean dominantGripPushed = false;
static float dominantGripPushTime = 0.0f; static float dominantGripPushTime = 0.0f;
static qboolean inventoryManagementMode = false; static qboolean inventoryManagementMode = false;
static qboolean vr_weapon_stabilised = false;
//Show screen view (if in multiplayer toggle scoreboard) //Show screen view (if in multiplayer toggle scoreboard)
if (((pOffTrackedRemoteNew->Buttons & offButton2) != if (((pOffTrackedRemoteNew->Buttons & offButton2) !=
@ -75,7 +76,6 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
} }
else else
{ {
//If distance to off-hand remote is less than 35cm and user pushes grip, then we enable weapon stabilisation
float distance = sqrtf(powf(pOffTracking->HeadPose.Pose.Position.x - pDominantTracking->HeadPose.Pose.Position.x, 2) + float distance = sqrtf(powf(pOffTracking->HeadPose.Pose.Position.x - pDominantTracking->HeadPose.Pose.Position.x, 2) +
powf(pOffTracking->HeadPose.Pose.Position.y - pDominantTracking->HeadPose.Pose.Position.y, 2) + powf(pOffTracking->HeadPose.Pose.Position.y - pDominantTracking->HeadPose.Pose.Position.y, 2) +
powf(pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z, 2)); powf(pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z, 2));
@ -88,12 +88,12 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
{ {
if (distance < 0.50f) if (distance < 0.50f)
{ {
vr_weapon_stabilised = true; Cvar_ForceSet("vr_weapon_stabilised", "1.0");
} }
} }
else else
{ {
vr_weapon_stabilised = false; Cvar_ForceSet("vr_weapon_stabilised", "0.0");
} }
} }
@ -118,9 +118,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
weaponangles[ROLL] *= -1.0f; weaponangles[ROLL] *= -1.0f;
if (vr_weapon_stabilised && if (vr_weapon_stabilised->value == 1.0f)
//Don't trigger stabilisation if controllers are close together (holding Glock for example)
(distance > 0.15f))
{ {
float z = pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z; float z = pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z;
float x = pOffTracking->HeadPose.Pose.Position.x - pDominantTracking->HeadPose.Pose.Position.x; float x = pOffTracking->HeadPose.Pose.Position.x - pDominantTracking->HeadPose.Pose.Position.x;
@ -307,14 +305,21 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
(pOffTrackedRemoteOld->Buttons & offButton1)) && (pOffTrackedRemoteOld->Buttons & offButton1)) &&
(pOffTrackedRemoteOld->Buttons & offButton1)) { (pOffTrackedRemoteOld->Buttons & offButton1)) {
sendButtonActionSimple("cmd help"); sendButtonActionSimple("cmd help");
#ifndef NDEBUG
Cbuf_AddText( "cheats 1\n" );
Cbuf_AddText( "give all\n" );
#endif
} }
//Use (Action)
if ((pOffTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
(pOffTrackedRemoteOld->Buttons & ovrButton_Joystick)
&& (pOffTrackedRemoteNew->Buttons & ovrButton_Joystick)) {
//If cheats enabled, give all weapons/pickups to player
if (sv_cheats->value == 1.0f) {
Cbuf_AddText("give all\n");
}
}
//We need to record if we have started firing primary so that releasing trigger will stop definitely firing, if user has pushed grip //We need to record if we have started firing primary so that releasing trigger will stop definitely firing, if user has pushed grip
//in meantime, then it wouldn't stop the gun firing and it would get stuck //in meantime, then it wouldn't stop the gun firing and it would get stuck
static bool firingPrimary = false; static bool firingPrimary = false;

View file

@ -1374,6 +1374,7 @@ void CL_AddPacketEntities (frame_t *frame)
extern cvar_t *r_lefthand; extern cvar_t *r_lefthand;
extern cvar_t *vr_worldscale; extern cvar_t *vr_worldscale;
extern cvar_t *vr_weaponscale;
extern vec3_t weaponangles; extern vec3_t weaponangles;
extern vec3_t weaponoffset; extern vec3_t weaponoffset;
extern vec3_t hmdorientation; extern vec3_t hmdorientation;
@ -1399,34 +1400,34 @@ static void SetWeapon6DOF(int weapmodel, vec3_t origin, vec3_t gunorigin, vec3_t
vec3_t gunoffset; vec3_t gunoffset;
convertFromVRtoQ2(weaponoffset, NULL, gunoffset); convertFromVRtoQ2(weaponoffset, NULL, gunoffset);
int lrOffset = ( r_lefthand->value == 1.0F ) ? -4 : 4; int lrOffset = (( r_lefthand->value == 1.0F ) ? -7 : 7) * vr_weaponscale->value;
//fb / lr / ud //fb / lr / ud
vec3_t offset; vec3_t offset;
if (weapmodel == WEAP_BLASTER || if (weapmodel == WEAP_BLASTER ||
weapmodel == WEAP_MACHINEGUN) weapmodel == WEAP_MACHINEGUN)
VectorSet(offset, 10, lrOffset, -5); VectorSet(offset, 17 * vr_weaponscale->value, lrOffset, -8 * vr_weaponscale->value);
else if (weapmodel == WEAP_CHAINGUN) else if (weapmodel == WEAP_SHOTGUN)
VectorSet(offset, 2, lrOffset, -5); VectorSet(offset, 12 * vr_weaponscale->value, lrOffset * 1.12, -8 * vr_weaponscale->value);
else if (weapmodel == WEAP_CHAINGUN)
VectorSet(offset, 3.5 * vr_weaponscale->value, lrOffset, -8 * vr_weaponscale->value);
else else
VectorSet(offset, 6, lrOffset, -5); VectorSet(offset, 10 * vr_weaponscale->value, lrOffset, -8 * vr_weaponscale->value);
vec3_t tempAngles; vec3_t tempAngles;
VectorCopy(weaponangles, tempAngles); VectorCopy(weaponangles, tempAngles);
tempAngles[PITCH] -= 180.0; tempAngles[PITCH] -= 180.0;
vec3_t position_adjust;
vec3_t nullVec;
VectorSet(nullVec, 0, 0, 0);
matrix4x4 mat1; matrix4x4 mat1;
Matrix4x4_CreateFromEntity(mat1, nullVec, offset, 1.0); Matrix4x4_CreateFromEntity(mat1, vec3_origin, offset, 1.0);
matrix4x4 mat2; matrix4x4 mat2;
Matrix4x4_CreateFromEntity(mat2, tempAngles, nullVec, 1.0); Matrix4x4_CreateFromEntity(mat2, tempAngles, vec3_origin, 1.0);
matrix4x4 mat3; matrix4x4 mat3;
Matrix4x4_Concat(mat3, mat2, mat1); Matrix4x4_Concat(mat3, mat2, mat1);
vec3_t position_adjust;
Matrix3x4_OriginFromMatrix(mat3, position_adjust); Matrix3x4_OriginFromMatrix(mat3, position_adjust);
VectorAdd(origin, gunoffset, gunorigin); VectorAdd(origin, gunoffset, gunorigin);
@ -1436,9 +1437,22 @@ static void SetWeapon6DOF(int weapmodel, vec3_t origin, vec3_t gunorigin, vec3_t
gunorigin[2] -= (QUAKE_MARINE_HEIGHT * vr_worldscale->value); gunorigin[2] -= (QUAKE_MARINE_HEIGHT * vr_worldscale->value);
gunorigin[2] += (hmdPosition[1] * vr_worldscale->value); gunorigin[2] += (hmdPosition[1] * vr_worldscale->value);
matrix4x4 matAngleAdjust;
vec3_t angleAdjust;
if (weapmodel == WEAP_MACHINEGUN)
VectorSet(angleAdjust, -3, 6, -4); // Fix crap model orientation!!
else
VectorSet(angleAdjust, -3, 0, 0);
Matrix4x4_CreateFromEntity(matAngleAdjust, angleAdjust, vec3_origin, 1.0);
VectorCopy(weaponangles, gunangles); matrix4x4 matWeaponAngles;
gunangles[PITCH] -= 3; // HACK!! (gun angle not quite right) Matrix4x4_CreateFromEntity(matWeaponAngles, weaponangles, vec3_origin, 1.0);
matrix4x4 matGunAngles;
Matrix4x4_Concat(matGunAngles, matWeaponAngles, matAngleAdjust);
vec3_t dummy;
Matrix4x4_ConvertToEntity(matGunAngles, gunangles, dummy);
} }
/* /*

View file

@ -1601,7 +1601,7 @@ 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, 7-ent->viewheight); VectorSet(offset, 0, 0, 6-ent->viewheight);
convertFromVRtoQ2(weaponoffset, offset, weaponoffsetQ2); convertFromVRtoQ2(weaponoffset, offset, weaponoffsetQ2);
VectorCopy(ent->s.origin, origin); VectorCopy(ent->s.origin, origin);

View file

@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static qboolean is_quad; static qboolean is_quad;
static byte is_silenced; static byte is_silenced;
extern cvar_t *r_lefthand; extern cvar_t *r_lefthand;
extern cvar_t *vr_weapon_stabilised;
void weapon_grenade_fire (edict_t *ent, qboolean held); void weapon_grenade_fire (edict_t *ent, qboolean held);
@ -1003,13 +1004,23 @@ void Machinegun_Fire (edict_t *ent)
kick *= 4; kick *= 4;
} }
for (i=1 ; i<3 ; i++) if (vr_weapon_stabilised->value == 1.0f)
{ {
ent->client->kick_origin[i] = crandom() * 0.35; for (i=1 ; i<3 ; i++)
ent->client->kick_angles[i] = crandom() * 0.7; {
ent->client->kick_origin[i] = crandom() * 0.2;
ent->client->kick_angles[i] = crandom() * 0.2;
}
ent->client->kick_origin[0] = crandom() * 0.2;
} else {
for (i=1 ; i<3 ; i++)
{
ent->client->kick_origin[i] = crandom() * 0.35;
ent->client->kick_angles[i] = crandom() * 0.7;
}
ent->client->kick_origin[0] = crandom() * 0.35;
ent->client->kick_angles[0] = ent->client->machinegun_shots * -1.5;
} }
ent->client->kick_origin[0] = crandom() * 0.35;
ent->client->kick_angles[0] = ent->client->machinegun_shots * -1.5;
// raise the gun as it is firing // raise the gun as it is firing
if (!deathmatch->value) if (!deathmatch->value)

View file

@ -27,7 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//#define VERSION 3.21 //#define VERSION 3.21
#define VERSION 0.4 #define VERSION 0.5
#define BASEDIRNAME "baseq2" #define BASEDIRNAME "baseq2"