Android: Implement vibrate-on-press and dualshock vibration
This commit is contained in:
parent
c1a81aefa4
commit
82ffb1bc81
|
@ -6,6 +6,7 @@
|
|||
#include "common/log.h"
|
||||
#include "common/string.h"
|
||||
#include "common/string_util.h"
|
||||
#include "common/timer.h"
|
||||
#include "common/timestamp.h"
|
||||
#include "core/bios.h"
|
||||
#include "core/cheats.h"
|
||||
|
@ -39,6 +40,7 @@ static jmethodID s_EmulationActivity_method_reportMessage;
|
|||
static jmethodID s_EmulationActivity_method_onEmulationStarted;
|
||||
static jmethodID s_EmulationActivity_method_onEmulationStopped;
|
||||
static jmethodID s_EmulationActivity_method_onGameTitleChanged;
|
||||
static jmethodID s_EmulationActivity_method_setVibration;
|
||||
static jclass s_PatchCode_class;
|
||||
static jmethodID s_PatchCode_constructor;
|
||||
|
||||
|
@ -185,6 +187,8 @@ void AndroidHostInterface::LoadAndConvertSettings()
|
|||
&g_settings.cpu_overclock_denominator);
|
||||
g_settings.cpu_overclock_enable = (overclock_percent != 100);
|
||||
g_settings.UpdateOverclockActive();
|
||||
|
||||
m_vibration_enabled = m_settings_interface.GetBoolValue("Controller1", "Vibration", false);
|
||||
}
|
||||
|
||||
void AndroidHostInterface::UpdateInputMap()
|
||||
|
@ -353,8 +357,13 @@ void AndroidHostInterface::EmulationThreadLoop()
|
|||
|
||||
// simulate the system if not paused
|
||||
if (System::IsRunning())
|
||||
{
|
||||
System::RunFrame();
|
||||
|
||||
if (m_vibration_enabled)
|
||||
UpdateVibration();
|
||||
}
|
||||
|
||||
// rendering
|
||||
{
|
||||
DrawImGuiWindows();
|
||||
|
@ -432,10 +441,21 @@ std::unique_ptr<AudioStream> AndroidHostInterface::CreateAudioStream(AudioBacken
|
|||
return CommonHostInterface::CreateAudioStream(backend);
|
||||
}
|
||||
|
||||
void AndroidHostInterface::OnSystemPaused(bool paused)
|
||||
{
|
||||
CommonHostInterface::OnSystemPaused(paused);
|
||||
|
||||
if (m_vibration_enabled)
|
||||
SetVibration(false);
|
||||
}
|
||||
|
||||
void AndroidHostInterface::OnSystemDestroyed()
|
||||
{
|
||||
CommonHostInterface::OnSystemDestroyed();
|
||||
ClearOSDMessages();
|
||||
|
||||
if (m_vibration_enabled)
|
||||
SetVibration(false);
|
||||
}
|
||||
|
||||
void AndroidHostInterface::OnRunningGameChanged()
|
||||
|
@ -612,6 +632,51 @@ bool AndroidHostInterface::ImportPatchCodesFromString(const std::string& str)
|
|||
return true;
|
||||
}
|
||||
|
||||
void AndroidHostInterface::SetVibration(bool enabled)
|
||||
{
|
||||
const u64 current_time = Common::Timer::GetValue();
|
||||
if (Common::Timer::ConvertValueToSeconds(current_time - m_last_vibration_update_time) < 0.1f &&
|
||||
m_last_vibration_state == enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_last_vibration_state = enabled;
|
||||
m_last_vibration_update_time = current_time;
|
||||
|
||||
JNIEnv* env = AndroidHelpers::GetJNIEnv();
|
||||
if (m_emulation_activity_object) {
|
||||
env->CallVoidMethod(m_emulation_activity_object, s_EmulationActivity_method_setVibration,
|
||||
static_cast<jboolean>(enabled));
|
||||
}
|
||||
}
|
||||
|
||||
void AndroidHostInterface::UpdateVibration()
|
||||
{
|
||||
static constexpr float THRESHOLD = 0.5f;
|
||||
|
||||
bool vibration_state = false;
|
||||
|
||||
for (u32 i = 0; i < NUM_CONTROLLER_AND_CARD_PORTS; i++)
|
||||
{
|
||||
Controller* controller = System::GetController(i);
|
||||
if (!controller)
|
||||
continue;
|
||||
|
||||
const u32 motors = controller->GetVibrationMotorCount();
|
||||
for (u32 j = 0; j < motors; j++)
|
||||
{
|
||||
if (controller->GetVibrationMotorStrength(j) >= THRESHOLD)
|
||||
{
|
||||
vibration_state = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SetVibration(vibration_state);
|
||||
}
|
||||
|
||||
extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
|
||||
{
|
||||
Log::SetDebugOutputParams(true, nullptr, LOGLEVEL_DEV);
|
||||
|
@ -653,6 +718,8 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
|
|||
env->GetMethodID(emulation_activity_class, "onEmulationStopped", "()V")) == nullptr ||
|
||||
(s_EmulationActivity_method_onGameTitleChanged =
|
||||
env->GetMethodID(emulation_activity_class, "onGameTitleChanged", "(Ljava/lang/String;)V")) == nullptr ||
|
||||
(s_EmulationActivity_method_setVibration =
|
||||
env->GetMethodID(emulation_activity_class, "setVibration", "(Z)V")) == nullptr ||
|
||||
(s_PatchCode_constructor = env->GetMethodID(s_PatchCode_class, "<init>", "(ILjava/lang/String;Z)V")) == nullptr)
|
||||
{
|
||||
Log_ErrorPrint("AndroidHostInterface lookups failed");
|
||||
|
|
|
@ -65,6 +65,7 @@ protected:
|
|||
void ReleaseHostDisplay() override;
|
||||
std::unique_ptr<AudioStream> CreateAudioStream(AudioBackend backend) override;
|
||||
|
||||
void OnSystemPaused(bool paused) override;
|
||||
void OnSystemDestroyed() override;
|
||||
void OnRunningGameChanged() override;
|
||||
|
||||
|
@ -77,6 +78,8 @@ private:
|
|||
void DestroyImGuiContext();
|
||||
|
||||
void LoadAndConvertSettings();
|
||||
void SetVibration(bool enabled);
|
||||
void UpdateVibration();
|
||||
|
||||
jobject m_java_object = {};
|
||||
jobject m_emulation_activity_object = {};
|
||||
|
@ -92,6 +95,10 @@ private:
|
|||
|
||||
std::thread m_emulation_thread;
|
||||
std::atomic_bool m_emulation_thread_stop_request{false};
|
||||
|
||||
u64 m_last_vibration_update_time = 0;
|
||||
bool m_last_vibration_state = false;
|
||||
bool m_vibration_enabled = false;
|
||||
};
|
||||
|
||||
namespace AndroidHelpers {
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
package="com.github.stenzek.duckstation">
|
||||
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
|
|
|
@ -15,6 +15,7 @@ public class AndroidHostInterface {
|
|||
private Context mContext;
|
||||
|
||||
static public native String getScmVersion();
|
||||
|
||||
static public native AndroidHostInterface create(Context context, String userDirectory);
|
||||
|
||||
public AndroidHostInterface(Context context) {
|
||||
|
@ -71,7 +72,9 @@ public class AndroidHostInterface {
|
|||
public native void setDisplayAlignment(int alignment);
|
||||
|
||||
public native PatchCode[] getPatchCodeList();
|
||||
|
||||
public native void setPatchCodeEnabled(int index, boolean enabled);
|
||||
|
||||
public native boolean importPatchCodesFromString(String str);
|
||||
|
||||
public native void addOSDMessage(String message, float duration);
|
||||
|
@ -81,10 +84,13 @@ public class AndroidHostInterface {
|
|||
public native String importBIOSImage(byte[] data);
|
||||
|
||||
public native boolean isFastForwardEnabled();
|
||||
|
||||
public native void setFastForwardEnabled(boolean enabled);
|
||||
|
||||
public native String[] getMediaPlaylistPaths();
|
||||
|
||||
public native int getMediaPlaylistIndex();
|
||||
|
||||
public native boolean setMediaPlaylistIndex(int index);
|
||||
|
||||
static {
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.content.res.Configuration;
|
|||
import android.hardware.input.InputManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Vibrator;
|
||||
import android.util.Log;
|
||||
import android.view.SurfaceHolder;
|
||||
import android.view.View;
|
||||
|
@ -124,6 +125,7 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
|||
private void doApplySettings() {
|
||||
AndroidHostInterface.getInstance().applySettings();
|
||||
updateRequestedOrientation();
|
||||
updateControllers();
|
||||
}
|
||||
|
||||
private void applySettings() {
|
||||
|
@ -163,9 +165,6 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
|||
doApplySettings();
|
||||
}
|
||||
|
||||
if (AndroidHostInterface.getInstance().isEmulationThreadPaused())
|
||||
AndroidHostInterface.getInstance().pauseEmulationThread(false);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -323,8 +322,7 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
|||
|
||||
private void showMenu() {
|
||||
if (getBooleanSetting("Main/PauseOnMenu", false) &&
|
||||
!AndroidHostInterface.getInstance().isEmulationThreadPaused())
|
||||
{
|
||||
!AndroidHostInterface.getInstance().isEmulationThreadPaused()) {
|
||||
AndroidHostInterface.getInstance().pauseEmulationThread(true);
|
||||
}
|
||||
|
||||
|
@ -485,8 +483,7 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
|||
private void showDiscChangeMenu() {
|
||||
final String[] paths = AndroidHostInterface.getInstance().getMediaPlaylistPaths();
|
||||
final int currentPath = AndroidHostInterface.getInstance().getMediaPlaylistIndex();
|
||||
if (paths == null)
|
||||
{
|
||||
if (paths == null) {
|
||||
onMenuClosed();
|
||||
return;
|
||||
}
|
||||
|
@ -515,6 +512,8 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
|||
final String controllerType = getStringSetting("Controller1/Type", "DigitalController");
|
||||
final String viewType = getStringSetting("Controller1/TouchscreenControllerView", "digital");
|
||||
final boolean autoHideTouchscreenController = getBooleanSetting("Controller1/AutoHideTouchscreenController", false);
|
||||
final boolean hapticFeedback = getBooleanSetting("Controller1/HapticFeedback", false);
|
||||
final boolean vibration = getBooleanSetting("Controller1/Vibration", false);
|
||||
final FrameLayout activityLayout = findViewById(R.id.frameLayout);
|
||||
|
||||
Log.i("EmulationActivity", "Controller type: " + controllerType);
|
||||
|
@ -526,14 +525,18 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
|||
if (mTouchscreenController != null) {
|
||||
activityLayout.removeView(mTouchscreenController);
|
||||
mTouchscreenController = null;
|
||||
mVibratorService = null;
|
||||
}
|
||||
} else {
|
||||
if (mTouchscreenController == null) {
|
||||
mTouchscreenController = new TouchscreenControllerView(this);
|
||||
if (vibration)
|
||||
mVibratorService = (Vibrator) getSystemService(VIBRATOR_SERVICE);
|
||||
|
||||
activityLayout.addView(mTouchscreenController);
|
||||
}
|
||||
|
||||
mTouchscreenController.init(0, controllerType, viewType);
|
||||
mTouchscreenController.init(0, controllerType, viewType, hapticFeedback);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -578,4 +581,21 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
|||
|
||||
mInputDeviceListener = null;
|
||||
}
|
||||
|
||||
private Vibrator mVibratorService;
|
||||
|
||||
public void setVibration(boolean enabled) {
|
||||
if (mVibratorService == null)
|
||||
return;
|
||||
|
||||
runOnUiThread(() -> {
|
||||
if (mVibratorService == null)
|
||||
return;
|
||||
|
||||
if (enabled)
|
||||
mVibratorService.vibrate(1000);
|
||||
else
|
||||
mVibratorService.cancel();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,19 +9,14 @@ import android.net.Uri;
|
|||
import android.os.Build;
|
||||
import android.os.storage.StorageManager;
|
||||
import android.provider.DocumentsContract;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.StringWriter;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Method;
|
||||
import java.nio.charset.Charset;
|
||||
|
|
|
@ -73,7 +73,9 @@ public class GameListEntry {
|
|||
return mTitle;
|
||||
}
|
||||
|
||||
public String getFileTitle() { return mFileTitle; }
|
||||
public String getFileTitle() {
|
||||
return mFileTitle;
|
||||
}
|
||||
|
||||
public String getModifiedTime() {
|
||||
return mModifiedTime;
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.content.res.TypedArray;
|
|||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
|
@ -14,6 +15,7 @@ public class TouchscreenControllerButtonView extends View {
|
|||
private Drawable mUnpressedDrawable;
|
||||
private Drawable mPressedDrawable;
|
||||
private boolean mPressed = false;
|
||||
private boolean mHapticFeedback = false;
|
||||
private int mControllerIndex = -1;
|
||||
private int mButtonCode = -1;
|
||||
|
||||
|
@ -81,6 +83,10 @@ public class TouchscreenControllerButtonView extends View {
|
|||
mPressed = pressed;
|
||||
invalidate();
|
||||
updateControllerState();
|
||||
|
||||
if (mHapticFeedback) {
|
||||
performHapticFeedback(pressed ? HapticFeedbackConstants.VIRTUAL_KEY : HapticFeedbackConstants.VIRTUAL_KEY_RELEASE);
|
||||
}
|
||||
}
|
||||
|
||||
public void setButtonCode(int controllerIndex, int code) {
|
||||
|
@ -88,6 +94,10 @@ public class TouchscreenControllerButtonView extends View {
|
|||
mButtonCode = code;
|
||||
}
|
||||
|
||||
public void setHapticFeedback(boolean enabled) {
|
||||
mHapticFeedback = enabled;
|
||||
}
|
||||
|
||||
private void updateControllerState() {
|
||||
if (mButtonCode >= 0)
|
||||
AndroidHostInterface.getInstance().setControllerButtonState(mControllerIndex, mButtonCode, mPressed);
|
||||
|
|
|
@ -20,6 +20,7 @@ public class TouchscreenControllerView extends FrameLayout {
|
|||
private View mMainView;
|
||||
private ArrayList<TouchscreenControllerButtonView> mButtonViews = new ArrayList<>();
|
||||
private ArrayList<TouchscreenControllerAxisView> mAxisViews = new ArrayList<>();
|
||||
private boolean mHapticFeedback;
|
||||
|
||||
public TouchscreenControllerView(Context context) {
|
||||
super(context);
|
||||
|
@ -33,9 +34,10 @@ public class TouchscreenControllerView extends FrameLayout {
|
|||
super(context, attrs, defStyle);
|
||||
}
|
||||
|
||||
public void init(int controllerIndex, String controllerType, String viewType) {
|
||||
public void init(int controllerIndex, String controllerType, String viewType, boolean hapticFeedback) {
|
||||
mControllerIndex = controllerIndex;
|
||||
mControllerType = controllerType;
|
||||
mHapticFeedback = hapticFeedback;
|
||||
|
||||
mButtonViews.clear();
|
||||
mAxisViews.clear();
|
||||
|
@ -99,6 +101,7 @@ public class TouchscreenControllerView extends FrameLayout {
|
|||
|
||||
if (code >= 0) {
|
||||
buttonView.setButtonCode(mControllerIndex, code);
|
||||
buttonView.setHapticFeedback(mHapticFeedback);
|
||||
mButtonViews.add(buttonView);
|
||||
} else {
|
||||
Log.e("TouchscreenController", String.format("Unknown button name '%s' " +
|
||||
|
|
|
@ -318,89 +318,89 @@
|
|||
<item>1000% [600 FPS (NTSC) / 500 FPS (PAL)]</item>
|
||||
</string-array>
|
||||
<string-array name="settings_emulation_speed_values">
|
||||
<item>0.0</item>
|
||||
<item>0.1</item>
|
||||
<item>0.2</item>
|
||||
<item>0.3</item>
|
||||
<item>0.4</item>
|
||||
<item>0.5</item>
|
||||
<item>0.6</item>
|
||||
<item>0.7</item>
|
||||
<item>0.8</item>
|
||||
<item>0.9</item>
|
||||
<item>1.0</item>
|
||||
<item>1.25</item>
|
||||
<item>1.5</item>
|
||||
<item>1.75</item>
|
||||
<item>2.0</item>
|
||||
<item>2.5</item>
|
||||
<item>3.0</item>
|
||||
<item>3.5</item>
|
||||
<item>4.0</item>
|
||||
<item>4.5</item>
|
||||
<item>5.0</item>
|
||||
<item>6.0</item>
|
||||
<item>7.0</item>
|
||||
<item>8.0</item>
|
||||
<item>9.0</item>
|
||||
<item>10.0</item>
|
||||
</string-array>
|
||||
<string-array name="settings_advanced_cpu_overclock_entries">
|
||||
<item>25% (8MHz)</item>
|
||||
<item>50% (16MHz)</item>
|
||||
<item>75% (24MHz)</item>
|
||||
<item>100% (33MHz, Default)</item>
|
||||
<item>125% (41MHz)</item>
|
||||
<item>150% (49MHz)</item>
|
||||
<item>175% (57MHz)</item>
|
||||
<item>200% (66MHz)</item>
|
||||
<item>225% (74MHz)</item>
|
||||
<item>250% (82MHz)</item>
|
||||
<item>275% (90MHz)</item>
|
||||
<item>300% (99MHz)</item>
|
||||
<item>350% (115MHz)</item>
|
||||
<item>400% (132MHz)</item>
|
||||
<item>450% (148MHz)</item>
|
||||
<item>500% (165MHz)</item>
|
||||
<item>500% (165MHz)</item>
|
||||
<item>600% (198MHz)</item>
|
||||
<item>700% (231MHz)</item>
|
||||
<item>800% (264MHz)</item>
|
||||
<item>900% (297MHz)</item>
|
||||
<item>1000% (330MHz)</item>
|
||||
</string-array>
|
||||
<string-array name="settings_advanced_cpu_overclock_values">
|
||||
<item>25</item>
|
||||
<item>50</item>
|
||||
<item>75</item>
|
||||
<item>100</item>
|
||||
<item>125</item>
|
||||
<item>150</item>
|
||||
<item>175</item>
|
||||
<item>200</item>
|
||||
<item>225</item>
|
||||
<item>250</item>
|
||||
<item>275</item>
|
||||
<item>300</item>
|
||||
<item>350</item>
|
||||
<item>400</item>
|
||||
<item>450</item>
|
||||
<item>500</item>
|
||||
<item>500</item>
|
||||
<item>600</item>
|
||||
<item>700</item>
|
||||
<item>800</item>
|
||||
<item>900</item>
|
||||
<item>1000</item>
|
||||
</string-array>
|
||||
<string-array name="settings_emulation_screen_orientation_entries">
|
||||
<item>Use Device Setting</item>
|
||||
<item>Portrait</item>
|
||||
<item>Landscape</item>
|
||||
</string-array>
|
||||
<string-array name="settings_emulation_screen_orientation_values">
|
||||
<item>unspecified</item>
|
||||
<item>portrait</item>
|
||||
<item>landscape</item>
|
||||
</string-array>
|
||||
<item>0.0</item>
|
||||
<item>0.1</item>
|
||||
<item>0.2</item>
|
||||
<item>0.3</item>
|
||||
<item>0.4</item>
|
||||
<item>0.5</item>
|
||||
<item>0.6</item>
|
||||
<item>0.7</item>
|
||||
<item>0.8</item>
|
||||
<item>0.9</item>
|
||||
<item>1.0</item>
|
||||
<item>1.25</item>
|
||||
<item>1.5</item>
|
||||
<item>1.75</item>
|
||||
<item>2.0</item>
|
||||
<item>2.5</item>
|
||||
<item>3.0</item>
|
||||
<item>3.5</item>
|
||||
<item>4.0</item>
|
||||
<item>4.5</item>
|
||||
<item>5.0</item>
|
||||
<item>6.0</item>
|
||||
<item>7.0</item>
|
||||
<item>8.0</item>
|
||||
<item>9.0</item>
|
||||
<item>10.0</item>
|
||||
</string-array>
|
||||
<string-array name="settings_advanced_cpu_overclock_entries">
|
||||
<item>25% (8MHz)</item>
|
||||
<item>50% (16MHz)</item>
|
||||
<item>75% (24MHz)</item>
|
||||
<item>100% (33MHz, Default)</item>
|
||||
<item>125% (41MHz)</item>
|
||||
<item>150% (49MHz)</item>
|
||||
<item>175% (57MHz)</item>
|
||||
<item>200% (66MHz)</item>
|
||||
<item>225% (74MHz)</item>
|
||||
<item>250% (82MHz)</item>
|
||||
<item>275% (90MHz)</item>
|
||||
<item>300% (99MHz)</item>
|
||||
<item>350% (115MHz)</item>
|
||||
<item>400% (132MHz)</item>
|
||||
<item>450% (148MHz)</item>
|
||||
<item>500% (165MHz)</item>
|
||||
<item>500% (165MHz)</item>
|
||||
<item>600% (198MHz)</item>
|
||||
<item>700% (231MHz)</item>
|
||||
<item>800% (264MHz)</item>
|
||||
<item>900% (297MHz)</item>
|
||||
<item>1000% (330MHz)</item>
|
||||
</string-array>
|
||||
<string-array name="settings_advanced_cpu_overclock_values">
|
||||
<item>25</item>
|
||||
<item>50</item>
|
||||
<item>75</item>
|
||||
<item>100</item>
|
||||
<item>125</item>
|
||||
<item>150</item>
|
||||
<item>175</item>
|
||||
<item>200</item>
|
||||
<item>225</item>
|
||||
<item>250</item>
|
||||
<item>275</item>
|
||||
<item>300</item>
|
||||
<item>350</item>
|
||||
<item>400</item>
|
||||
<item>450</item>
|
||||
<item>500</item>
|
||||
<item>500</item>
|
||||
<item>600</item>
|
||||
<item>700</item>
|
||||
<item>800</item>
|
||||
<item>900</item>
|
||||
<item>1000</item>
|
||||
</string-array>
|
||||
<string-array name="settings_emulation_screen_orientation_entries">
|
||||
<item>Use Device Setting</item>
|
||||
<item>Portrait</item>
|
||||
<item>Landscape</item>
|
||||
</string-array>
|
||||
<string-array name="settings_emulation_screen_orientation_values">
|
||||
<item>unspecified</item>
|
||||
<item>portrait</item>
|
||||
<item>landscape</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
|
|
@ -14,78 +14,77 @@
|
|||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<ListPreference
|
||||
app:key="CPU/Overclock"
|
||||
app:title="CPU Overclocking"
|
||||
app:defaultValue="100"
|
||||
app:entries="@array/settings_advanced_cpu_overclock_entries"
|
||||
app:entryValues="@array/settings_advanced_cpu_overclock_values"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="CDROM/RegionCheck"
|
||||
app:title="CD-ROM Region Check"
|
||||
app:defaultValue="false"
|
||||
app:summary="Prevents discs from incorrect regions being read by the emulator. Usually safe to disable."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPVertexCache"
|
||||
app:title="PGXP Vertex Cache"
|
||||
app:defaultValue="false"
|
||||
app:summary="Uses screen coordinates as a fallback when tracking vertices through memory fails. May improve PGXP compatibility."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPCPU"
|
||||
app:title="PGXP CPU Mode"
|
||||
app:defaultValue="false"
|
||||
app:summary="Tries to track vertex manipulation through the CPU. Some games require this option for PGXP to be effective. Very slow, and incompatible with the recompiler."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="CPU/RecompilerICache"
|
||||
app:title="CPU Recompiler ICache"
|
||||
app:defaultValue="false"
|
||||
app:summary="Determines whether the CPU's instruction cache is simulated in the recompiler. Improves accuracy at a small cost to performance. If games are running too fast, try enabling this option."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="CPU/Fastmem"
|
||||
app:title="CPU Recompiler Fast Memory Access"
|
||||
app:defaultValue="true"
|
||||
app:summary="Makes guest memory access more efficient by using page faults and backpatching. Disable if it is unstable on your device."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Display/MaxFPS"
|
||||
app:title="Presented Frame Limit"
|
||||
app:defaultValue="60"
|
||||
app:entries="@array/settings_advanced_display_fps_limit_entries"
|
||||
app:entryValues="@array/settings_advanced_display_fps_limit_values"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="BIOS/PatchTTYEnable"
|
||||
app:title="@string/settings_console_tty_output"
|
||||
app:defaultValue="false"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Logging/LogLevel"
|
||||
app:title="Logging Level"
|
||||
app:defaultValue="Warning"
|
||||
app:entries="@array/settings_log_level_entries"
|
||||
app:entryValues="@array/settings_log_level_values"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Logging/LogToFile"
|
||||
app:title="Log To File"
|
||||
app:defaultValue="false"
|
||||
app:summary="Writes log messages to duckstation.log in your user directory. Only use for debugging as it slows down emulation."
|
||||
app:iconSpaceReserved="false"/>
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Logging/LogToDebug"
|
||||
app:title="Log To Logcat"
|
||||
app:defaultValue="false"
|
||||
app:summary="Writes log messages to the Android message logger. Only useful when attached to a computer with adb."
|
||||
app:iconSpaceReserved="false" />
|
||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<ListPreference
|
||||
app:key="CPU/Overclock"
|
||||
app:title="CPU Overclocking"
|
||||
app:defaultValue="100"
|
||||
app:entries="@array/settings_advanced_cpu_overclock_entries"
|
||||
app:entryValues="@array/settings_advanced_cpu_overclock_values"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="CDROM/RegionCheck"
|
||||
app:title="CD-ROM Region Check"
|
||||
app:defaultValue="false"
|
||||
app:summary="Prevents discs from incorrect regions being read by the emulator. Usually safe to disable."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPVertexCache"
|
||||
app:title="PGXP Vertex Cache"
|
||||
app:defaultValue="false"
|
||||
app:summary="Uses screen coordinates as a fallback when tracking vertices through memory fails. May improve PGXP compatibility."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPCPU"
|
||||
app:title="PGXP CPU Mode"
|
||||
app:defaultValue="false"
|
||||
app:summary="Tries to track vertex manipulation through the CPU. Some games require this option for PGXP to be effective. Very slow, and incompatible with the recompiler."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="CPU/RecompilerICache"
|
||||
app:title="CPU Recompiler ICache"
|
||||
app:defaultValue="false"
|
||||
app:summary="Determines whether the CPU's instruction cache is simulated in the recompiler. Improves accuracy at a small cost to performance. If games are running too fast, try enabling this option."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="CPU/Fastmem"
|
||||
app:title="CPU Recompiler Fast Memory Access"
|
||||
app:defaultValue="true"
|
||||
app:summary="Makes guest memory access more efficient by using page faults and backpatching. Disable if it is unstable on your device."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Display/MaxFPS"
|
||||
app:title="Presented Frame Limit"
|
||||
app:defaultValue="60"
|
||||
app:entries="@array/settings_advanced_display_fps_limit_entries"
|
||||
app:entryValues="@array/settings_advanced_display_fps_limit_values"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="BIOS/PatchTTYEnable"
|
||||
app:title="@string/settings_console_tty_output"
|
||||
app:defaultValue="false"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Logging/LogLevel"
|
||||
app:title="Logging Level"
|
||||
app:defaultValue="Warning"
|
||||
app:entries="@array/settings_log_level_entries"
|
||||
app:entryValues="@array/settings_log_level_values"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Logging/LogToFile"
|
||||
app:title="Log To File"
|
||||
app:defaultValue="false"
|
||||
app:summary="Writes log messages to duckstation.log in your user directory. Only use for debugging as it slows down emulation."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Logging/LogToDebug"
|
||||
app:title="Log To Logcat"
|
||||
app:defaultValue="false"
|
||||
app:summary="Writes log messages to the Android message logger. Only useful when attached to a computer with adb."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
@ -17,49 +17,49 @@
|
|||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<SeekBarPreference
|
||||
app:key="Audio/OutputVolume"
|
||||
app:title="Volume"
|
||||
app:summary="Controls the volume of the emulator's sound output."
|
||||
app:defaultValue="100"
|
||||
android:max="100"
|
||||
app:min="0"
|
||||
app:iconSpaceReserved="false"
|
||||
app:showSeekBarValue="true" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Audio/OutputMuted"
|
||||
app:title="Mute All Sound"
|
||||
app:defaultValue="false"
|
||||
app:summary="Prevents the emulator from emitting any sound."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="CDROM/MuteCDAudio"
|
||||
app:title="Mute CD Audio"
|
||||
app:defaultValue="false"
|
||||
app:summary="Forcibly mutes both CD-DA and XA audio from the CD-ROM. Can be used to disable background music in some games."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Audio/Backend"
|
||||
app:title="Audio Backend"
|
||||
app:entries="@array/settings_audio_backend_entries"
|
||||
app:entryValues="@array/settings_audio_backend_values"
|
||||
app:defaultValue="OpenSLES"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false"/>
|
||||
<ListPreference
|
||||
app:key="Audio/BufferSize"
|
||||
app:title="Audio Buffer Size"
|
||||
app:entries="@array/settings_audio_buffer_size_entries"
|
||||
app:entryValues="@array/settings_audio_buffer_size_values"
|
||||
app:defaultValue="2048"
|
||||
app:summary="Determines the latency between audio being generated and output to speakers. Smaller values reduce latency, but variations in emulation speed will cause hitches."
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Audio/Sync"
|
||||
app:title="Audio Sync"
|
||||
app:defaultValue="true"
|
||||
app:summary="Throttles the emulation speed based on the audio backend pulling audio frames. This helps to remove noises or crackling if emulation is too fast. Sync will automatically be disabled if not running at 100% speed."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SeekBarPreference
|
||||
app:key="Audio/OutputVolume"
|
||||
app:title="Volume"
|
||||
app:summary="Controls the volume of the emulator's sound output."
|
||||
app:defaultValue="100"
|
||||
android:max="100"
|
||||
app:min="0"
|
||||
app:iconSpaceReserved="false"
|
||||
app:showSeekBarValue="true" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Audio/OutputMuted"
|
||||
app:title="Mute All Sound"
|
||||
app:defaultValue="false"
|
||||
app:summary="Prevents the emulator from emitting any sound."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="CDROM/MuteCDAudio"
|
||||
app:title="Mute CD Audio"
|
||||
app:defaultValue="false"
|
||||
app:summary="Forcibly mutes both CD-DA and XA audio from the CD-ROM. Can be used to disable background music in some games."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Audio/Backend"
|
||||
app:title="Audio Backend"
|
||||
app:entries="@array/settings_audio_backend_entries"
|
||||
app:entryValues="@array/settings_audio_backend_values"
|
||||
app:defaultValue="OpenSLES"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Audio/BufferSize"
|
||||
app:title="Audio Buffer Size"
|
||||
app:entries="@array/settings_audio_buffer_size_entries"
|
||||
app:entryValues="@array/settings_audio_buffer_size_values"
|
||||
app:defaultValue="2048"
|
||||
app:summary="Determines the latency between audio being generated and output to speakers. Smaller values reduce latency, but variations in emulation speed will cause hitches."
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Audio/Sync"
|
||||
app:title="Audio Sync"
|
||||
app:defaultValue="true"
|
||||
app:summary="Throttles the emulation speed based on the audio backend pulling audio frames. This helps to remove noises or crackling if emulation is too fast. Sync will automatically be disabled if not running at 100% speed."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
@ -14,52 +14,64 @@
|
|||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<ListPreference
|
||||
app:key="Controller1/Type"
|
||||
app:title="Controller Type"
|
||||
app:entries="@array/settings_controller_type_entries"
|
||||
app:entryValues="@array/settings_controller_type_values"
|
||||
app:defaultValue="DigitalController"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Controller1/AutoEnableAnalog"
|
||||
app:title="Enable Analog Mode On Reset"
|
||||
app:defaultValue="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Controller1/TouchscreenControllerView"
|
||||
app:title="Touchscreen Controller View"
|
||||
app:entries="@array/settings_touchscreen_controller_view_entries"
|
||||
app:entryValues="@array/settings_touchscreen_controller_view_values"
|
||||
app:defaultValue="digital"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Controller1/AutoHideTouchscreenController"
|
||||
app:title="Auto-Hide Touchscreen Controller"
|
||||
app:defaultValue="false"
|
||||
app:summary="Hides the touchscreen controller when an external controller is detected."
|
||||
app:iconSpaceReserved="false"/>
|
||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<ListPreference
|
||||
app:key="MemoryCards/Card1Type"
|
||||
app:title="Memory Card 1 Type"
|
||||
app:entries="@array/settings_memory_card_mode_entries"
|
||||
app:entryValues="@array/settings_memory_card_mode_values"
|
||||
app:defaultValue="PerGameTitle"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="MemoryCards/Card2Type"
|
||||
app:title="Memory Card 2 Type"
|
||||
app:entries="@array/settings_memory_card_mode_entries"
|
||||
app:entryValues="@array/settings_memory_card_mode_values"
|
||||
app:defaultValue="None"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
app:key="Controller1/Type"
|
||||
app:title="Controller Type"
|
||||
app:entries="@array/settings_controller_type_entries"
|
||||
app:entryValues="@array/settings_controller_type_values"
|
||||
app:defaultValue="DigitalController"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Controller1/AutoEnableAnalog"
|
||||
app:title="Enable Analog Mode On Reset"
|
||||
app:defaultValue="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Controller1/TouchscreenControllerView"
|
||||
app:title="Touchscreen Controller View"
|
||||
app:entries="@array/settings_touchscreen_controller_view_entries"
|
||||
app:entryValues="@array/settings_touchscreen_controller_view_values"
|
||||
app:defaultValue="digital"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Controller1/AutoHideTouchscreenController"
|
||||
app:title="Auto-Hide Touchscreen Controller"
|
||||
app:defaultValue="false"
|
||||
app:summary="Hides the touchscreen controller when an external controller is detected."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Controller1/HapticFeedback"
|
||||
app:title="Vibrate On Press"
|
||||
app:defaultValue="false"
|
||||
app:summary="Enables a short vibration when a touchscreen button is pressed. Requires "Vibrate on Touch" to be enabled on your device."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Controller1/Vibration"
|
||||
app:title="Enable Vibration"
|
||||
app:defaultValue="false"
|
||||
app:summary="Forwards rumble from the game to the phone's vibration motor."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<ListPreference
|
||||
app:key="MemoryCards/Card1Type"
|
||||
app:title="Memory Card 1 Type"
|
||||
app:entries="@array/settings_memory_card_mode_entries"
|
||||
app:entryValues="@array/settings_memory_card_mode_values"
|
||||
app:defaultValue="PerGameTitle"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="MemoryCards/Card2Type"
|
||||
app:title="Memory Card 2 Type"
|
||||
app:entries="@array/settings_memory_card_mode_entries"
|
||||
app:entryValues="@array/settings_memory_card_mode_values"
|
||||
app:defaultValue="None"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
@ -14,64 +14,63 @@
|
|||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<ListPreference
|
||||
app:key="Display/CropMode"
|
||||
app:title="Crop Mode"
|
||||
app:entries="@array/settings_display_crop_mode_entries"
|
||||
app:entryValues="@array/settings_display_crop_mode_values"
|
||||
app:defaultValue="Overscan"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Display/CropMode"
|
||||
app:title="Crop Mode"
|
||||
app:entries="@array/settings_display_crop_mode_entries"
|
||||
app:entryValues="@array/settings_display_crop_mode_values"
|
||||
app:defaultValue="Overscan"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<ListPreference
|
||||
app:key="Display/AspectRatio"
|
||||
app:title="Aspect Ratio"
|
||||
app:entries="@array/settings_display_aspect_ratio_names"
|
||||
app:entryValues="@array/settings_display_aspect_ratio_values"
|
||||
app:defaultValue="4:3"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Display/AspectRatio"
|
||||
app:title="Aspect Ratio"
|
||||
app:entries="@array/settings_display_aspect_ratio_names"
|
||||
app:entryValues="@array/settings_display_aspect_ratio_values"
|
||||
app:defaultValue="4:3"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/LinearFiltering"
|
||||
app:title="Linear Upscaling"
|
||||
app:defaultValue="true"
|
||||
app:summary="Smooths out the image when upscaling the console to the screen."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/LinearFiltering"
|
||||
app:title="Linear Upscaling"
|
||||
app:defaultValue="true"
|
||||
app:summary="Smooths out the image when upscaling the console to the screen."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/IntegerScaling"
|
||||
app:title="Integer Upscaling"
|
||||
app:defaultValue="false"
|
||||
app:summary="Adds padding to the display area to ensure that the ratio between pixels on the host to pixels in the console is an integer number. May result in a sharper image in some 2D games."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/ShowOSDMessages"
|
||||
app:title="@string/settings_osd_show_messages"
|
||||
app:defaultValue="true"
|
||||
app:summary="Shows on-screen-display messages when events occur such as save states being created/loaded, screenshots being taken, etc."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/ShowSpeed"
|
||||
app:title="@string/settings_osd_show_speed"
|
||||
app:defaultValue="false"
|
||||
app:summary="Sets the target emulation speed. It is not guaranteed that this speed will be reached, and if not, the emulator will run as fast as it can manage."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/ShowFPS"
|
||||
app:title="@string/settings_osd_show_show_fps"
|
||||
app:defaultValue="false"
|
||||
app:summary="Shows the internal frame rate of the game in the top-right corner of the display."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/ShowVPS"
|
||||
app:title="@string/settings_osd_show_show_vps"
|
||||
app:defaultValue="false"
|
||||
app:summary="Shows the number of frames (or v-syncs) displayed per second by the system in the top-right corner of the display."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/IntegerScaling"
|
||||
app:title="Integer Upscaling"
|
||||
app:defaultValue="false"
|
||||
app:summary="Adds padding to the display area to ensure that the ratio between pixels on the host to pixels in the console is an integer number. May result in a sharper image in some 2D games."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/ShowOSDMessages"
|
||||
app:title="@string/settings_osd_show_messages"
|
||||
app:defaultValue="true"
|
||||
app:summary="Shows on-screen-display messages when events occur such as save states being created/loaded, screenshots being taken, etc."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/ShowSpeed"
|
||||
app:title="@string/settings_osd_show_speed"
|
||||
app:defaultValue="false"
|
||||
app:summary="Sets the target emulation speed. It is not guaranteed that this speed will be reached, and if not, the emulator will run as fast as it can manage."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/ShowFPS"
|
||||
app:title="@string/settings_osd_show_show_fps"
|
||||
app:defaultValue="false"
|
||||
app:summary="Shows the internal frame rate of the game in the top-right corner of the display."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/ShowVPS"
|
||||
app:title="@string/settings_osd_show_show_vps"
|
||||
app:defaultValue="false"
|
||||
app:summary="Shows the number of frames (or v-syncs) displayed per second by the system in the top-right corner of the display."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
@ -14,122 +14,121 @@
|
|||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<ListPreference
|
||||
app:key="CDROM/ReadSpeedup"
|
||||
app:title="CD-ROM Read Speedup"
|
||||
app:entries="@array/settings_cdrom_read_speedup_entries"
|
||||
app:entryValues="@array/settings_cdrom_read_speedup_values"
|
||||
app:defaultValue="1"
|
||||
app:summary="Speeds up CD-ROM reads by the specified factor. Only applies to double-speed reads, and is ignored when audio is playing. May improve loading speeds in some games, at the cost of breaking others."
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="BIOS/PatchFastBoot"
|
||||
app:title="@string/settings_console_fast_boot"
|
||||
app:defaultValue="false"
|
||||
app:summary="Skips the BIOS shell/intro, booting directly into the game. Usually safe to enable, but some games break."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="GPU/ResolutionScale"
|
||||
app:title="@string/settings_gpu_resolution_scale"
|
||||
app:entries="@array/settings_gpu_resolution_scale_entries"
|
||||
app:entryValues="@array/settings_gpu_resolution_scale_values"
|
||||
app:defaultValue="1"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="GPU/MSAA"
|
||||
app:title="Multisample Antialiasing"
|
||||
app:entries="@array/settings_gpu_msaa_entries"
|
||||
app:entryValues="@array/settings_gpu_msaa_values"
|
||||
app:defaultValue="1"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/TrueColor"
|
||||
app:title="True Color Rendering (24-bit, disables dithering)"
|
||||
app:summary="This produces nicer looking gradients at the cost of making some colours look slightly different. Disabling the option also enables dithering. Most games are compatible with this option."
|
||||
app:iconSpaceReserved="false" />
|
||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<ListPreference
|
||||
app:key="CDROM/ReadSpeedup"
|
||||
app:title="CD-ROM Read Speedup"
|
||||
app:entries="@array/settings_cdrom_read_speedup_entries"
|
||||
app:entryValues="@array/settings_cdrom_read_speedup_values"
|
||||
app:defaultValue="1"
|
||||
app:summary="Speeds up CD-ROM reads by the specified factor. Only applies to double-speed reads, and is ignored when audio is playing. May improve loading speeds in some games, at the cost of breaking others."
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="BIOS/PatchFastBoot"
|
||||
app:title="@string/settings_console_fast_boot"
|
||||
app:defaultValue="false"
|
||||
app:summary="Skips the BIOS shell/intro, booting directly into the game. Usually safe to enable, but some games break."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="GPU/ResolutionScale"
|
||||
app:title="@string/settings_gpu_resolution_scale"
|
||||
app:entries="@array/settings_gpu_resolution_scale_entries"
|
||||
app:entryValues="@array/settings_gpu_resolution_scale_values"
|
||||
app:defaultValue="1"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="GPU/MSAA"
|
||||
app:title="Multisample Antialiasing"
|
||||
app:entries="@array/settings_gpu_msaa_entries"
|
||||
app:entryValues="@array/settings_gpu_msaa_values"
|
||||
app:defaultValue="1"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/TrueColor"
|
||||
app:title="True Color Rendering (24-bit, disables dithering)"
|
||||
app:summary="This produces nicer looking gradients at the cost of making some colours look slightly different. Disabling the option also enables dithering. Most games are compatible with this option."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/ScaledDithering"
|
||||
app:title="Scaled Dithering (scale dither pattern to resolution)"
|
||||
app:defaultValue="true"
|
||||
app:summary="Scales the dither pattern to the resolution scale of the emulated GPU. This makes the dither pattern much less obvious at higher resolutions. Usually safe to enable, and only supported by the hardware renderers."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/ScaledDithering"
|
||||
app:title="Scaled Dithering (scale dither pattern to resolution)"
|
||||
app:defaultValue="true"
|
||||
app:summary="Scales the dither pattern to the resolution scale of the emulated GPU. This makes the dither pattern much less obvious at higher resolutions. Usually safe to enable, and only supported by the hardware renderers."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/DisableInterlacing"
|
||||
app:title="Disable Interlacing (force progressive render/scan)"
|
||||
app:defaultValue="true"
|
||||
app:summary="Forces the rendering and display of frames to progressive mode. This removes the "combing" effect seen in 480i games by rendering them in 480p. Usually safe to enable."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/DisableInterlacing"
|
||||
app:title="Disable Interlacing (force progressive render/scan)"
|
||||
app:defaultValue="true"
|
||||
app:summary="Forces the rendering and display of frames to progressive mode. This removes the "combing" effect seen in 480i games by rendering them in 480p. Usually safe to enable."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<ListPreference
|
||||
app:key="GPU/TextureFilter"
|
||||
app:title="Texture Filtering"
|
||||
app:entries="@array/settings_gpu_texture_filter_names"
|
||||
app:entryValues="@array/settings_gpu_texture_filter_values"
|
||||
app:defaultValue="Nearest"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="GPU/TextureFilter"
|
||||
app:title="Texture Filtering"
|
||||
app:entries="@array/settings_gpu_texture_filter_names"
|
||||
app:entryValues="@array/settings_gpu_texture_filter_values"
|
||||
app:defaultValue="Nearest"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/ForceNTSCTimings"
|
||||
app:title="Force NTSC Timings (60hz-on-PAL)"
|
||||
app:defaultValue="false"
|
||||
app:summary="Uses NTSC frame timings when the console is in PAL mode, forcing PAL games to run at 60hz."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/ForceNTSCTimings"
|
||||
app:title="Force NTSC Timings (60hz-on-PAL)"
|
||||
app:defaultValue="false"
|
||||
app:summary="Uses NTSC frame timings when the console is in PAL mode, forcing PAL games to run at 60hz."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/WidescreenHack"
|
||||
app:title="Widescreen Hack"
|
||||
app:defaultValue="false"
|
||||
app:summary="Scales vertex positions in screen-space to a widescreen aspect ratio, essentially increasing the field of view from 4:3 to 16:9 in 3D games. Not be compatible with all games."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/WidescreenHack"
|
||||
app:title="Widescreen Hack"
|
||||
app:defaultValue="false"
|
||||
app:summary="Scales vertex positions in screen-space to a widescreen aspect ratio, essentially increasing the field of view from 4:3 to 16:9 in 3D games. Not be compatible with all games."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/Force4_3For24Bit"
|
||||
app:title="Force 4:3 For 24-Bit Display"
|
||||
app:defaultValue="false"
|
||||
app:summary="Switches back to 4:3 display aspect ratio when displaying 24-bit content, usually FMVs."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/Force4_3For24Bit"
|
||||
app:title="Force 4:3 For 24-Bit Display"
|
||||
app:defaultValue="false"
|
||||
app:summary="Switches back to 4:3 display aspect ratio when displaying 24-bit content, usually FMVs."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/ChromaSmoothing24Bit"
|
||||
app:title="Chroma Smoothing For 24-Bit Display"
|
||||
app:defaultValue="false"
|
||||
app:summary="Smooths out blockyness between colour transitions in 24-bit content, usually FMVs. Only applies to the hardware renderers."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/ChromaSmoothing24Bit"
|
||||
app:title="Chroma Smoothing For 24-Bit Display"
|
||||
app:defaultValue="false"
|
||||
app:summary="Smooths out blockyness between colour transitions in 24-bit content, usually FMVs. Only applies to the hardware renderers."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPEnable"
|
||||
app:title="PGXP Geometry Correction"
|
||||
app:defaultValue="false"
|
||||
app:summary="Reduces "wobbly" polygons and "warping" textures that are common in PS1 games. >Only works with the hardware renderers. May not be compatible with all games."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPEnable"
|
||||
app:title="PGXP Geometry Correction"
|
||||
app:defaultValue="false"
|
||||
app:summary="Reduces "wobbly" polygons and "warping" textures that are common in PS1 games. >Only works with the hardware renderers. May not be compatible with all games."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPCulling"
|
||||
app:title="PGXP Culling Correction"
|
||||
app:defaultValue="true"
|
||||
app:summary="Increases the precision of polygon culling, reducing the number of holes in geometry. Requires geometry correction enabled."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPCulling"
|
||||
app:title="PGXP Culling Correction"
|
||||
app:defaultValue="true"
|
||||
app:summary="Increases the precision of polygon culling, reducing the number of holes in geometry. Requires geometry correction enabled."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPTextureCorrection"
|
||||
app:title="PGXP Texture Correction"
|
||||
app:defaultValue="true"
|
||||
app:summary="Uses perspective-correct interpolation for texture coordinates and colors, straightening out warped textures. Requires geometry correction enabled."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPTextureCorrection"
|
||||
app:title="PGXP Texture Correction"
|
||||
app:defaultValue="true"
|
||||
app:summary="Uses perspective-correct interpolation for texture coordinates and colors, straightening out warped textures. Requires geometry correction enabled."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPPreserveProjFP"
|
||||
app:title="PGXP Preserve Projection Precision"
|
||||
app:defaultValue="false"
|
||||
app:summary="Enables additional precision for PGXP. May improve visuals in some games but break others."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="GPU/PGXPPreserveProjFP"
|
||||
app:title="PGXP Preserve Projection Precision"
|
||||
app:defaultValue="false"
|
||||
app:summary="Enables additional precision for PGXP. May improve visuals in some games but break others."
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
@ -14,82 +14,81 @@
|
|||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<ListPreference
|
||||
app:key="Main/EmulationSpeed"
|
||||
app:title="Emulation Speed"
|
||||
app:entries="@array/settings_emulation_speed_entries"
|
||||
app:entryValues="@array/settings_emulation_speed_values"
|
||||
app:defaultValue="1.0"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Main/FastForwardSpeed"
|
||||
app:title="Fast Forward Speed"
|
||||
app:entries="@array/settings_emulation_speed_entries"
|
||||
app:entryValues="@array/settings_emulation_speed_values"
|
||||
app:defaultValue="0.0"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Main/SaveStateOnExit"
|
||||
app:title="Save State On Exit"
|
||||
app:defaultValue="true"
|
||||
app:summary="Automatically saves the emulator state when powering down or exiting. You can then resume directly from where you left off next time."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Main/PauseOnMenu"
|
||||
app:title="Pause When Menu Opened"
|
||||
app:defaultValue="false"
|
||||
app:summary="Pauses emulation when ingame and the menu is opened."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Main/EmulationScreenOrientation"
|
||||
app:title="Emulation Screen Orientation"
|
||||
app:entries="@array/settings_emulation_screen_orientation_entries"
|
||||
app:entryValues="@array/settings_emulation_screen_orientation_values"
|
||||
app:defaultValue="unspecified"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Main/AutoLoadCheats"
|
||||
app:title="Load Patch Codes"
|
||||
app:defaultValue="false"
|
||||
app:summary="Loads patch codes from cheats/<game name>.cht in PCSXR format. Codes can be toggled while ingame."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/VSync"
|
||||
app:title="Video Sync"
|
||||
app:defaultValue="false"
|
||||
app:summary="Enable this option to match DuckStation's refresh rate with your current monitor or screen. VSync is automatically disabled when it is not possible (e.g. running at non-100% speed)."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Console/Region"
|
||||
app:title="@string/settings_console_region"
|
||||
app:entries="@array/settings_console_region_entries"
|
||||
app:entryValues="@array/settings_console_region_values"
|
||||
app:defaultValue="@string/settings_console_region_default"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Main/EmulationSpeed"
|
||||
app:title="Emulation Speed"
|
||||
app:entries="@array/settings_emulation_speed_entries"
|
||||
app:entryValues="@array/settings_emulation_speed_values"
|
||||
app:defaultValue="1.0"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Main/FastForwardSpeed"
|
||||
app:title="Fast Forward Speed"
|
||||
app:entries="@array/settings_emulation_speed_entries"
|
||||
app:entryValues="@array/settings_emulation_speed_values"
|
||||
app:defaultValue="0.0"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Main/SaveStateOnExit"
|
||||
app:title="Save State On Exit"
|
||||
app:defaultValue="true"
|
||||
app:summary="Automatically saves the emulator state when powering down or exiting. You can then resume directly from where you left off next time."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Main/PauseOnMenu"
|
||||
app:title="Pause When Menu Opened"
|
||||
app:defaultValue="false"
|
||||
app:summary="Pauses emulation when ingame and the menu is opened."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Main/EmulationScreenOrientation"
|
||||
app:title="Emulation Screen Orientation"
|
||||
app:entries="@array/settings_emulation_screen_orientation_entries"
|
||||
app:entryValues="@array/settings_emulation_screen_orientation_values"
|
||||
app:defaultValue="unspecified"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Main/AutoLoadCheats"
|
||||
app:title="Load Patch Codes"
|
||||
app:defaultValue="false"
|
||||
app:summary="Loads patch codes from cheats/<game name>.cht in PCSXR format. Codes can be toggled while ingame."
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Display/VSync"
|
||||
app:title="Video Sync"
|
||||
app:defaultValue="false"
|
||||
app:summary="Enable this option to match DuckStation's refresh rate with your current monitor or screen. VSync is automatically disabled when it is not possible (e.g. running at non-100% speed)."
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Console/Region"
|
||||
app:title="@string/settings_console_region"
|
||||
app:entries="@array/settings_console_region_entries"
|
||||
app:entryValues="@array/settings_console_region_values"
|
||||
app:defaultValue="@string/settings_console_region_default"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<ListPreference
|
||||
app:key="CPU/ExecutionMode"
|
||||
app:title="@string/settings_cpu_execution_mode"
|
||||
app:entries="@array/settings_cpu_execution_mode_entries"
|
||||
app:entryValues="@array/settings_cpu_execution_mode_values"
|
||||
app:defaultValue="Recompiler"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="CPU/ExecutionMode"
|
||||
app:title="@string/settings_cpu_execution_mode"
|
||||
app:entries="@array/settings_cpu_execution_mode_entries"
|
||||
app:entryValues="@array/settings_cpu_execution_mode_values"
|
||||
app:defaultValue="Recompiler"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<ListPreference
|
||||
app:key="GPU/Renderer"
|
||||
app:title="@string/settings_gpu_renderer"
|
||||
app:entries="@array/gpu_renderer_entries"
|
||||
app:entryValues="@array/gpu_renderer_values"
|
||||
app:defaultValue="OpenGL"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="GPU/Renderer"
|
||||
app:title="@string/settings_gpu_renderer"
|
||||
app:entries="@array/gpu_renderer_entries"
|
||||
app:entryValues="@array/gpu_renderer_values"
|
||||
app:defaultValue="OpenGL"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
Loading…
Reference in New Issue