Skip to content

Commit b8a6efe

Browse files
committed
Add an optional ghosting effect
1 parent dcf888c commit b8a6efe

File tree

10 files changed

+167
-129
lines changed

10 files changed

+167
-129
lines changed

src/android/cpp/interface.cpp

+20-10
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,6 @@ extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getHighRes3D
347347
return Settings::highRes3D;
348348
}
349349

350-
extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getScreenFilter(JNIEnv* env, jobject obj)
351-
{
352-
return Settings::screenFilter;
353-
}
354-
355350
extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getScreenPosition(JNIEnv* env, jobject obj)
356351
{
357352
return ScreenLayout::screenPosition;
@@ -377,6 +372,11 @@ extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getScreenGap
377372
return ScreenLayout::screenGap;
378373
}
379374

375+
extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getScreenFilter(JNIEnv* env, jobject obj)
376+
{
377+
return Settings::screenFilter;
378+
}
379+
380380
extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getIntegerScale(JNIEnv* env, jobject obj)
381381
{
382382
return ScreenLayout::integerScale;
@@ -387,6 +387,11 @@ extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getGbaCrop(J
387387
return ScreenLayout::gbaCrop;
388388
}
389389

390+
extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getScreenGhost(JNIEnv* env, jobject obj)
391+
{
392+
return Settings::screenGhost;
393+
}
394+
390395
extern "C" JNIEXPORT jint JNICALL Java_com_hydra_noods_SettingsMenu_getMicEnable(JNIEnv* env, jobject obj)
391396
{
392397
return micEnable;
@@ -437,11 +442,6 @@ extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setHighRes3D
437442
Settings::highRes3D = value;
438443
}
439444

440-
extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setScreenFilter(JNIEnv* env, jobject obj, jint value)
441-
{
442-
Settings::screenFilter = value;
443-
}
444-
445445
extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setScreenPosition(JNIEnv* env, jobject obj, jint value)
446446
{
447447
ScreenLayout::screenPosition = value;
@@ -467,6 +467,11 @@ extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setScreenGap
467467
ScreenLayout::screenGap = value;
468468
}
469469

470+
extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setScreenFilter(JNIEnv* env, jobject obj, jint value)
471+
{
472+
Settings::screenFilter = value;
473+
}
474+
470475
extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setIntegerScale(JNIEnv* env, jobject obj, jint value)
471476
{
472477
ScreenLayout::integerScale = value;
@@ -477,6 +482,11 @@ extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setGbaCrop(J
477482
ScreenLayout::gbaCrop = value;
478483
}
479484

485+
extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setScreenGhost(JNIEnv* env, jobject obj, jint value)
486+
{
487+
Settings::screenGhost = value;
488+
}
489+
480490
extern "C" JNIEXPORT void JNICALL Java_com_hydra_noods_SettingsMenu_setMicEnable(JNIEnv* env, jobject obj, jint value)
481491
{
482492
micEnable = value;

src/android/java/com/hydra/noods/SettingsMenu.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,15 @@ protected void onCreate(Bundle savedInstanceState)
8484
editor.putBoolean("threaded_2d", (getThreaded2D() == 0) ? false : true);
8585
editor.putString("threaded_3d", Integer.toString(getThreaded3D()));
8686
editor.putBoolean("high_res_3d", (getHighRes3D() == 0) ? false : true);
87-
editor.putString("screen_filter", Integer.toString(getScreenFilter()));
8887
editor.putString("screen_position", Integer.toString(getScreenPosition()));
8988
editor.putString("screen_rotation", Integer.toString(getScreenRotation()));
9089
editor.putString("screen_arrangement", Integer.toString(getScreenArrangement()));
9190
editor.putString("screen_sizing", Integer.toString(getScreenSizing()));
9291
editor.putString("screen_gap", Integer.toString(getScreenGap()));
92+
editor.putString("screen_filter", Integer.toString(getScreenFilter()));
9393
editor.putBoolean("integer_scale", (getIntegerScale() == 0) ? false : true);
9494
editor.putBoolean("gba_crop", (getGbaCrop() == 0) ? false : true);
95+
editor.putBoolean("screen_ghost", (getScreenGhost() == 0) ? false : true);
9596
editor.putBoolean("mic_enable", (getMicEnable() == 0) ? false : true);
9697
editor.putBoolean("show_fps_counter", (getShowFpsCounter() == 0) ? false : true);
9798
editor.putInt("button_scale", getButtonScale());
@@ -115,14 +116,15 @@ public void onBackPressed()
115116
setThreaded2D(prefs.getBoolean("threaded_2d", true) ? 1 : 0);
116117
setThreaded3D(Integer.parseInt(prefs.getString("threaded_3d", "1")));
117118
setHighRes3D(prefs.getBoolean("high_res_3d", true) ? 1 : 0);
118-
setScreenFilter(Integer.parseInt(prefs.getString("screen_filter", "1")));
119119
setScreenPosition(Integer.parseInt(prefs.getString("screen_position", "0")));
120120
setScreenRotation(Integer.parseInt(prefs.getString("screen_rotation", "0")));
121121
setScreenArrangement(Integer.parseInt(prefs.getString("screen_arrangement", "0")));
122122
setScreenSizing(Integer.parseInt(prefs.getString("screen_sizing", "0")));
123123
setScreenGap(Integer.parseInt(prefs.getString("screen_gap", "0")));
124+
setScreenFilter(Integer.parseInt(prefs.getString("screen_filter", "1")));
124125
setIntegerScale(prefs.getBoolean("integer_scale", false) ? 1 : 0);
125126
setGbaCrop(prefs.getBoolean("gba_crop", true) ? 1 : 0);
127+
setScreenGhost(prefs.getBoolean("screen_ghost", false) ? 1 : 0);
126128
setMicEnable(prefs.getBoolean("mic_enable", false) ? 1 : 0);
127129
setShowFpsCounter(prefs.getBoolean("show_fps_counter", false) ? 1 : 0);
128130
setButtonScale(prefs.getInt("button_scale", 5));
@@ -139,14 +141,15 @@ public void onBackPressed()
139141
public static native int getThreaded2D();
140142
public static native int getThreaded3D();
141143
public static native int getHighRes3D();
142-
public static native int getScreenFilter();
143144
public static native int getScreenPosition();
144145
public static native int getScreenRotation();
145146
public static native int getScreenArrangement();
146147
public static native int getScreenSizing();
147148
public static native int getScreenGap();
149+
public static native int getScreenFilter();
148150
public static native int getIntegerScale();
149151
public static native int getGbaCrop();
152+
public static native int getScreenGhost();
150153
public static native int getMicEnable();
151154
public static native int getShowFpsCounter();
152155
public static native int getButtonScale();
@@ -157,14 +160,15 @@ public void onBackPressed()
157160
public static native void setThreaded2D(int value);
158161
public static native void setThreaded3D(int value);
159162
public static native void setHighRes3D(int value);
160-
public static native void setScreenFilter(int value);
161163
public static native void setScreenPosition(int value);
162164
public static native void setScreenRotation(int value);
163165
public static native void setScreenArrangement(int value);
164166
public static native void setScreenSizing(int value);
165167
public static native void setScreenGap(int value);
168+
public static native void setScreenFilter(int value);
166169
public static native void setIntegerScale(int value);
167170
public static native void setGbaCrop(int value);
171+
public static native void setScreenGhost(int value);
168172
public static native void setMicEnable(int value);
169173
public static native void setShowFpsCounter(int value);
170174
public static native void setButtonScale(int value);

src/android/res/values/arrays.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,6 @@
1414
<item>3 Threads</item>
1515
</string-array>
1616

17-
<string-array name="screen_filter_entries">
18-
<item>Nearest</item>
19-
<item>Upscaled</item>
20-
<item>Linear</item>
21-
</string-array>
22-
2317
<string-array name="screen_position_entries">
2418
<item>Center</item>
2519
<item>Top</item>
@@ -54,6 +48,12 @@
5448
<item>Full</item>
5549
</string-array>
5650

51+
<string-array name="screen_filter_entries">
52+
<item>Nearest</item>
53+
<item>Upscaled</item>
54+
<item>Linear</item>
55+
</string-array>
56+
5757
<string-array name="setting_values">
5858
<item>0</item>
5959
<item>1</item>

src/android/res/xml/settings.xml

+17-10
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,6 @@
6565
app:title="Screen Layout"
6666
app:iconSpaceReserved="false">
6767

68-
<ListPreference
69-
app:key="screen_filter"
70-
app:title="Screen Filter"
71-
app:entries="@array/screen_filter_entries"
72-
app:entryValues="@array/setting_values"
73-
app:useSimpleSummaryProvider="true"
74-
app:iconSpaceReserved="false"
75-
app:allowDividerAbove="true"
76-
app:allowDividerBelow="true" />
77-
7868
<ListPreference
7969
app:key="screen_position"
8070
app:title="Screen Position"
@@ -125,6 +115,16 @@
125115
app:allowDividerAbove="true"
126116
app:allowDividerBelow="true" />
127117

118+
<ListPreference
119+
app:key="screen_filter"
120+
app:title="Screen Filter"
121+
app:entries="@array/screen_filter_entries"
122+
app:entryValues="@array/setting_values"
123+
app:useSimpleSummaryProvider="true"
124+
app:iconSpaceReserved="false"
125+
app:allowDividerAbove="true"
126+
app:allowDividerBelow="true" />
127+
128128
<SwitchPreferenceCompat
129129
app:key="integer_scale"
130130
app:title="Integer Scale"
@@ -138,6 +138,13 @@
138138
app:iconSpaceReserved="false"
139139
app:allowDividerAbove="true"
140140
app:allowDividerBelow="true" />
141+
142+
<SwitchPreferenceCompat
143+
app:key="screen_ghost"
144+
app:title="Simulate Ghosting"
145+
app:iconSpaceReserved="false"
146+
app:allowDividerAbove="true"
147+
app:allowDividerBelow="true" />
141148
</PreferenceCategory>
142149

143150
<PreferenceCategory

src/console/console_ui.cpp

+12-10
Original file line numberDiff line numberDiff line change
@@ -757,12 +757,12 @@ void ConsoleUI::settingsMenu()
757757
{
758758
// Define possible values for settings
759759
const std::vector<std::string> toggle = { "Off", "On" };
760-
const std::vector<std::string> filter = { "Nearest", "Upscaled", "Linear" };
761760
const std::vector<std::string> position = { "Center", "Top", "Bottom", "Left", "Right" };
762761
const std::vector<std::string> rotation = { "None", "Clockwise", "Counter-Clockwise" };
763762
const std::vector<std::string> arrangement = { "Automatic", "Vertical", "Horizontal", "Single Screen" };
764763
const std::vector<std::string> sizing = { "Even", "Enlarge Top", "Enlarge Bottom" };
765764
const std::vector<std::string> gap = { "None", "Quarter", "Half", "Full" };
765+
const std::vector<std::string> filter = { "Nearest", "Upscaled", "Linear" };
766766
const std::vector<std::string> theme = { "Dark", "Light" };
767767

768768
int index = 0;
@@ -776,14 +776,15 @@ void ConsoleUI::settingsMenu()
776776
MenuItem("Threaded 2D", toggle[Settings::threaded2D]),
777777
MenuItem("Threaded 3D", toggle[(bool)Settings::threaded3D]),
778778
MenuItem("High-Resolution 3D", toggle[Settings::highRes3D]),
779-
MenuItem("Screen Filter", filter[Settings::screenFilter]),
780779
MenuItem("Screen Position", position[ScreenLayout::screenPosition]),
781780
MenuItem("Screen Rotation", rotation[ScreenLayout::screenRotation]),
782781
MenuItem("Screen Arrangement", arrangement[ScreenLayout::screenArrangement]),
783782
MenuItem("Screen Sizing", sizing[ScreenLayout::screenSizing]),
784783
MenuItem("Screen Gap", gap[ScreenLayout::screenGap]),
784+
MenuItem("Screen Filter", filter[Settings::screenFilter]),
785785
MenuItem("Integer Scale", toggle[ScreenLayout::integerScale]),
786786
MenuItem("GBA Crop", toggle[ScreenLayout::gbaCrop]),
787+
MenuItem("Simulate Ghosting", toggle[Settings::screenGhost]),
787788
MenuItem("Show FPS Counter", toggle[showFpsCounter]),
788789
MenuItem("Menu Theme", theme[menuTheme])
789790
};
@@ -802,17 +803,18 @@ void ConsoleUI::settingsMenu()
802803
case 2: Settings::threaded2D = (Settings::threaded2D + 1) % 2; break;
803804
case 3: Settings::threaded3D = (Settings::threaded3D + 1) % 2; break;
804805
case 4: Settings::highRes3D = (Settings::highRes3D + 1) % 2; break;
805-
case 5: Settings::screenFilter = (Settings::screenFilter + 1) % 3; break;
806-
case 6: ScreenLayout::screenPosition = (ScreenLayout::screenPosition + 1) % 5; break;
807-
case 7: ScreenLayout::screenRotation = (ScreenLayout::screenRotation + 1) % 3; break;
808-
case 8: ScreenLayout::screenArrangement = (ScreenLayout::screenArrangement + 1) % 4; break;
809-
case 9: ScreenLayout::screenSizing = (ScreenLayout::screenSizing + 1) % 3; break;
810-
case 10: ScreenLayout::screenGap = (ScreenLayout::screenGap + 1) % 4; break;
806+
case 5: ScreenLayout::screenPosition = (ScreenLayout::screenPosition + 1) % 5; break;
807+
case 6: ScreenLayout::screenRotation = (ScreenLayout::screenRotation + 1) % 3; break;
808+
case 7: ScreenLayout::screenArrangement = (ScreenLayout::screenArrangement + 1) % 4; break;
809+
case 8: ScreenLayout::screenSizing = (ScreenLayout::screenSizing + 1) % 3; break;
810+
case 9: ScreenLayout::screenGap = (ScreenLayout::screenGap + 1) % 4; break;
811+
case 10: Settings::screenFilter = (Settings::screenFilter + 1) % 3; break;
811812
case 11: ScreenLayout::integerScale = (ScreenLayout::integerScale + 1) % 2; break;
812813
case 12: ScreenLayout::gbaCrop = (ScreenLayout::gbaCrop + 1) % 2; break;
813-
case 13: showFpsCounter = (showFpsCounter + 1) % 2; break;
814+
case 13: Settings::screenGhost = (Settings::screenGhost + 1) % 2; break;
815+
case 14: showFpsCounter = (showFpsCounter + 1) % 2; break;
814816

815-
case 14:
817+
case 15:
816818
// Update the palette when changing themes
817819
menuTheme = (menuTheme + 1) % 2;
818820
palette = &themeColors[menuTheme * 6];

0 commit comments

Comments
 (0)