mirror of
https://github.com/DrBeef/Quake2Quest.git
synced 2025-03-01 06:30:52 +00:00
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:
parent
c482550f80
commit
218361b56a
8 changed files with 66 additions and 34 deletions
|
@ -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"/>
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue