diff --git a/Projects/Android/AndroidManifest.xml b/Projects/Android/AndroidManifest.xml index 56a308e..9ee47b7 100644 --- a/Projects/Android/AndroidManifest.xml +++ b/Projects/Android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="5" + android:versionName="0.5.0" android:installLocation="auto" > diff --git a/Projects/Android/jni/Quake2VR/Q2VR_SurfaceView.c b/Projects/Android/jni/Quake2VR/Q2VR_SurfaceView.c index 05ffe5a..c732834 100644 --- a/Projects/Android/jni/Quake2VR/Q2VR_SurfaceView.c +++ b/Projects/Android/jni/Quake2VR/Q2VR_SurfaceView.c @@ -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: diff --git a/Projects/Android/jni/Quake2VR/VrCvars.h b/Projects/Android/jni/Quake2VR/VrCvars.h index 6015cdd..9b600b7 100644 --- a/Projects/Android/jni/Quake2VR/VrCvars.h +++ b/Projects/Android/jni/Quake2VR/VrCvars.h @@ -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; diff --git a/Projects/Android/jni/Quake2VR/VrInputDefault.c b/Projects/Android/jni/Quake2VR/VrInputDefault.c index 9e44c06..91318b2 100644 --- a/Projects/Android/jni/Quake2VR/VrInputDefault.c +++ b/Projects/Android/jni/Quake2VR/VrInputDefault.c @@ -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; diff --git a/Projects/Android/jni/quake2/src/client/cl_ents.c b/Projects/Android/jni/quake2/src/client/cl_ents.c index 317add5..2738f20 100644 --- a/Projects/Android/jni/quake2/src/client/cl_ents.c +++ b/Projects/Android/jni/quake2/src/client/cl_ents.c @@ -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); } /* diff --git a/Projects/Android/jni/quake2/src/game/p_client.c b/Projects/Android/jni/quake2/src/game/p_client.c index b2d0588..32e9fa7 100644 --- a/Projects/Android/jni/quake2/src/game/p_client.c +++ b/Projects/Android/jni/quake2/src/game/p_client.c @@ -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); diff --git a/Projects/Android/jni/quake2/src/game/p_weapon.c b/Projects/Android/jni/quake2/src/game/p_weapon.c index 9893081..5b6b3ad 100644 --- a/Projects/Android/jni/quake2/src/game/p_weapon.c +++ b/Projects/Android/jni/quake2/src/game/p_weapon.c @@ -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) diff --git a/Projects/Android/jni/quake2/src/qcommon/qcommon.h b/Projects/Android/jni/quake2/src/qcommon/qcommon.h index 9c3be65..f3f7b8d 100644 --- a/Projects/Android/jni/quake2/src/qcommon/qcommon.h +++ b/Projects/Android/jni/quake2/src/qcommon/qcommon.h @@ -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"