diff --git a/Projects/Android/AndroidManifest.xml b/Projects/Android/AndroidManifest.xml index 15074e4..2cb87be 100644 --- a/Projects/Android/AndroidManifest.xml +++ b/Projects/Android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="6" + android:versionName="0.0.6" android:installLocation="auto" > diff --git a/Projects/Android/jni/JKVR/VrClientInfo.h b/Projects/Android/jni/JKVR/VrClientInfo.h index eebb987..881cd28 100644 --- a/Projects/Android/jni/JKVR/VrClientInfo.h +++ b/Projects/Android/jni/JKVR/VrClientInfo.h @@ -23,7 +23,7 @@ typedef struct { vec3_t hmdorientation_last; // Don't use this, it is just for calculating delta! vec3_t hmdorientation_delta; - vec3_t weaponangles_knife; + vec3_t weaponangles_saber; vec3_t weaponangles; vec3_t weaponangles_last; // Don't use this, it is just for calculating delta! vec3_t weaponangles_delta; @@ -47,7 +47,8 @@ typedef struct { bool hasbinoculars; - bool velocitytriggered; // Weapon attack triggered by velocity (knife) + bool velocitytriggered; + float swingvelocity; vec3_t offhandangles; vec3_t offhandangles_last; // Don't use this, it is just for calculating delta! diff --git a/Projects/Android/jni/JKVR/VrInputDefault.cpp b/Projects/Android/jni/JKVR/VrInputDefault.cpp index c6b7a5e..c8e7e7c 100644 --- a/Projects/Android/jni/JKVR/VrInputDefault.cpp +++ b/Projects/Android/jni/JKVR/VrInputDefault.cpp @@ -108,8 +108,8 @@ void HandleInput_Default( ovrInputStateGamepad *pFootTrackingNew, ovrInputStateG { //Set gun angles - We need to calculate all those we might need (including adjustments) for the client to then take its pick vec3_t rotation = {0}; - rotation[PITCH] = 30; - QuatToYawPitchRoll(pWeapon->HeadPose.Pose.Orientation, rotation, vr.weaponangles_knife); + rotation[PITCH] = 45; + QuatToYawPitchRoll(pWeapon->HeadPose.Pose.Orientation, rotation, vr.weaponangles_saber); rotation[PITCH] = vr_weapon_pitchadjust->value; QuatToYawPitchRoll(pWeapon->HeadPose.Pose.Orientation, rotation, vr.weaponangles); @@ -228,16 +228,17 @@ void HandleInput_Default( ovrInputStateGamepad *pFootTrackingNew, ovrInputStateG vr.weaponoffset[2] = pWeapon->HeadPose.Pose.Position.z - vr.hmdposition[2]; vr.weaponoffset_timestamp = Sys_Milliseconds( ); + vr.swingvelocity = sqrtf(powf(pWeapon->HeadPose.LinearVelocity.x, 2) + + powf(pWeapon->HeadPose.LinearVelocity.y, 2) + + powf(pWeapon->HeadPose.LinearVelocity.z, 2)); + + //Does weapon velocity trigger attack (knife) and is it fast enough static bool velocityTriggeredAttack = false; if (vr.velocitytriggered) { static bool fired = qfalse; - float velocity = sqrtf(powf(pWeapon->HeadPose.LinearVelocity.x, 2) + - powf(pWeapon->HeadPose.LinearVelocity.y, 2) + - powf(pWeapon->HeadPose.LinearVelocity.z, 2)); - - velocityTriggeredAttack = (velocity > VELOCITY_TRIGGER); + velocityTriggeredAttack = (vr.swingvelocity > VELOCITY_TRIGGER); if (fired != velocityTriggeredAttack) { ALOGV("**WEAPON EVENT** veocity triggered %s", velocityTriggeredAttack ? "+attack" : "-attack"); diff --git a/Projects/Android/jni/JKVR/VrInputWeaponAlign.cpp b/Projects/Android/jni/JKVR/VrInputWeaponAlign.cpp index 04d5cf0..53b7398 100644 --- a/Projects/Android/jni/JKVR/VrInputWeaponAlign.cpp +++ b/Projects/Android/jni/JKVR/VrInputWeaponAlign.cpp @@ -49,7 +49,7 @@ void HandleInput_WeaponAlign( ovrInputStateTrackedRemote *pDominantTrackedRemote //Set gun angles - We need to calculate all those we might need (including adjustments) for the client to then take its pick vec3_t rotation = {0}; rotation[PITCH] = 10; - QuatToYawPitchRoll(pDominantTracking->HeadPose.Pose.Orientation, rotation, vr.weaponangles_knife); + QuatToYawPitchRoll(pDominantTracking->HeadPose.Pose.Orientation, rotation, vr.weaponangles_saber); rotation[PITCH] = vr_weapon_pitchadjust->value; QuatToYawPitchRoll(pDominantTracking->HeadPose.Pose.Orientation, rotation, vr.weaponangles); diff --git a/Projects/Android/jni/OpenJK/code/cgame/cg_local.h b/Projects/Android/jni/OpenJK/code/cgame/cg_local.h index 63b7629..7df2dc7 100644 --- a/Projects/Android/jni/OpenJK/code/cgame/cg_local.h +++ b/Projects/Android/jni/OpenJK/code/cgame/cg_local.h @@ -624,6 +624,7 @@ extern vmCvar_t cg_thirdPersonPitchOffset; extern vmCvar_t cg_thirdPersonVertOffset; extern vmCvar_t cg_thirdPersonCameraDamp; extern vmCvar_t cg_thirdPersonTargetDamp; +extern vmCvar_t cg_saberAutoThird; extern vmCvar_t cg_gunAutoFirst; extern vmCvar_t cg_stereoSeparation; diff --git a/Projects/Android/jni/OpenJK/code/cgame/cg_main.cpp b/Projects/Android/jni/OpenJK/code/cgame/cg_main.cpp index 41093b4..7fd34ff 100644 --- a/Projects/Android/jni/OpenJK/code/cgame/cg_main.cpp +++ b/Projects/Android/jni/OpenJK/code/cgame/cg_main.cpp @@ -305,6 +305,7 @@ vmCvar_t cg_thirdPersonPitchOffset; vmCvar_t cg_thirdPersonVertOffset; vmCvar_t cg_thirdPersonCameraDamp; vmCvar_t cg_thirdPersonTargetDamp; +vmCvar_t cg_saberAutoThird; vmCvar_t cg_gunAutoFirst; vmCvar_t cg_thirdPersonAlpha; @@ -453,6 +454,7 @@ static cvarTable_t cvarTable[] = { { &cg_thirdPersonAlpha, "cg_thirdPersonAlpha", "1.0", CVAR_ARCHIVE }, { &cg_thirdPersonAutoAlpha, "cg_thirdPersonAutoAlpha", "0", 0 }, // NOTE: also declare this in UI_Init + { &cg_saberAutoThird, "cg_saberAutoThird", "1", CVAR_ARCHIVE }, { &cg_gunAutoFirst, "cg_gunAutoFirst", "1", CVAR_ARCHIVE }, { &cg_pano, "pano", "0", 0 }, diff --git a/Projects/Android/jni/OpenJK/code/cgame/cg_players.cpp b/Projects/Android/jni/OpenJK/code/cgame/cg_players.cpp index 099a48f..28ee9b2 100644 --- a/Projects/Android/jni/OpenJK/code/cgame/cg_players.cpp +++ b/Projects/Android/jni/OpenJK/code/cgame/cg_players.cpp @@ -5841,8 +5841,8 @@ static void CG_DoSaber( vec3_t origin, vec3_t dir, float length, float lengthMax cgi_R_AddRefEntityToScene( &saber ); } -#define MAX_MARK_FRAGMENTS 128 -#define MAX_MARK_POINTS 384 +#define MAX_MARK_FRAGMENTS 256 +#define MAX_MARK_POINTS 768 extern markPoly_t *CG_AllocMark(); static void CG_CreateSaberMarks( vec3_t start, vec3_t end, vec3_t normal ) diff --git a/Projects/Android/jni/OpenJK/code/cgame/cg_view.cpp b/Projects/Android/jni/OpenJK/code/cgame/cg_view.cpp index 2df2775..d3441c8 100644 --- a/Projects/Android/jni/OpenJK/code/cgame/cg_view.cpp +++ b/Projects/Android/jni/OpenJK/code/cgame/cg_view.cpp @@ -2107,7 +2107,7 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView ) { || (cg.snap->ps.eFlags&EF_HELD_BY_SAND_CREATURE) || ( (g_entities[0].client&&g_entities[0].client->NPC_class==CLASS_ATST) - || (cg.snap->ps.weapon == WP_SABER || cg.snap->ps.weapon == WP_MELEE) +// || (cg.snap->ps.weapon == WP_SABER || cg.snap->ps.weapon == WP_MELEE) ) ); diff --git a/Projects/Android/jni/OpenJK/code/game/bg_local.h b/Projects/Android/jni/OpenJK/code/game/bg_local.h index fb2a234..38d84b8 100644 --- a/Projects/Android/jni/OpenJK/code/game/bg_local.h +++ b/Projects/Android/jni/OpenJK/code/game/bg_local.h @@ -80,6 +80,7 @@ void PM_StepSlideMove( float gravity ); void rotateAboutOrigin(float x, float y, float rotation, vec2_t out); void BG_CalculateVRWeaponPosition( vec3_t origin, vec3_t angles ); +void BG_CalculateVRSaberPosition( vec3_t origin, vec3_t angles ); void BG_CalculateVROffHandPosition( vec3_t origin, vec3_t angles ); void BG_ConvertFromVR(vec3_t in, vec3_t offset, vec3_t out); diff --git a/Projects/Android/jni/OpenJK/code/game/bg_misc.cpp b/Projects/Android/jni/OpenJK/code/game/bg_misc.cpp index fe7604f..b7bc297 100644 --- a/Projects/Android/jni/OpenJK/code/game/bg_misc.cpp +++ b/Projects/Android/jni/OpenJK/code/game/bg_misc.cpp @@ -756,6 +756,11 @@ void BG_CalculateVRWeaponPosition( vec3_t origin, vec3_t angles ) BG_CalculateVRPositionInWorld(vr->weaponposition, vr->weaponoffset, vr->weaponangles, origin, angles); } +void BG_CalculateVRSaberPosition( vec3_t origin, vec3_t angles ) +{ + BG_CalculateVRPositionInWorld(vr->weaponposition, vr->weaponoffset, vr->weaponangles_saber, origin, angles); +} + /* ============ BG_PlayerTouchesItem diff --git a/Projects/Android/jni/OpenJK/code/game/bg_pmove.cpp b/Projects/Android/jni/OpenJK/code/game/bg_pmove.cpp index 7bab6c7..5ee52c8 100644 --- a/Projects/Android/jni/OpenJK/code/game/bg_pmove.cpp +++ b/Projects/Android/jni/OpenJK/code/game/bg_pmove.cpp @@ -9034,9 +9034,9 @@ static void PM_FinishWeaponChange( void ) { if ( pm->gent ) { WP_SaberInitBladeData( pm->gent ); - if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) ) + if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) && cg_saberAutoThird.integer ) { - //gi.cvar_set( "cg_thirdperson", "1" ); + gi.cvar_set( "cg_thirdperson", "1" ); } } if ( trueSwitch ) diff --git a/Projects/Android/jni/OpenJK/code/game/g_emplaced.cpp b/Projects/Android/jni/OpenJK/code/game/g_emplaced.cpp index 9ef53cf..e922bea 100644 --- a/Projects/Android/jni/OpenJK/code/game/g_emplaced.cpp +++ b/Projects/Android/jni/OpenJK/code/game/g_emplaced.cpp @@ -1041,7 +1041,7 @@ extern void CG_ChangeWeapon( int num ); if ( ent->s.number < MAX_CLIENTS ) { - if ( ent->client->ps.weapon == WP_SABER ) + if ( ent->client->ps.weapon == WP_SABER && cg_saberAutoThird.value ) { gi.cvar_set( "cg_thirdperson", "1" ); } diff --git a/Projects/Android/jni/OpenJK/code/game/g_main.cpp b/Projects/Android/jni/OpenJK/code/game/g_main.cpp index dceac50..d1b716e 100644 --- a/Projects/Android/jni/OpenJK/code/game/g_main.cpp +++ b/Projects/Android/jni/OpenJK/code/game/g_main.cpp @@ -660,7 +660,7 @@ void G_InitCvars( void ) { com_buildScript = gi.cvar ("com_buildscript", "0", 0); g_saberAutoBlocking = gi.cvar( "g_saberAutoBlocking", "1", CVAR_CHEAT );//must press +block button to do any blocking - g_saberRealisticCombat = gi.cvar( "g_saberMoreRealistic", "0", CVAR_ARCHIVE );//makes collision more precise, increases damage + g_saberRealisticCombat = gi.cvar( "g_saberMoreRealistic", "1", CVAR_ARCHIVE );//makes collision more precise, increases damage debug_subdivision = gi.cvar( "debug_subdivision", "0", CVAR_ARCHIVE );//debug for dismemberment g_dismemberProbabilities = gi.cvar ( "g_dismemberProbabilities", "1", CVAR_ARCHIVE );//0 = ignore probabilities, 1 = use probabilities g_saberDamageCapping = gi.cvar( "g_saberDamageCapping", "1", CVAR_CHEAT );//caps damage of sabers vs players and NPC who use sabers diff --git a/Projects/Android/jni/OpenJK/code/ui/ui_atoms.cpp b/Projects/Android/jni/OpenJK/code/ui/ui_atoms.cpp index 7dc08a6..c789735 100644 --- a/Projects/Android/jni/OpenJK/code/ui/ui_atoms.cpp +++ b/Projects/Android/jni/OpenJK/code/ui/ui_atoms.cpp @@ -294,6 +294,7 @@ void UI_Init( int apiVersion, uiimport_t *uiimport, qboolean inGameLoad ) ui.Cvar_Create( "ui_prisonerobj_mintotal", "0", CVAR_ROM|CVAR_SAVEGAME|CVAR_NORESTART); ui.Cvar_Create( "g_dismemberment", "3", CVAR_ARCHIVE );//0 = none, 1 = arms and hands, 2 = legs, 3 = waist and head + ui.Cvar_Create( "cg_saberAutoThird", "0", CVAR_ARCHIVE ); ui.Cvar_Create( "cg_gunAutoFirst", "1", CVAR_ARCHIVE ); ui.Cvar_Create( "cg_crosshairIdentifyTarget", "1", CVAR_ARCHIVE ); ui.Cvar_Create( "g_subtitles", "0", CVAR_ARCHIVE ); diff --git a/Projects/Android/jni/OpenJK/codeJK2/cgame/cg_players.cpp b/Projects/Android/jni/OpenJK/codeJK2/cgame/cg_players.cpp index ffe357d..06d9d70 100644 --- a/Projects/Android/jni/OpenJK/codeJK2/cgame/cg_players.cpp +++ b/Projects/Android/jni/OpenJK/codeJK2/cgame/cg_players.cpp @@ -31,6 +31,7 @@ along with this program; if not, see . #include "../game/anims.h" #include "../game/wp_saber.h" #include "bg_local.h" +#include #define LOOK_SWING_SCALE 0.5 @@ -49,6 +50,7 @@ qboolean CG_RegisterClientModelname( clientInfo_t *ci, const char *headModelName const char *legsModelName, const char *legsSkinName ); void CG_PlayerAnimSounds( int animFileIndex, qboolean torso, int oldFrame, int frame, int entNum ); +extern void G_SoundOnEnt( gentity_t *ent, soundChannel_t channel, const char *soundPath ); extern void BG_G2SetBoneAngles( centity_t *cent, gentity_t *gent, int boneIndex, const vec3_t angles, const int flags, const Eorientations up, const Eorientations left, const Eorientations forward, qhandle_t *modelList ); extern void FX_BorgDeathSparkParticles( vec3_t origin, vec3_t angles, vec3_t vel, vec3_t user ); @@ -3426,7 +3428,33 @@ void CG_AddRefEntityWithPowerups( refEntity_t *ent, int powerups, centity_t *cen !gent->client->ps.powerups[PW_UNCLOAKING] && !gent->client->ps.powerups[PW_DISRUPTION] ) { - cgi_R_AddRefEntityToScene( ent ); + //SB: Never render any player model if 1st person + if (cent->gent->NPC || cg.renderingThirdPerson || + cent->gent->client->ps.weapon != WP_SABER) { + cgi_R_AddRefEntityToScene(ent); + } + else if (!cg.renderingThirdPerson && cent->gent->client->ps.weapon == WP_SABER) + { +//#ifdef JK2_MODE + refEntity_t hiltEnt; + memset( &hiltEnt, 0, sizeof(refEntity_t) ); + hiltEnt.renderfx = RF_DEPTHHACK | RF_FIRST_PERSON; + hiltEnt.hModel = cgi_R_RegisterModel( "models/weapons2/saber/saber_w.md3" ); + vec3_t angles; + BG_CalculateVRSaberPosition(hiltEnt.origin, hiltEnt.angles); + vec3_t axis[3]; + AnglesToAxis(hiltEnt.angles, axis); + VectorSubtract(vec3_origin, axis[2], hiltEnt.axis[0]); + VectorCopy(axis[1], hiltEnt.axis[1]); + VectorCopy(axis[0], hiltEnt.axis[2]); + cgi_R_AddRefEntityToScene(&hiltEnt); + if (vr->swingvelocity > 1.2f) + { + G_SoundOnEnt( cent->gent, CHAN_WEAPON, va( "sound/weapons/saber/saberhup%d.wav", Q_irand( 1, 9 ) ) ); + } +//#else +//#endif + } } // Disruptor Gun Alt-fire @@ -4281,8 +4309,8 @@ void CG_DoSaber( vec3_t origin, vec3_t dir, float length, float lengthMax, saber cgi_R_AddRefEntityToScene( &saber ); } -#define MAX_MARK_FRAGMENTS 128 -#define MAX_MARK_POINTS 384 +#define MAX_MARK_FRAGMENTS 256 +#define MAX_MARK_POINTS 768 extern markPoly_t *CG_AllocMark(); void CG_CreateSaberMarks( vec3_t start, vec3_t end, vec3_t normal ) @@ -4438,6 +4466,13 @@ Ghoul2 Insert Start // work the matrix axis stuff into the original axis and origins used. gi.G2API_GiveMeVectorFromMatrix(boltMatrix, ORIGIN, org_); gi.G2API_GiveMeVectorFromMatrix(boltMatrix, NEGATIVE_X, axis_[0]);//was NEGATIVE_Y, but the md3->glm exporter screws up this tag somethin' awful + if (!cg.renderingThirdPerson && !cent->gent->client->ps.saberInFlight) + { + vec3_t angles; + BG_CalculateVRSaberPosition(org_, angles); + AnglesToAxis(angles, axis_); + VectorMA(org_, 4.0f, axis_[0], org_); + } //Now figure out where this info will be next frame /* @@ -5147,6 +5182,13 @@ extern vmCvar_t cg_thirdPersonAlpha; { VectorCopy( ent.origin, cent->gent->client->renderInfo.muzzlePoint ); VectorCopy( ent.axis[0], cent->gent->client->renderInfo.muzzleDir ); + + if ( !cg.renderingThirdPerson && (cg.snap->ps.weapon == WP_SABER||cg.snap->ps.weapon == WP_MELEE)) + { + vec3_t angles; + BG_CalculateVRSaberPosition(cent->gent->client->renderInfo.muzzlePoint, angles); + AngleVectors( angles, cent->gent->client->renderInfo.muzzleDir, NULL, NULL ); + } } } //now try to get the right data @@ -5161,6 +5203,11 @@ extern vmCvar_t cg_thirdPersonAlpha; &boltMatrix, G2Angles, ent.origin, cg.time, cgs.model_draw, cent->currentState.modelScale ); gi.G2API_GiveMeVectorFromMatrix( boltMatrix, ORIGIN, cent->gent->client->renderInfo.handRPoint ); + if (!cg.renderingThirdPerson && !cent->gent->client->ps.saberInFlight) + { + vec3_t angles; + BG_CalculateVRSaberPosition(cent->gent->client->renderInfo.handRPoint, angles); + } } if ( cent->gent->handLBolt != -1 ) { @@ -5169,6 +5216,11 @@ extern vmCvar_t cg_thirdPersonAlpha; &boltMatrix, G2Angles, ent.origin, cg.time, cgs.model_draw, cent->currentState.modelScale ); gi.G2API_GiveMeVectorFromMatrix( boltMatrix, ORIGIN, cent->gent->client->renderInfo.handLPoint ); + if (!cg.renderingThirdPerson && !cent->gent->client->ps.saberInFlight) + { + vec3_t angles; + BG_CalculateVROffHandPosition(cent->gent->client->renderInfo.handLPoint, angles); + } } if ( cent->gent->footLBolt != -1 ) { diff --git a/Projects/Android/jni/OpenJK/codeJK2/game/bg_local.h b/Projects/Android/jni/OpenJK/codeJK2/game/bg_local.h index fb2a234..38d84b8 100644 --- a/Projects/Android/jni/OpenJK/codeJK2/game/bg_local.h +++ b/Projects/Android/jni/OpenJK/codeJK2/game/bg_local.h @@ -80,6 +80,7 @@ void PM_StepSlideMove( float gravity ); void rotateAboutOrigin(float x, float y, float rotation, vec2_t out); void BG_CalculateVRWeaponPosition( vec3_t origin, vec3_t angles ); +void BG_CalculateVRSaberPosition( vec3_t origin, vec3_t angles ); void BG_CalculateVROffHandPosition( vec3_t origin, vec3_t angles ); void BG_ConvertFromVR(vec3_t in, vec3_t offset, vec3_t out); diff --git a/Projects/Android/jni/OpenJK/codeJK2/game/bg_misc.cpp b/Projects/Android/jni/OpenJK/codeJK2/game/bg_misc.cpp index c9c55dc..cf9bf19 100644 --- a/Projects/Android/jni/OpenJK/codeJK2/game/bg_misc.cpp +++ b/Projects/Android/jni/OpenJK/codeJK2/game/bg_misc.cpp @@ -697,6 +697,11 @@ void BG_CalculateVRWeaponPosition( vec3_t origin, vec3_t angles ) BG_CalculateVRPositionInWorld(vr->weaponposition, vr->weaponoffset, vr->weaponangles, origin, angles); } +void BG_CalculateVRSaberPosition( vec3_t origin, vec3_t angles ) +{ + BG_CalculateVRPositionInWorld(vr->weaponposition, vr->weaponoffset, vr->weaponangles_saber, origin, angles); +} + /* ============ BG_PlayerTouchesItem diff --git a/Projects/Android/jni/OpenJK/codeJK2/game/g_main.cpp b/Projects/Android/jni/OpenJK/codeJK2/game/g_main.cpp index 1339b09..9029469 100644 --- a/Projects/Android/jni/OpenJK/codeJK2/game/g_main.cpp +++ b/Projects/Android/jni/OpenJK/codeJK2/game/g_main.cpp @@ -584,7 +584,7 @@ void G_InitCvars( void ) { com_buildScript = gi.cvar ("com_buildscript", "0", 0); g_saberAutoBlocking = gi.cvar( "g_saberAutoBlocking", "1", CVAR_ARCHIVE|CVAR_CHEAT );//must press +block button to do any blocking - g_saberRealisticCombat = gi.cvar( "g_saberRealisticCombat", "0", CVAR_ARCHIVE );//makes collision more precise, increases damage + g_saberRealisticCombat = gi.cvar( "g_saberRealisticCombat", "1", CVAR_ARCHIVE );//makes collision more precise, increases damage g_saberMoveSpeed = gi.cvar( "g_saberMoveSpeed", "1", CVAR_ARCHIVE|CVAR_CHEAT );//how fast you run while attacking with a saber g_saberAnimSpeed = gi.cvar( "g_saberAnimSpeed", "1", CVAR_ARCHIVE|CVAR_CHEAT );//how fast saber animations run g_saberAutoAim = gi.cvar( "g_saberAutoAim", "1", CVAR_ARCHIVE|CVAR_CHEAT );//auto-aims at enemies when not moving or when just running forward