From d960d4bcf74f254d59b51ceec2858620d9c6bb35 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 13 Apr 2020 16:50:59 +0100 Subject: [PATCH] Several fixes - Don't let Brutal Doom flashlight trigger haptics - Haptic blip on item pickup - Default world scale reduced slightly to 34 - HUD default tweak --- .../Android/jni/QzDoom/QzDoom_SurfaceView.c | 5 ---- .../src/g_statusbar/sbar_mugshot.cpp | 6 +++++ .../src/gl/stereo3d/gl_stereo_cvars.cpp | 6 ++--- .../jni/gzdoom-g3.3mgw_mobile/src/p_mobj.cpp | 23 ++++++++++-------- .../jni/gzdoom-g3.3mgw_mobile/src/v_blend.cpp | 6 +++++ .../wadsrc/static/menudef.txt | 4 +-- assets/res/lzdoom.pk3 | Bin 3223383 -> 3223381 bytes 7 files changed, 30 insertions(+), 20 deletions(-) diff --git a/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c b/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c index 79b9063..6ecf2de 100644 --- a/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c +++ b/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c @@ -864,11 +864,6 @@ void setHMDPosition( float x, float y, float z, float yaw ) } } -bool isMultiplayer() -{ - return false;//Cvar_VariableValue("maxclients") > 1; -} - /* ======================== diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/g_statusbar/sbar_mugshot.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/g_statusbar/sbar_mugshot.cpp index 1662fdf..2e17cf5 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/g_statusbar/sbar_mugshot.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/g_statusbar/sbar_mugshot.cpp @@ -337,6 +337,8 @@ bool FMugShot::SetState(const char *state_name, bool wait_till_done, bool reset) // //=========================================================================== +extern "C" void QzDoom_Vibrate(float duration, int channel, float intensity ); + CVAR(Bool,st_oldouch,false,CVAR_ARCHIVE) int FMugShot::UpdateState(player_t *player, StateFlags stateflags) { @@ -348,6 +350,10 @@ int FMugShot::UpdateState(player_t *player, StateFlags stateflags) { if (player->bonuscount) { + //Short haptic blip on pickup + QzDoom_Vibrate(80, 0, 1.0); // left + QzDoom_Vibrate(80, 1, 1.0); // right + SetState("grin", false); return 0; } diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_stereo_cvars.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_stereo_cvars.cpp index 2607804..bce29b0 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_stereo_cvars.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_stereo_cvars.cpp @@ -56,7 +56,7 @@ CVAR(Float, vr_ipd, 0.064f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) // METERS CVAR(Float, vr_screendist, 0.80f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) // METERS // default conversion between (vertical) DOOM units and meters -CVAR(Float, vr_vunits_per_meter, 38.0f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) // METERS +CVAR(Float, vr_vunits_per_meter, 34.0f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) // METERS CVAR(Float, vr_height_adjust, 0.0f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) // METERS CVAR(Int, vr_control_scheme, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Bool, vr_move_use_offhand, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) @@ -68,8 +68,8 @@ CVAR(Int, vr_move_speed, 24, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Float, vr_run_multiplier, 1.6, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) //HUD control -CVAR(Float, vr_hud_scale, 0.5f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -CVAR(Float, vr_hud_stereo, 1.0f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CVAR(Float, vr_hud_scale, 0.3f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CVAR(Float, vr_hud_stereo, 1.8f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Float, vr_hud_rotate, 35.f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Bool, vr_hud_fixed_pitch, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Bool, vr_hud_fixed_roll, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_mobj.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_mobj.cpp index 3ac894c..ca897b8 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_mobj.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_mobj.cpp @@ -6771,22 +6771,25 @@ AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z, MissileActor->Vel3DFromAngle(pitch, MissileActor->Speed); } - - //Haptics - long rightHanded = vr_control_scheme < 10; - QzDoom_Vibrate(150, rightHanded ? 1 : 0, 0.8); - if (weaponStabilised) - { - QzDoom_Vibrate(150, rightHanded ? 0 : 1, 0.6); - } - - if (MissileActor->flags4 & MF4_SPECTRAL) { MissileActor->SetFriendPlayer(source->player); } + if (P_CheckMissileSpawn (MissileActor, source->radius)) { + //Could be the Brutal Doom flashlight! + if (MissileActor->DamageType.GetIndex() != 0) + { + //Haptics + long rightHanded = vr_control_scheme < 10; + QzDoom_Vibrate(150, rightHanded ? 1 : 0, 0.8); + if (weaponStabilised) + { + QzDoom_Vibrate(150, rightHanded ? 0 : 1, 0.6); + } + } + return MissileActor; } return NULL; diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/v_blend.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/v_blend.cpp index 41a02c2..a12bd75 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/v_blend.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/v_blend.cpp @@ -99,6 +99,8 @@ void V_AddBlend (float r, float g, float b, float a, float v_blend[4]) // //--------------------------------------------------------------------------- +extern "C" void QzDoom_Vibrate(float duration, int channel, float intensity ); + void V_AddPlayerBlend (player_t *CPlayer, float blend[4], float maxinvalpha, int maxpainblend) { int cnt; @@ -126,6 +128,10 @@ void V_AddPlayerBlend (player_t *CPlayer, float blend[4], float maxinvalpha, int { cnt = CPlayer->bonuscount << 3; + //Super short haptic blip on pickup + QzDoom_Vibrate(50, 0, 0.7); // left + QzDoom_Vibrate(50, 1, 0.7); // right + // [SP] Allow player to tone down intensity of pickup flash. cnt = (int)( cnt * pickup_fade_scalar ); diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/wadsrc/static/menudef.txt b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/wadsrc/static/menudef.txt index 02511d9..a881525 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/wadsrc/static/menudef.txt +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/wadsrc/static/menudef.txt @@ -2304,8 +2304,8 @@ OptionMenu VROptionsMenu protected StaticText " " Slider "VR HUD Scale", "vr_hud_scale", 0.05, 1.0, 0.05, 2 - Slider "VR HUD Stereo", "vr_hud_stereo", 0.05, 2.0, 0.05, 2 - Slider "VR HUD Pitch Rotate", "vr_hud_rotate", 0.0, 50.0, 2.0, 2 + Slider "VR HUD Stereo", "vr_hud_stereo", 0.0, 3.0, 0.1, 2 + Slider "VR HUD Pitch Rotate", "vr_hud_rotate", 0.0, 50.0, 1.0, 2 Option "VR HUD Fix Pitch", "vr_hud_fixed_pitch", "OnOff" Option "VR HUD Fix Roll", "vr_hud_fixed_roll", "OnOff" } diff --git a/assets/res/lzdoom.pk3 b/assets/res/lzdoom.pk3 index c458416ceb6b2492a521f91dcdfcbe23910642c7..abd53ca5b75d8f105334d4e91105289f95381eca 100644 GIT binary patch delta 7640 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 k`YR!-an5?mKL85L_UTb^0E#D!UI!>cjbfh%8W