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"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.drbeef.quake2quest"
android:versionCode="4"
android:versionName="0.4.0" android:installLocation="auto" >
android:versionCode="5"
android:versionName="0.5.0" android:installLocation="auto" >
<!-- Tell the system this app requires OpenGL ES 3.1. -->
<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_enable_crouching = Cvar_Get( "vr_enable_crouching", "0.85", 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:
//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_worldscale;
cvar_t *vr_weaponscale;
cvar_t *vr_weapon_stabilised;

View file

@ -19,6 +19,8 @@ Authors : Simon Brown
#include "../quake2/src/client/client.h"
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,
@ -32,7 +34,6 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
static qboolean dominantGripPushed = false;
static float dominantGripPushTime = 0.0f;
static qboolean inventoryManagementMode = false;
static qboolean vr_weapon_stabilised = false;
//Show screen view (if in multiplayer toggle scoreboard)
if (((pOffTrackedRemoteNew->Buttons & offButton2) !=
@ -75,7 +76,6 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
}
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) +
powf(pOffTracking->HeadPose.Pose.Position.y - pDominantTracking->HeadPose.Pose.Position.y, 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)
{
vr_weapon_stabilised = true;
Cvar_ForceSet("vr_weapon_stabilised", "1.0");
}
}
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;
if (vr_weapon_stabilised &&
//Don't trigger stabilisation if controllers are close together (holding Glock for example)
(distance > 0.15f))
if (vr_weapon_stabilised->value == 1.0f)
{
float z = pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z;
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)) {
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
//in meantime, then it wouldn't stop the gun firing and it would get stuck
static bool firingPrimary = false;

View file

@ -1374,6 +1374,7 @@ void CL_AddPacketEntities (frame_t *frame)
extern cvar_t *r_lefthand;
extern cvar_t *vr_worldscale;
extern cvar_t *vr_weaponscale;
extern vec3_t weaponangles;
extern vec3_t weaponoffset;
extern vec3_t hmdorientation;
@ -1399,34 +1400,34 @@ static void SetWeapon6DOF(int weapmodel, vec3_t origin, vec3_t gunorigin, vec3_t
vec3_t 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
vec3_t offset;
if (weapmodel == WEAP_BLASTER ||
weapmodel == WEAP_MACHINEGUN)
VectorSet(offset, 10, lrOffset, -5);
else if (weapmodel == WEAP_CHAINGUN)
VectorSet(offset, 2, lrOffset, -5);
VectorSet(offset, 17 * vr_weaponscale->value, lrOffset, -8 * vr_weaponscale->value);
else if (weapmodel == WEAP_SHOTGUN)
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
VectorSet(offset, 6, lrOffset, -5);
VectorSet(offset, 10 * vr_weaponscale->value, lrOffset, -8 * vr_weaponscale->value);
vec3_t tempAngles;
VectorCopy(weaponangles, tempAngles);
tempAngles[PITCH] -= 180.0;
vec3_t position_adjust;
vec3_t nullVec;
VectorSet(nullVec, 0, 0, 0);
matrix4x4 mat1;
Matrix4x4_CreateFromEntity(mat1, nullVec, offset, 1.0);
Matrix4x4_CreateFromEntity(mat1, vec3_origin, offset, 1.0);
matrix4x4 mat2;
Matrix4x4_CreateFromEntity(mat2, tempAngles, nullVec, 1.0);
Matrix4x4_CreateFromEntity(mat2, tempAngles, vec3_origin, 1.0);
matrix4x4 mat3;
Matrix4x4_Concat(mat3, mat2, mat1);
vec3_t position_adjust;
Matrix3x4_OriginFromMatrix(mat3, position_adjust);
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] += (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);
gunangles[PITCH] -= 3; // HACK!! (gun angle not quite right)
matrix4x4 matWeaponAngles;
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 weaponoffsetQ2;
vec3_t offset;
VectorSet(offset, 0, 0, 7-ent->viewheight);
VectorSet(offset, 0, 0, 6-ent->viewheight);
convertFromVRtoQ2(weaponoffset, offset, weaponoffsetQ2);
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 byte is_silenced;
extern cvar_t *r_lefthand;
extern cvar_t *vr_weapon_stabilised;
void weapon_grenade_fire (edict_t *ent, qboolean held);
@ -1003,13 +1004,23 @@ void Machinegun_Fire (edict_t *ent)
kick *= 4;
}
for (i=1 ; i<3 ; i++)
if (vr_weapon_stabilised->value == 1.0f)
{
ent->client->kick_origin[i] = crandom() * 0.35;
ent->client->kick_angles[i] = crandom() * 0.7;
for (i=1 ; i<3 ; i++)
{
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
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 0.4
#define VERSION 0.5
#define BASEDIRNAME "baseq2"