Several changes

- Jedi Outcast now running properly
- Added Use to right thumbstick to bypass cutscenes
This commit is contained in:
Simon 2022-09-28 23:07:22 +01:00
parent adfc6da46d
commit 7cc4c4f281
34 changed files with 463 additions and 66 deletions

View file

@ -82,4 +82,8 @@ typedef struct {
} vr_client_info_t;
#ifndef JKVR_CLIENT
extern vr_client_info_t *vr;
#endif
#endif //vr_client_info_h

View file

@ -8,7 +8,6 @@
#include "../qcommon/q_shared.h"
#include "../qcommon/qcommon.h"
#include "VrClientInfo.h"
#define LOG_TAG "JKVR"

View file

@ -472,6 +472,13 @@ void HandleInput_Default( ovrInputStateGamepad *pFootTrackingNew, ovrInputStateG
sendButtonAction("+movedown", (primaryButtonsNew & primaryButton1));
}
//Use
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_RThumb) !=
(pDominantTrackedRemoteOld->Buttons & ovrButton_RThumb)) {
sendButtonAction("+use", (pDominantTrackedRemoteNew->Buttons & ovrButton_RThumb));
}
//Weapon Chooser
static bool itemSwitched = false;
if (between(-0.2f, pPrimaryJoystick->x, 0.2f) &&

View file

@ -9,7 +9,7 @@ LOCAL_MODULE := openjk_ja
LOCAL_CFLAGS := $(JK3_BASE_CFLAGS)
LOCAL_CPPFLAGS := $(JK3_BASE_CPPFLAGS) -DBOTLIB -D_JK2EXE
LOCAL_CPPFLAGS := $(JK3_BASE_CPPFLAGS) -DBOTLIB -D_JK2EXE -DJKVR_CLIENT
LOCAL_LDLIBS := $(JK3_BASE_LDLIBS)

View file

@ -9,7 +9,7 @@ LOCAL_MODULE := openjk_jo
LOCAL_CFLAGS := $(JK3_BASE_CFLAGS)
LOCAL_CPPFLAGS := $(JK3_BASE_CPPFLAGS) -DBOTLIB -D_JK2EXE -DJK2_MODE
LOCAL_CPPFLAGS := $(JK3_BASE_CPPFLAGS) -DBOTLIB -D_JK2EXE -DJK2_MODE -DJKVR_CLIENT
LOCAL_LDLIBS := $(JK3_BASE_LDLIBS)

View file

@ -8,7 +8,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := rd-gles_arm
LOCAL_CFLAGS := $(JK3_BASE_CFLAGS) -DHAVE_GLES -DRENDERER -D_JK2EXE -DSP_GAME -Wno-narrowing
LOCAL_CFLAGS := $(JK3_BASE_CFLAGS) -DHAVE_GLES -DRENDERER -D_JK2EXE -DJK2_MODE -DSP_GAME -Wno-narrowing
LOCAL_CPPFLAGS := $(JK3_BASE_CPPFLAGS)
LOCAL_LDLIBS := $(JK3_BASE_LDLIBS)

View file

@ -42,8 +42,6 @@ void CGCam_DistanceDisable( void );
extern qboolean CG_CalcFOVFromX( float fov_x );
extern void WP_SaberCatch( gentity_t *self, gentity_t *saber, qboolean switchToSaber );
extern vr_client_info_t *vr;
/*
TODO:
CloseUp, FullShot & Longshot commands:

View file

@ -35,8 +35,6 @@ extern vmCvar_t cg_debugHealthBars;
extern Vehicle_t *G_IsRidingVehicle( gentity_t *ent );
extern vr_client_info_t *vr;
void CG_DrawIconBackground(void);
void CG_DrawMissionInformation( void );
void CG_DrawInventorySelect( void );
@ -4288,7 +4286,7 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
cgi_R_LAGoggles();
}
if (!in_camera) {
if (!in_camera || vr->immersive_cinematics) {
//Vertical Positional Movement
cg.refdef.vieworg[2] -= (float)g_entities[cg.snap->ps.viewEntity].client->ps.viewheight;
cg.refdef.vieworg[2] += (vr->hmdposition[1] + cg_heightAdjust.value) * cg_worldScale.value;

View file

@ -26,8 +26,6 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "cg_media.h"
#include <JKVR/VrClientInfo.h>
extern vr_client_info_t *vr;
void CG_AdjustFrom640( float *x, float *y, float *w, float *h ) {
if (!vr->in_camera && !vr->using_screen_layer && !vr->scopeengaged)

View file

@ -463,9 +463,9 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
index = es->eventParm; // player predicted
if ( (char)index < 0 )
if ( index < 0 )
{
index = -(char)index;
index = -index;
bHadItem = qtrue;
}

View file

@ -88,8 +88,6 @@ const char *inv_names[] =
int force_icons[NUM_FORCE_POWERS];
extern vr_client_info_t *vr;
void CG_DrawDataPadHUD( centity_t *cent );
void CG_DrawDataPadObjectives(const centity_t *cent );
@ -331,6 +329,25 @@ vmCvar_t cg_hudFiles;
vmCvar_t cg_neverHearThatDumbBeepingSoundAgain;
vmCvar_t vr_weapon_adjustment_1;
vmCvar_t vr_weapon_adjustment_2;
vmCvar_t vr_weapon_adjustment_3;
vmCvar_t vr_weapon_adjustment_4;
vmCvar_t vr_weapon_adjustment_5;
vmCvar_t vr_weapon_adjustment_6;
vmCvar_t vr_weapon_adjustment_7;
vmCvar_t vr_weapon_adjustment_8;
vmCvar_t vr_weapon_adjustment_9;
vmCvar_t vr_weapon_adjustment_10;
vmCvar_t vr_weapon_adjustment_11;
vmCvar_t vr_weapon_adjustment_12;
vmCvar_t vr_weapon_adjustment_13;
vmCvar_t vr_weapon_adjustment_14;
vmCvar_t vr_weapon_adjustment_18;
vmCvar_t vr_weapon_adjustment_19;
vmCvar_t vr_weapon_adjustment_20;
vmCvar_t vr_weapon_adjustment_22;
vmCvar_t cg_VariantSoundCap; // 0 = no capping, else cap to (n) max (typically just 1, but allows more)
vmCvar_t cg_turnAnims;
vmCvar_t cg_motionBoneComp;
@ -453,6 +470,27 @@ static cvarTable_t cvarTable[] = {
{ &cg_missionInfoFlashTime, "cg_missionInfoFlashTime", "10000", 0 },
{ &cg_hudFiles, "cg_hudFiles", "ui/jahud.txt", CVAR_ARCHIVE},
//Default Weapon adjustments - these WILL be overridden
// scale,right,up,forward,pitch,yaw,roll
{ &vr_weapon_adjustment_1, "vr_weapon_adjustment_1", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_2, "vr_weapon_adjustment_2", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_3, "vr_weapon_adjustment_3", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_4, "vr_weapon_adjustment_4", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_5, "vr_weapon_adjustment_5", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_6, "vr_weapon_adjustment_6", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_7, "vr_weapon_adjustment_7", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_8, "vr_weapon_adjustment_8", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_9, "vr_weapon_adjustment_9", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_10, "vr_weapon_adjustment_10", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_11, "vr_weapon_adjustment_11", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_12, "vr_weapon_adjustment_12", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_13, "vr_weapon_adjustment_13", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_14, "vr_weapon_adjustment_14", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_18, "vr_weapon_adjustment_18", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_19, "vr_weapon_adjustment_19", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_20, "vr_weapon_adjustment_20", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &vr_weapon_adjustment_22, "vr_weapon_adjustment_22", "0.62,-9.8,11.3,-16.1,0.0,0.0,0.0", CVAR_ARCHIVE},
{ &cg_VariantSoundCap, "cg_VariantSoundCap", "0", 0 },
{ &cg_turnAnims, "cg_turnAnims", "0", 0 },
{ &cg_motionBoneComp, "cg_motionBoneComp", "2", 0 },

View file

@ -347,6 +347,7 @@ Ghoul2 Insert End
CG_OPENJK_MENU_PAINT_JK2,
CG_OPENJK_GETMENU_BYNAME_JK2,
CG_CVAR_GET_JK2,
} cgameJK2Import_t;
#endif

View file

@ -38,8 +38,6 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
float cg_zoomFov;
extern vr_client_info_t *vr;
//#define CG_CAM_ABOVE 2
extern qboolean CG_OnMovingPlat( playerState_t *ps );

View file

@ -32,8 +32,6 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include <bg_local.h>
#include <JKVR/VrClientInfo.h>
extern vr_client_info_t *vr;
extern void CG_LightningBolt( centity_t *cent, vec3_t origin );
#define PHASER_HOLDFRAME 2

View file

@ -32,6 +32,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "vmachine.h"
#include "qcommon/stringed_ingame.h"
#include "sys/sys_loadlib.h"
#include <JKVR/VrCommon.h>
vm_t cgvm;
@ -463,6 +464,9 @@ cgameImport_t CL_ConvertJK2SysCall( cgameJK2Import_t import )
case CG_CVAR_SET_JK2:
return CG_CVAR_SET;
break;
case CG_CVAR_GET_JK2:
return CG_CVAR_GET;
break;
case CG_ARGC_JK2:
return CG_ARGC;
break;

View file

@ -33,6 +33,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "qcommon/stringed_ingame.h"
#include "sys/sys_loadlib.h"
#include "qcommon/ojk_saved_game.h"
#include <JKVR/VrCommon.h>
#define RETRANSMIT_TIMEOUT 3000 // time between connection packet retransmits

View file

@ -31,8 +31,6 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "g_vehicles.h"
#include <JKVR/VrClientInfo.h>
extern vr_client_info_t *vr;
extern weaponData_t weaponData[WP_NUM_WEAPONS];
extern ammoData_t ammoData[AMMO_MAX];

View file

@ -32,8 +32,6 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "../qcommon/sstring.h"
#include <JKVR/VrClientInfo.h>
extern vr_client_info_t *vr;
#define LL(x) x=LittleLong(x)
#define LS(x) x=LittleShort(x)
#define LF(x) x=LittleFloat(x)

View file

@ -43,8 +43,6 @@ int r_numpolyverts;
int skyboxportal;
int drawskyboxportal;
extern vr_client_info_t *vr;
/*
====================
R_InitNextFrame

View file

@ -27,6 +27,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "cg_media.h"
#include "../game/g_roff.h"
#include <JKVR/VrClientInfo.h>
bool in_camera = false;
camera_t client_camera={};
@ -1080,7 +1081,8 @@ void CGCam_Update( void )
}
else
{
CG_CalcFOVFromX( client_camera.FOV );
float fov = vr && vr->immersive_cinematics ? vr->fov : client_camera.FOV;
CG_CalcFOVFromX( fov );
}
//Check for roffing angles
@ -1171,9 +1173,17 @@ void CGCam_Update( void )
//Normal fading - separate call because can finish after camera is disabled
CGCam_UpdateFade();
if (vr->immersive_cinematics)
{
float yaw = cg.refdefViewAngles[YAW] + vr->hmdorientation[YAW];
VectorCopy(vr->hmdorientation, cg.refdefViewAngles);
cg.refdefViewAngles[YAW] = yaw;
}
//Update shaking if there's any
//CGCam_UpdateSmooth( cg.refdef.vieworg, cg.refdefViewAngles );
CGCam_UpdateShake( cg.refdef.vieworg, cg.refdefViewAngles );
AnglesToAxis( cg.refdefViewAngles, cg.refdef.viewaxis );
}
/*

View file

@ -28,6 +28,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "cg_local.h"
#include "cg_media.h"
#include "../game/objectives.h"
#include <JKVR/VrClientInfo.h>
void CG_DrawIconBackground(void);
void CG_DrawMissionInformation( void );
@ -2466,28 +2467,36 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
VectorNormalize( vright_n );
VectorNormalize( vup_n );
cg.refdef.stereoView = stereoView;
switch ( stereoView ) {
case STEREO_CENTER:
separation = 0;
break;
case STEREO_LEFT:
separation = -cg_stereoSeparation.value / 2;
separation = cg_worldScale.value * (-cg_stereoSeparation.value / 2);
break;
case STEREO_RIGHT:
separation = cg_stereoSeparation.value / 2;
separation = cg_worldScale.value * (cg_stereoSeparation.value / 2);
break;
default:
separation = 0;
CG_Error( "CG_DrawActive: Undefined stereoView" );
}
cg.refdef.worldscale = cg_worldScale.value;
if (!in_camera) {
VectorCopy(vr->hmdorientation, cg.refdef.viewangles);
cg.refdef.viewangles[YAW] =
SHORT2ANGLE(cg.snap->ps.delta_angles[YAW]) + vr->hmdorientation[YAW] + vr->snapTurn;
AnglesToAxis(cg.refdef.viewangles, cg.refdef.viewaxis);
}
// clear around the rendered view if sized down
CG_TileClear();
// offset vieworg appropriately if we're doing stereo separation
VectorCopy( cg.refdef.vieworg, baseOrg );
if ( separation != 0 ) {
if ( separation != 0 && (!in_camera || vr->immersive_cinematics)) {
VectorMA( cg.refdef.vieworg, -separation, cg.refdef.viewaxis[1], cg.refdef.vieworg );
}
@ -2496,6 +2505,12 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
cgi_R_LAGoggles();
}
if (!in_camera || vr->immersive_cinematics) {
//Vertical Positional Movement
cg.refdef.vieworg[2] -= (float)g_entities[cg.snap->ps.viewEntity].client->ps.viewheight;
cg.refdef.vieworg[2] += (vr->hmdposition[1] + cg_heightAdjust.value) * cg_worldScale.value;
}
// draw 3D view
cgi_R_RenderScene( &cg.refdef );

View file

@ -23,6 +23,95 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "cg_local.h"
#include "cg_media.h"
#include <JKVR/VrClientInfo.h>
void CG_AdjustFrom640( float *x, float *y, float *w, float *h ) {
if (!vr->in_camera && !vr->using_screen_layer && !vr->scopeengaged)
{
float screenXScale = 1.0f / 3.5f;
float screenYScale = 1.0f / 3.5f;
float xoffset = -24;
if (cg.refdef.stereoView == 1) {
xoffset *= -1;
}
*x *= screenXScale;
*y *= screenYScale;
if (w != NULL) {
*w *= screenXScale;
}
if (h != NULL) {
*h *= screenYScale;
}
*x += (640 - (640 * screenXScale)) / 2.0f + xoffset;
*y += (480 - (480 * screenYScale)) / 2.0f;
}
}
void CG_AdjustFrom640Int( int *x, int *y, int *w, int *h ) {
if (!vr->in_camera && !vr->using_screen_layer && !vr->scopeengaged)
{
float screenXScale = 1.0f / 3.5f;
float screenYScale = 1.0f / 3.5f;
float xoffset = -24;
if (cg.refdef.stereoView == 1) {
xoffset *= -1;
}
*x *= screenXScale;
*y *= screenYScale;
if (w != NULL) {
*w *= screenXScale;
}
if (h != NULL) {
*h *= screenYScale;
}
*x += (640 - (640 * screenXScale)) / 2.0f + xoffset;
*y += (480 - (480 * screenYScale)) / 2.0f;
}
}
/*
================
CG_DrawSides
Coords are virtual 640x480
================
*/
void CG_DrawSides(float x, float y, float w, float h, float size) {
//size *= cgs.screenXScale;
CG_AdjustFrom640(&x, &y, &w, &h);
cgi_R_DrawStretchPic( x, y, size, h, 0, 0, 0, 0, cgs.media.whiteShader );
cgi_R_DrawStretchPic( x + w - size, y, size, h, 0, 0, 0, 0, cgs.media.whiteShader );
}
void CG_DrawTopBottom(float x, float y, float w, float h, float size) {
//size *= cgs.screenYScale;
CG_AdjustFrom640(&x, &y, &w, &h);
cgi_R_DrawStretchPic( x, y, w, size, 0, 0, 0, 0, cgs.media.whiteShader );
cgi_R_DrawStretchPic( x, y + h - size, w, size, 0, 0, 0, 0, cgs.media.whiteShader );
}
/*
================
CG_DrawRect
Coordinates are 640*480 virtual values
=================
*/
void CG_DrawRect( float x, float y, float width, float height, float size, const float *color ) {
cgi_R_SetColor( color );
CG_AdjustFrom640(&x, &y, &width, &height);
CG_DrawTopBottom(x, y, width, height, size);
CG_DrawSides(x, y, width, height, size);
cgi_R_SetColor( NULL );
}
/*
================
@ -33,6 +122,7 @@ Coordinates are 640*480 virtual values
*/
void CG_FillRect( float x, float y, float width, float height, const float *color ) {
cgi_R_SetColor( color );
CG_AdjustFrom640(&x, &y, &width, &height);
cgi_R_DrawStretchPic( x, y, width, height, 0, 0, 0, 0, cgs.media.whiteShader);
cgi_R_SetColor( NULL );
}
@ -48,6 +138,7 @@ Coordinates are 640*480 virtual values
void CG_Scissor( float x, float y, float width, float height)
{
CG_AdjustFrom640(&x, &y, &width, &height);
cgi_R_Scissor( x, y, width, height);
}
@ -62,6 +153,7 @@ A width of 0 will draw with the original image width
=================
*/
void CG_DrawPic( float x, float y, float width, float height, qhandle_t hShader ) {
CG_AdjustFrom640(&x, &y, &width, &height);
cgi_R_DrawStretchPic( x, y, width, height, 0, 0, 1, 1, hShader );
}
@ -76,6 +168,7 @@ Can also specify the exact texture coordinates
*/
void CG_DrawPic2( float x, float y, float width, float height, float s1, float t1, float s2, float t2, qhandle_t hShader )
{
CG_AdjustFrom640(&x, &y, &width, &height);
cgi_R_DrawStretchPic( x, y, width, height, s1, t1, s2, t2, hShader );
}
@ -89,6 +182,7 @@ rotates around the upper right corner of the passed in point
=================
*/
void CG_DrawRotatePic( float x, float y, float width, float height,float angle, qhandle_t hShader ) {
CG_AdjustFrom640(&x, &y, &width, &height);
cgi_R_DrawRotatePic( x, y, width, height, 0, 0, 1, 1, angle, hShader );
}
@ -102,6 +196,7 @@ Actually rotates around the center point of the passed in coordinates
=================
*/
void CG_DrawRotatePic2( float x, float y, float width, float height,float angle, qhandle_t hShader ) {
CG_AdjustFrom640(&x, &y, &width, &height);
cgi_R_DrawRotatePic2( x, y, width, height, 0, 0, 1, 1, angle, hShader );
}
@ -149,7 +244,8 @@ void CG_DrawChar( int x, int y, int width, int height, int ch ) {
size = 0.03125;
size2 = 0.0625;
cgi_R_DrawStretchPic( ax, ay, aw, ah, fcol, frow, fcol + size, frow + size2,
CG_AdjustFrom640(&ax, &ay, &aw, &ah);
cgi_R_DrawStretchPic( ax, ay, aw, ah, fcol, frow, fcol + size, frow + size2,
cgs.media.charsetShader );
}
@ -212,7 +308,10 @@ void CG_DrawStringExt( int x, int y, const char *string, const float *setColor,
void CG_DrawSmallStringColor( int x, int y, const char *s, vec4_t color ) {
CG_DrawStringExt( x, y, s, color, qtrue, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT );
auto fx = (float)x;
auto fy = (float)y;
CG_AdjustFrom640(&fx, &fy, NULL, NULL);
CG_DrawStringExt( (int)fx, (int)fy, s, color, qtrue, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT );
}
/*
@ -249,6 +348,8 @@ refresh window.
static void CG_TileClearBox( int x, int y, int w, int h, qhandle_t hShader ) {
float s1, t1, s2, t2;
// CG_AdjustFrom640Int(&x, &y, &w, &h);
s1 = x/64.0;
t1 = y/64.0;
s2 = (x+w)/64.0;
@ -394,17 +495,22 @@ void CG_DrawNumField (int x, int y, int width, int value,int charWidth,int charH
{
for (int i = 0; i < (width - l); i++ )
{
int _x = x;
int _y = y;
int _charWidth = charWidth;
int _charHeight = charHeight;
//CG_AdjustFrom640Int(&_x, &_y, &_charWidth, &_charHeight);
switch(style)
{
case NUM_FONT_SMALL:
CG_DrawPic( x,y, charWidth, charHeight, cgs.media.smallnumberShaders[0] );
CG_DrawPic( _x,_y, _charWidth, _charHeight, cgs.media.smallnumberShaders[0] );
break;
case NUM_FONT_CHUNKY:
CG_DrawPic( x,y, charWidth, charHeight, cgs.media.chunkyNumberShaders[0] );
CG_DrawPic( _x,_y, _charWidth, _charHeight, cgs.media.chunkyNumberShaders[0] );
break;
default:
case NUM_FONT_BIG:
CG_DrawPic( x,y, charWidth, charHeight, cgs.media.numberShaders[0] );
CG_DrawPic( _x,_y, _charWidth, _charHeight, cgs.media.numberShaders[0] );
break;
}
x += 2 + (xWidth);
@ -423,18 +529,23 @@ void CG_DrawNumField (int x, int y, int width, int value,int charWidth,int charH
else
frame = *ptr -'0';
int _x = x;
int _y = y;
int _charWidth = charWidth;
int _charHeight = charHeight;
//CG_AdjustFrom640Int(&_x, &_y, &_charWidth, &_charHeight);
switch(style)
{
case NUM_FONT_SMALL:
CG_DrawPic( x,y, charWidth, charHeight, cgs.media.smallnumberShaders[frame] );
CG_DrawPic( _x, _y, _charWidth, _charHeight, cgs.media.smallnumberShaders[frame] );
x++; // For a one line gap
break;
case NUM_FONT_CHUNKY:
CG_DrawPic( x,y, charWidth, charHeight, cgs.media.chunkyNumberShaders[frame] );
CG_DrawPic( _x, _y, _charWidth, _charHeight, cgs.media.chunkyNumberShaders[frame] );
break;
default:
case NUM_FONT_BIG:
CG_DrawPic( x,y, charWidth, charHeight, cgs.media.numberShaders[frame] );
CG_DrawPic( _x, _y, _charWidth, _charHeight, cgs.media.numberShaders[frame] );
break;
}
@ -453,5 +564,6 @@ CG_DrawProportionalString
void CG_DrawProportionalString( int x, int y, const char* str, int style, vec4_t color )
{
//assert(!style);//call this directly if you need style (OR it into the font handle)
CG_AdjustFrom640Int(&x, &y, NULL, NULL);
cgi_R_Font_DrawString (x, y, str, color, cgs.media.qhFontMedium, -1, 1.0f);
}

View file

@ -463,9 +463,9 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
index = es->eventParm; // player predicted
if ( (char)index < 0 )
if ( index < 0 )
{
index = -(char)index;
index = -index;
bHadItem = qtrue;
}

View file

@ -608,6 +608,8 @@ extern vmCvar_t cg_saberAutoThird;
extern vmCvar_t cg_gunAutoFirst;
extern vmCvar_t cg_stereoSeparation;
extern vmCvar_t cg_worldScale;
extern vmCvar_t cg_heightAdjust;
extern vmCvar_t cg_developer;
extern vmCvar_t cg_timescale;
extern vmCvar_t cg_skippingcin;
@ -639,6 +641,26 @@ extern vmCvar_t cg_smoothPlayerPos;
extern vmCvar_t cg_smoothPlayerPlat;
extern vmCvar_t cg_smoothPlayerPlatAccel;
//VR Weapon Offsets
extern vmCvar_t vr_weapon_adjustment_1;
extern vmCvar_t vr_weapon_adjustment_2;
extern vmCvar_t vr_weapon_adjustment_3;
extern vmCvar_t vr_weapon_adjustment_4;
extern vmCvar_t vr_weapon_adjustment_5;
extern vmCvar_t vr_weapon_adjustment_6;
extern vmCvar_t vr_weapon_adjustment_7;
extern vmCvar_t vr_weapon_adjustment_8;
extern vmCvar_t vr_weapon_adjustment_9;
extern vmCvar_t vr_weapon_adjustment_10;
extern vmCvar_t vr_weapon_adjustment_11;
extern vmCvar_t vr_weapon_adjustment_12;
extern vmCvar_t vr_weapon_adjustment_13;
extern vmCvar_t vr_weapon_adjustment_14;
extern vmCvar_t vr_weapon_adjustment_18;
extern vmCvar_t vr_weapon_adjustment_19;
extern vmCvar_t vr_weapon_adjustment_20;
extern vmCvar_t vr_weapon_adjustment_22;
void CG_NewClientinfo( int clientNum );
//
// cg_main.c
@ -919,6 +941,7 @@ int cgi_Milliseconds( void );
void cgi_Cvar_Register( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags );
void cgi_Cvar_Update( vmCvar_t *vmCvar );
void cgi_Cvar_Set( const char *var_name, const char *value );
char* cgi_Cvar_Get( const char *var_name );
// ServerCommand and ConsoleCommand parameter access

View file

@ -29,6 +29,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "../../code/qcommon/sstring.h"
#include "../code/qcommon/ojk_saved_game_helper.h"
#include <JKVR/VrClientInfo.h>
//NOTENOTE: Be sure to change the mirrored code in g_shared.h
typedef std::map< sstring_t, unsigned char, std::less<sstring_t> > namePrecache_m;
@ -107,8 +108,10 @@ extern "C" Q_EXPORT intptr_t vmMain( intptr_t command, intptr_t arg0, intptr_t a
centity_t *cent;
switch ( command ) {
case CG_INIT:
CG_Init( arg0 );
case CG_INIT: {
vr = (vr_client_info_t *) (arg1);
CG_Init(arg0);
}
return 0;
case CG_SHUTDOWN:
CG_Shutdown();
@ -223,6 +226,8 @@ centity_t cg_entities[MAX_GENTITIES];
weaponInfo_t cg_weapons[MAX_WEAPONS];
itemInfo_t cg_items[MAX_ITEMS];
vr_client_info_t *vr;
typedef struct {
qboolean registered; // Has the player picked it up
qboolean active; // Is it the chosen inventory item
@ -299,6 +304,8 @@ vmCvar_t cg_thirdPersonAutoAlpha;
vmCvar_t cg_thirdPersonHorzOffset;
vmCvar_t cg_stereoSeparation;
vmCvar_t cg_worldScale;
vmCvar_t cg_heightAdjust;
vmCvar_t cg_developer;
vmCvar_t cg_timescale;
vmCvar_t cg_skippingcin;
@ -361,7 +368,9 @@ static cvarTable_t cvarTable[] = {
{ &cg_drawGun, "cg_drawGun", "1", CVAR_ARCHIVE },
{ &cg_fov, "cg_fov", "80", CVAR_ARCHIVE },
{ &cg_fovAspectAdjust, "cg_fovAspectAdjust", "0", CVAR_ARCHIVE },
{ &cg_stereoSeparation, "cg_stereoSeparation", "0.4", CVAR_ARCHIVE },
{ &cg_stereoSeparation, "cg_stereoSeparation", "0.065", CVAR_ARCHIVE },
{ &cg_worldScale, "cg_worldScale", "37.5", CVAR_ARCHIVE },
{ &cg_heightAdjust, "cg_heightAdjust", "0.0", CVAR_ARCHIVE },
{ &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE },
{ &cg_draw2D, "cg_draw2D", "1", CVAR_ARCHIVE },
@ -371,7 +380,7 @@ static cvarTable_t cvarTable[] = {
{ &cg_drawFPS, "cg_drawFPS", "0", CVAR_ARCHIVE },
{ &cg_drawSnapshot, "cg_drawSnapshot", "0", CVAR_ARCHIVE },
{ &cg_drawAmmoWarning, "cg_drawAmmoWarning", "1", CVAR_ARCHIVE },
{ &cg_drawCrosshair, "cg_drawCrosshair", "1", CVAR_ARCHIVE },
{ &cg_drawCrosshair, "cg_drawCrosshair", "0", CVAR_ARCHIVE },
{ &cg_dynamicCrosshair, "cg_dynamicCrosshair", "1", CVAR_ARCHIVE },
{ &cg_crosshairIdentifyTarget, "cg_crosshairIdentifyTarget", "1", CVAR_ARCHIVE },
{ &cg_crosshairForceHint, "cg_crosshairForceHint", "1", CVAR_ARCHIVE|CVAR_SAVEGAME|CVAR_NORESTART },

View file

@ -125,8 +125,8 @@ temporary marks will not be stored or randomly oriented, but immediately
passed to the renderer.
=================
*/
#define MAX_MARK_FRAGMENTS 128
#define MAX_MARK_POINTS 384
#define MAX_MARK_FRAGMENTS 256
#define MAX_MARK_POINTS 768
void CG_ImpactMark( qhandle_t markShader, const vec3_t origin, const vec3_t dir,
float orientation, float red, float green, float blue, float alpha,
@ -225,8 +225,8 @@ void CG_ImpactMark( qhandle_t markShader, const vec3_t origin, const vec3_t dir,
CG_AddMarks
===============
*/
#define MARK_TOTAL_TIME 10000
#define MARK_FADE_TIME 1000
#define MARK_TOTAL_TIME 20000
#define MARK_FADE_TIME 10000
void CG_AddMarks( void ) {
int j;

View file

@ -30,6 +30,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "../game/ghoul2_shared.h"
#include "../game/anims.h"
#include "../game/wp_saber.h"
#include "bg_local.h"
#define LOOK_SWING_SCALE 0.5
@ -5787,7 +5788,14 @@ Ghoul2 Insert End
//FIXME: allow it to be put anywhere and move this out of if(torso.hModel)
//Will have to call CG_PositionRotatedEntityOnTag
CG_PositionEntityOnTag( &gun, &torso, torso.hModel, "tag_weapon");
//CG_PositionEntityOnTag( &gun, &torso, torso.hModel, "tag_weapon");
vec3_t angs;
BG_CalculateVRWeaponPosition(gun.origin, angs);
AnglesToAxis(angs, gun.axis);
//Gotta move this forward but test for now
VectorCopy( gun.origin, gun.lightingOrigin );
//--------------------- start saber hacks

View file

@ -198,6 +198,7 @@ Ghoul2 Insert End
CG_OPENJK_MENU_PAINT,
CG_OPENJK_GETMENU_BYNAME,
CG_CVAR_GET
} cgameImport_t;
//----------------------------------------------

View file

@ -67,6 +67,10 @@ void cgi_Cvar_Set( const char *var_name, const char *value ) {
Q_syscall( CG_CVAR_SET, var_name, value );
}
char* cgi_Cvar_Get( const char *var_name ) {
return (char*)Q_syscall( CG_CVAR_GET, var_name );
}
int cgi_Argc( void ) {
return Q_syscall( CG_ARGC );
}

View file

@ -30,12 +30,14 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "../game/wp_saber.h"
#include "../game/anims.h"
#include "../game/g_functions.h"
#include <JKVR/VrClientInfo.h>
#define MASK_CAMERACLIP (MASK_SOLID)
#define CAMERA_SIZE 4
float cg_zoomFov;
//#define CG_CAM_ABOVE 2
extern qboolean CG_OnMovingPlat( playerState_t *ps );
@ -1353,7 +1355,8 @@ static qboolean CG_CalcFov( void ) {
if ( &g_entities[cg.snap->ps.viewEntity] &&
g_entities[cg.snap->ps.viewEntity].NPC )
{//FIXME: looks bad when take over a jedi... but never really do that, do we?
fov_x = g_entities[cg.snap->ps.viewEntity].NPC->stats.hfov;
//fov_x = g_entities[cg.snap->ps.viewEntity].NPC->stats.hfov;
fov_x = vr ? vr->fov : 90.0f;
//sanity-cap?
if ( fov_x > 120 )
{
@ -1372,7 +1375,8 @@ static qboolean CG_CalcFov( void ) {
}
else
{
fov_x = 120;//FIXME: read from the NPC's fov stats?
//fov_x = 120;//FIXME: read from the NPC's fov stats?
fov_x = vr ? vr->fov : 90.0f;
}
}
}
@ -1380,6 +1384,7 @@ static qboolean CG_CalcFov( void ) {
{
fov_x = CG_ForceSpeedFOV();
} else {
/*
// user selectable
if ( cg.overrides.active & CG_OVERRIDE_FOV )
{
@ -1393,7 +1398,9 @@ static qboolean CG_CalcFov( void ) {
fov_x = 1;
} else if ( fov_x > 160 ) {
fov_x = 160;
}
}*/
fov_x = vr ? vr->fov : 90.0f;
// Disable zooming when in third person
if ( cg.zoomMode && cg.zoomMode < 3 )//&& !cg.renderingThirdPerson ) // light amp goggles do none of the zoom silliness
@ -1891,11 +1898,13 @@ wasForceSpeed=isForceSpeed;
}
cgi_SetUserCmdValue( cg.weaponSelect, speed, mPitchOverride, mYawOverride );
// this counter will be bumped for every valid scene we generate
cg.clientFrame++;
if ( stereoView == STEREO_LEFT ) {
// this counter will be bumped for every valid scene we generate
cg.clientFrame++;
// update cg.predicted_player_state
CG_PredictPlayerState();
// update cg.predicted_player_state
CG_PredictPlayerState();
}
// decide on third person view
cg.renderingThirdPerson = (qboolean)(
@ -1910,6 +1919,7 @@ wasForceSpeed=isForceSpeed;
cg.renderingThirdPerson = qfalse;
}
vr->in_camera = in_camera;
if ( in_camera )
{
// The camera takes over the view

View file

@ -27,6 +27,8 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "../game/wp_saber.h"
#include "../game/g_local.h"
#include "../game/anims.h"
#include <bg_local.h>
#include <JKVR/VrClientInfo.h>
extern void CG_LightningBolt( centity_t *cent, vec3_t origin );
@ -779,6 +781,82 @@ void CG_CalculateWeaponPosition( vec3_t origin, vec3_t angles )
angles[PITCH] += (scale * 0.5f ) * fracsin * 0.01;
}
static float CG_CalculateWeaponPositionAndScale( playerState_t *ps, vec3_t origin, vec3_t angles ) {
BG_CalculateVRWeaponPosition(origin, angles);
vec3_t offset;
//Weapon offset debugging
float scale=1.0f;
if (strcmp(cgi_Cvar_Get("vr_control_scheme"), "99") == 0) {
vr->weaponid = ps->weapon;
scale = vr->test_scale;
//Adjust angles for weapon models that aren't aligned very well
matrix4x4 m1, m2, m3;
vec3_t zero;
VectorClear(zero);
Matrix4x4_CreateFromEntity(m1, angles, zero, 1.0);
Matrix4x4_CreateFromEntity(m2, vr->test_angles, zero, 1.0);
Matrix4x4_Concat(m3, m1, m2);
Matrix4x4_ConvertToEntity(m3, angles, zero);
VectorCopy(vr->test_offset, offset);
CG_CenterPrint( vr->test_name, SMALLCHAR_WIDTH );
} else {
if (ps->weapon != 0)
{
char cvar_name[64];
Com_sprintf(cvar_name, sizeof(cvar_name), "vr_weapon_adjustment_%i", ps->weapon);
char* weapon_adjustment = cgi_Cvar_Get(cvar_name);
if (strlen(weapon_adjustment) > 0) {
vec3_t adjust;
vec3_t temp_offset;
VectorClear(temp_offset);
VectorClear(adjust);
sscanf(weapon_adjustment, "%f,%f,%f,%f,%f,%f,%f", &scale,
&(temp_offset[0]), &(temp_offset[1]), &(temp_offset[2]),
&(adjust[PITCH]), &(adjust[YAW]), &(adjust[ROLL]));
VectorScale(temp_offset, scale, offset);
if (!vr->right_handed)
{
//yaw needs to go in the other direction as left handed model is reversed
adjust[YAW] *= -1.0f;
}
//Adjust angles for weapon models that aren't aligned very well
matrix4x4 m1, m2, m3;
vec3_t zero;
VectorClear(zero);
Matrix4x4_CreateFromEntity(m1, angles, zero, 1.0);
Matrix4x4_CreateFromEntity(m2, adjust, zero, 1.0);
Matrix4x4_Concat(m3, m1, m2);
Matrix4x4_ConvertToEntity(m3, angles, zero);
}
}
}
//Now move weapon closer to proper origin
vec3_t forward, right, up;
AngleVectors( angles, forward, right, up );
VectorMA( origin, offset[2], forward, origin );
VectorMA( origin, offset[1], up, origin );
if (vr->right_handed) {
VectorMA(origin, offset[0], right, origin);
} else {
VectorMA(origin, -offset[0], right, origin);
}
return scale;
}
/*
======================
CG_MachinegunSpinAngle
@ -1028,22 +1106,54 @@ void CG_AddViewWeapon( playerState_t *ps )
return;
}
// set up gun position
CG_CalculateWeaponPosition( hand.origin, angles );
if (strcmp(cgi_Cvar_Get("vr_control_scheme"), "99") == 0) {
vec3_t origin;
vec3_t endForward, endRight, endUp;
vec3_t angles;
clientInfo_t ci;
BG_CalculateVRWeaponPosition( origin, angles );
vec3_t forward, right, up;
AngleVectors(angles, forward, right, up);
trace_t trace;
VectorMA(origin, 256, forward, endForward);
CG_TestLine(origin, endForward, FRAMETIME, 0xFF0000, 0.5 );
VectorMA(origin, 20, right, endRight);
CG_TestLine(origin, endRight, FRAMETIME, 0x00FF00, 0.5 );
VectorMA(origin, 20, up, endUp);
CG_TestLine(origin, endUp, FRAMETIME, 0x0000FF, 0.5 );
CG_CenterPrint(vr->test_name, 240);
}
// set up gun position
float scale = CG_CalculateWeaponPositionAndScale( ps, hand.origin, angles );
VectorMA( hand.origin, cg_gun_x.value, cg.refdef.viewaxis[0], hand.origin );
VectorMA( hand.origin, (cg_gun_y.value+leanOffset), cg.refdef.viewaxis[1], hand.origin );
VectorMA( hand.origin, (cg_gun_z.value+fovOffset), cg.refdef.viewaxis[2], hand.origin );
AnglesToAxis( angles, hand.axis );
if ( cg_fovViewmodel.integer )
//scale the whole model (hand and weapon)
for ( int i = 0; i < 3; i++ ) {
VectorScale( hand.axis[i], (vr->right_handed || i != 1 ) ? scale : -scale, hand.axis[i] );
}
//Gotta move this forward but test for now
VectorCopy( hand.origin, hand.lightingOrigin );
/* if ( cg_fovViewmodel.integer )
{
float fracDistFOV = tanf( cg.refdef.fov_x * ( M_PI/180 ) * 0.5f );
float fracWeapFOV = ( 1.0f / fracDistFOV ) * tanf( cgFov * ( M_PI/180 ) * 0.5f );
VectorScale( hand.axis[0], fracWeapFOV, hand.axis[0] );
}
*/
// map torso animations to weapon animations
if ( cg_gun_frame.integer )
{

View file

@ -23,6 +23,9 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
// bg_local.h -- local definitions for the bg (both games) files
#ifndef _BG_LOCAL_H
#define _BG_LOCAL_H
#define TIMER_LAND 130
#define TIMER_GESTURE (34*66+50)
@ -75,5 +78,12 @@ void PM_AddEvent( int newEvent );
qboolean PM_SlideMove( float gravity );
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_CalculateVROffHandPosition( vec3_t origin, vec3_t angles );
void BG_ConvertFromVR(vec3_t in, vec3_t offset, vec3_t out);
#endif

View file

@ -21,11 +21,13 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
===========================================================================
*/
// included in both game dll and client
#define GAME_INCLUDE
#include "../cgame/cg_local.h"
#include "g_local.h"
#include "bg_public.h"
#include "g_items.h"
#include <JKVR/VrClientInfo.h>
extern weaponData_t weaponData[WP_NUM_WEAPONS];
@ -645,6 +647,56 @@ void PlayerStateToEntityState( playerState_t *ps, entityState_t *s ) {
}
void rotateAboutOrigin(float x, float y, float rotation, vec2_t out)
{
out[0] = cosf(DEG2RAD(-rotation)) * x + sinf(DEG2RAD(-rotation)) * y;
out[1] = cosf(DEG2RAD(-rotation)) * y - sinf(DEG2RAD(-rotation)) * x;
}
void BG_ConvertFromVR(vec3_t in, vec3_t offset, vec3_t out)
{
vec3_t vrSpace;
VectorSet(vrSpace, in[2], in[0], in[1] );
vec2_t r;
rotateAboutOrigin(vrSpace[0], vrSpace[1], cg.refdefViewAngles[YAW] - vr->hmdorientation[YAW], r);
vrSpace[0] = -r[0];
vrSpace[1] = -r[1];
vec3_t temp;
VectorScale(vrSpace, cg_worldScale.value, temp);
if (offset) {
VectorAdd(temp, offset, out);
} else {
VectorCopy(temp, out);
}
}
static void BG_CalculateVRPositionInWorld( vec3_t in_position, vec3_t in_offset, vec3_t in_orientation, vec3_t origin, vec3_t angles )
{
vec3_t offset;
VectorCopy(in_offset, offset);
offset[1] = 0; // up/down is index 1 in this case
BG_ConvertFromVR(offset, cg.refdef.vieworg, origin);
origin[2] -= (float)g_entities[cg.snap->ps.viewEntity].client->ps.viewheight;
origin[2] += in_position[1] * cg_worldScale.value;
VectorCopy(in_orientation, angles);
angles[YAW] += (cg.refdefViewAngles[YAW] - vr->hmdorientation[YAW]);
}
void BG_CalculateVROffHandPosition( vec3_t origin, vec3_t angles )
{
BG_CalculateVRPositionInWorld(vr->offhandposition, vr->offhandoffset, vr->offhandangles, origin, angles);
}
void BG_CalculateVRWeaponPosition( vec3_t origin, vec3_t angles )
{
BG_CalculateVRPositionInWorld(vr->weaponposition, vr->weaponoffset, vr->weaponangles, origin, angles);
}
/*
============
BG_PlayerTouchesItem

View file

@ -40,7 +40,7 @@ import static android.system.Os.setenv;
// Load the gles3jni library right away to make sure JNI_OnLoad() gets called as the very first thing.
static
{
System.loadLibrary( "openjk_ja" );
System.loadLibrary( "openjk_jo" );
}
private static final String TAG = "JKQuest";
@ -59,16 +59,11 @@ import static android.system.Os.setenv;
// Main components
protected static GLES3JNIActivity mSingleton;
// Audio
protected static AudioTrack mAudioTrack;
protected static AudioRecord mAudioRecord;
public static void initialize() {
// The static nature of the singleton and Android quirkyness force us to initialize everything here
// Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values
mSingleton = null;
mAudioTrack = null;
mAudioRecord = null;
}
public void shutdown() {