Compare commits

...
134 Commits
Author SHA1 Message Date
twinaphex 08118cb445 Bump up to 1.6.4 2017-08-07 19:16:09 +02:00
twinaphex 7649164f51 Update CHANGES.md 2017-08-07 19:11:20 +02:00
twinaphex c7615fdf00 Add RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT 2017-08-07 18:06:03 +02:00
Brad Parker 6359fe44af forgot about mingw not defining _MSC_VER 2017-08-07 11:28:35 -04:00
Brad Parker 2e1ad9684a ps3: build pkgcrypt.dll and copy it to ps3py folder before running pkg.py 2017-08-07 11:23:05 -04:00
Brad Parker 09922f5ee7 msvc2005: use non-unicode stb font driver 2017-08-07 11:18:38 -04:00
Andrés 46552de0f6 Merge pull request #5259 from fr500/master
fix saving the libretro device in overrides
2017-08-06 22:41:15 -05:00
radius cfa0d74df9 fix saving the libretro device in overrides 2017-08-06 22:37:29 -05:00
Andrés b521236c3e Merge pull request #5258 from fr500/master
fix #5257
2017-08-06 20:03:01 -05:00
radius 7b09cd34db fix #5257 2017-08-06 20:02:17 -05:00
bparker06 5d2ab5bf82 ps3: copy data folder to dist-cores when ran 2017-08-06 20:45:13 -04:00
bparker06 bf72dafe5c ps3: use python2 for pkg.py script 2017-08-06 20:17:00 -04:00
twinaphex 2e7b4242f7 Cleanup 2017-08-07 01:48:21 +02:00
twinaphex 56733c6f18 (xmb) deep list copy - Use malloc instead of calloc 2017-08-07 00:14:37 +02:00
twinaphex 0afb629c81 Buildfix 2017-08-06 23:19:11 +02:00
twinaphex af477ff317 C89 buildfix 2017-08-06 17:11:13 +02:00
twinaphex 86dbcaf563 C89 buildfix 2017-08-06 17:09:30 +02:00
twinaphex ab936adf1c Some C89 buildfixes 2017-08-06 17:08:29 +02:00
twinaphex 7c1d3991f8 Some C89 buildfixes 2017-08-06 17:12:57 +02:00
twinaphex a550f83452 Update CHANGES.md 2017-08-06 16:56:40 +02:00
twinaphex 02db71f529 (Localization) Update Dutch language 2017-08-06 16:55:28 +02:00
twinaphex c426f68379 C89 buildfix 2017-08-06 16:41:09 +02:00
Brad Parker 8f616c13e4 update CHANGES.md 2017-08-06 10:40:28 -04:00
twinaphex 0bc4254ab1 Update CHANGES.md 2017-08-06 16:28:12 +02:00
twinaphex 2cd38297c2 Update CHANGES.md 2017-08-06 16:27:41 +02:00
twinaphex 5caabab2eb Update CHANGES.md 2017-08-06 16:25:32 +02:00
Twinaphex ceed309b19 Merge pull request #5199 from asakous/master
add translations
2017-08-06 16:29:50 +02:00
Twinaphex ba31285160 Merge pull request #5172 from RobLoach/horizontalperf
Allow Toggling the XMB Horizontal Animation
2017-08-06 16:08:59 +02:00
twinaphex b345a4b860 Update CHANGES.md 2017-08-06 16:02:03 +02:00
twinaphex 999fd0f120 Update CHANGES.md 2017-08-06 16:01:12 +02:00
Twinaphex 38b2f32dc0 Merge pull request #5256 from theheroGAC/patch-4
Update msg_hash_it.h
2017-08-06 16:06:15 +02:00
twinaphex c6379a7c62 Missed break here 2017-08-06 15:31:38 +02:00
theheroGAC c0e5f28498 Update msg_hash_it.h
Update italian language
2017-08-06 15:12:43 +02:00
twinaphex c7e6f19920 Cleanup retro_dirent_is_dir 2017-08-06 14:21:18 +02:00
twinaphex 7382a38485 (PS3) Fix Salamander 2017-08-06 14:12:09 +02:00
twinaphex 6d4d9aa1fb Set PPU_CFLAGS 2017-08-06 14:05:59 +02:00
twinaphex 912c7265e6 Get rid of some warnings 2017-08-06 14:03:09 +02:00
twinaphex e52e70aa5a Add encoding_utf to Salamander 2017-08-06 13:58:17 +02:00
twinaphex e3192ad3c5 Get rid of some incompatible implicit declaration warnings 2017-08-06 13:55:32 +02:00
twinaphex ba36055632 (GX) Buildfix 2017-08-06 13:43:01 +02:00
Twinaphex 1a7247c1bb Merge pull request #5247 from fr500/master
Input remapping improvements
2017-08-06 12:42:31 +02:00
Twinaphex 8c8334e5a5 Merge pull request #5255 from theheroGAC/patch-3
Update msg_hash_it.h
2017-08-06 12:42:16 +02:00
theheroGAC 5a4b5da68e Update msg_hash_it.h 2017-08-06 10:51:41 +02:00
theheroGAC ace3401042 Update msg_hash_it.h 2017-08-06 10:43:56 +02:00
theheroGAC 50ba42aa57 Update msg_hash_it.h 2017-08-06 10:35:34 +02:00
Brad Parker 6b369775cf add unicode-aware option for word_wrap (only needed for xmb) 2017-08-06 03:33:13 -04:00
Andrés 54ef8f1399 Merge branch 'master' into master 2017-08-06 02:06:19 -05:00
Twinaphex 99a8d2ec86 Merge pull request #5250 from fr500/content_dir
Content dir refactor
2017-08-06 06:05:46 +02:00
twinaphex 169aea5ae1 (GX) Another buildfix 2017-08-06 05:54:46 +02:00
twinaphex 740ad823ab (GX) Buildfix 2017-08-06 05:52:40 +02:00
Andrés c150b4f6dc Merge branch 'master' into content_dir 2017-08-05 21:59:05 -05:00
radius 4387dd7c15 fix new android paths 2017-08-05 21:56:52 -05:00
twinaphex 86f7972aa8 (Wii) Backport
https://github.com/SuperrSonic/RA-SS/commit/0574b91595a231e15bafa9f2778d1b9b14944ba6
- untested
2017-08-06 04:40:55 +02:00
twinaphex e259a8c63b Try to avoid direct initialization 2017-08-06 01:44:34 +02:00
twinaphex 944eb01fb4 Updates 2017-08-06 01:29:41 +02:00
Brad Parker a8d3b205ca update CHANGES.md 2017-08-05 20:06:11 +00:00
radius 27d9b04080 update CHANGES.md 2017-08-05 15:01:43 -05:00
radius 8bb3852944 update android platform driver 2017-08-05 14:52:16 -05:00
radius a17e23dc6c update win32 platform driver 2017-08-05 14:39:17 -05:00
radius 2cd552b760 make all the directories reseteable 2017-08-05 14:38:50 -05:00
radius cf8783644d allow screenshots into content dir via bool setting in addition of the empty string 2017-08-05 13:57:24 -05:00
radius a4192bf99b allow systemfiles into content dir via bool setting in addition of the empty string 2017-08-05 13:48:37 -05:00
radius 9858b94e87 allow savestates and savefiles to go into content dir via bool setting in addition of the empty string 2017-08-05 13:41:05 -05:00
radius 7af556e200 add menu settings 2017-08-05 13:14:26 -05:00
radius 70956dca6f add new variables for "content dir" 2017-08-05 12:31:58 -05:00
radius 2db79242c9 remove remaps 2017-08-05 11:21:07 -05:00
radius a973d5dc8a allow saving analog dpad mode and libretro device to remap files 2017-08-05 11:21:06 -05:00
radius 9862b75b4b allow specifying libretro device and analog dpad mode on remap files 2017-08-05 11:21:06 -05:00
twinaphex 32234b44d3 Prevent dereference after null check warning by Coverity 2017-08-05 16:42:28 +02:00
twinaphex 2aa095aa4b Fix some Coverity warnings 2017-08-05 16:24:33 +02:00
twinaphex 449a33cf17 buildfix 2017-08-05 15:24:15 +02:00
Twinaphex b671f68e00 Merge pull request #5248 from rtissera/modfix
Proper fix for MOD support buildfix
2017-08-05 12:20:52 +02:00
Romain Tisserand 05c7bdedbe Proper fix for MOD support 2017-08-05 12:00:20 +02:00
Brad Parker b1904bcfa6 caca: enable OSD text drawing 2017-08-04 21:51:14 -04:00
Brad Parker c8e6a98651 gdi: enable OSD text drawing 2017-08-04 21:47:46 -04:00
twinaphex 24b3705fa1 Some more build fixes 2017-08-05 00:03:58 +02:00
twinaphex aa4d68760b Buildfixes 2017-08-04 23:53:38 +02:00
twinaphex 34af7f301d Update CHANGES.md 2017-08-04 21:19:22 +02:00
twinaphex 33f80371fc Refactor this to be a bit safer with string lists 2017-08-04 21:16:49 +02:00
twinaphex 7ea86f2b16 Get rid of logging 2017-08-04 21:08:42 +02:00
twinaphex 93eb7b349a Add mod/s3m/xm support to audio mixer in GUI 2017-08-04 21:08:02 +02:00
twinaphex 3de9bb9fe1 Shouldn't be part of images 2017-08-04 20:51:52 +02:00
twinaphex 70e741a70b Buildfix 2017-08-04 20:34:32 +02:00
Twinaphex d11b9e80b4 Merge pull request #5244 from rtissera/modsupport
Add MOD/S3M/XM support to audio mixer (libretro-common) through micromod/ibxm
2017-08-04 20:36:55 +02:00
Romain Tisserand d865c4cdcf First working prototype. 2017-08-04 16:09:53 +02:00
twinaphex e668d10a23 Update CHANGES.md 2017-08-04 15:08:28 +02:00
Romain Tisserand cbe2d9a941 Preliminary MOD/S3M/XM support through ibmx library (part of micromod repository) 2017-08-04 15:05:29 +02:00
Twinaphex fb303a4d40 Merge pull request #5243 from QuarkTheAwesome/master
[WiiU] Rewrite exception handler
2017-08-04 14:59:34 +02:00
twinaphex 6f5220d774 Update CHANGES.md 2017-08-04 14:01:54 +02:00
Twinaphex eff03a1fd5 Merge pull request #5241 from fr500/master
fire stick & fire tv remote override hack
2017-08-04 13:49:17 +02:00
Ash 40a4a5a733 [WiiU] Rewrite exception handler 2017-08-04 21:30:49 +10:00
radius ceaeee33e0 update CHANGES.md 2017-08-04 01:40:36 -05:00
radius 3a3d9cd41e if swap override is not specified it should be false 2017-08-04 01:37:16 -05:00
radius f5360d0d82 extra devices 2017-08-04 01:17:32 -05:00
radius 2ef75cb300 buildfix 2017-08-04 01:11:31 -05:00
radius a6b24b4d42 fire tv hack 2017-08-04 01:09:05 -05:00
Brad Parker cacb69542c msvc2005: add missing winmm dependency 2017-08-03 23:17:56 -04:00
Twinaphex 15b05fb057 Merge pull request #5240 from dorkster/master
Add "Delete Core" option to Core Information menu (#5132)
2017-08-04 01:02:57 +02:00
Justin Jacobs 150bc81ee1 Add "Delete Core" option to Core Information menu (#5132) 2017-08-03 18:38:30 -04:00
Brad Parker 2c092a882e Set buildbot dir for MSVC 2005 RetroArch build to MSVC 2005 cores 2017-08-03 10:46:58 -04:00
Twinaphex 38b9ecb1b1 Merge pull request #5234 from Monroe88/patch-3
(menu-setting.c) Allow Max Timing Skew to be set to 0
2017-08-03 01:11:50 +02:00
Monroe88 3256af4ffe (menu-setting.c) Allow Max Timing Skew to be set to 0 2017-08-01 21:03:58 -05:00
Twinaphex d78ea9cffc Merge pull request #5232 from btimofeev/russian
Update Russian translation
2017-08-01 12:37:29 +02:00
Boris Timofeev 12c8a5d6a4 Update Russian translation 2017-08-01 13:00:04 +03:00
twinaphex 572f7bea2b Document menu_cbs.c 2017-07-31 18:40:23 +02:00
twinaphex 14d66749cc Document menu_event.c 2017-07-31 18:26:18 +02:00
twinaphex 3687a706b9 More documentation 2017-07-31 18:18:13 +02:00
twinaphex e7eac6004b MOre documentation 2017-07-31 17:58:28 +02:00
Jean-André Santoni 7a20875668 (MUI) More comments 2017-07-31 17:34:10 +02:00
Jean-André Santoni 3566c41b9c (MUI) More comments 2017-07-31 17:31:09 +02:00
twinaphex b8853b76a5 Start documenting menu_driver.h 2017-07-31 17:30:50 +02:00
Jean-André Santoni aed8ec7741 (MUI) First batch of comments 2017-07-31 17:06:12 +02:00
Brad Parker 387d087fcd fix windows buildbot urls to point to the correct folder 2017-07-31 09:58:54 -04:00
twinaphex d05dfcce78 Bump up APK code 2017-07-31 15:09:33 +02:00
twinaphex 8ed147e1f3 Revert "(MUI) Attempt to fix the single click"
This reverts commit d5d0f580b0.
2017-07-31 15:08:50 +02:00
Jean-André Santoni d5d0f580b0 (MUI) Attempt to fix the single click 2017-07-30 23:15:35 +02:00
twinaphex b5323b65b1 Revert "(GLUI) Don't select an entry when scrolling"
This reverts commit 9b1ab23aa1.
2017-07-30 16:35:17 +02:00
twinaphex 1b9ae701f5 Turn this off 2017-07-30 16:02:50 +02:00
twinaphex fad37a3bd1 Load Content Special should now produce a filebrowser 2017-07-30 15:58:46 +02:00
twinaphex 50b838d8ed Cleanups 2017-07-30 10:11:41 +02:00
Twinaphex a3b1b9f690 Merge pull request #5228 from RobLoach/feature/RobLoach/wii-serials
Add serial detection for Wii
2017-07-30 07:36:04 +02:00
Rob Loach bbb2a7d6f4 Add serial detection for Wii 2017-07-29 23:23:05 -04:00
Twinaphex c13c7d0df2 Merge pull request #5226 from Scheiker/tinyalsa
(TinyALSA) Use O_NONBLOCK in pcm_params_get.
2017-07-29 19:55:03 +02:00
Charlton Head a60049de90 (TinyALSA) Use O_NONBLOCK in pcm_params_get. 2017-07-29 12:44:55 -05:00
Twinaphex 6506b71776 Merge pull request #5223 from bparker06/country
netplay: show country next to lobby nickname
2017-07-29 05:34:41 +02:00
Brad Parker c072894a93 netplay: show country next to lobby nickname 2017-07-29 02:24:11 +00:00
Twinaphex 29d26f29a6 Merge pull request #5221 from casdevel/f5215
Add mice info log
2017-07-28 14:56:08 +02:00
Zoran Vuckovic 2a92b22128 Add mice info log 2017-07-28 13:03:26 +02:00
twinaphex 252dc1b130 Updates 2017-07-28 09:24:35 +02:00
Twinaphex aa455a7239 Update CHANGES.md 2017-07-28 09:09:39 +02:00
Matthew Wang 9c6b6ee4f0 fix one translation error 2017-07-24 17:20:37 +08:00
Matthew Wang 24ae754901 add translations 2017-07-24 17:14:48 +08:00
Rob Loach 7d71746b21 Add Horizontal Animation configuration 2017-07-14 15:11:27 -04:00
Rob Loach 24107229fc Remove horizontal slide animation for XMB 2017-07-14 14:49:41 -04:00
105 changed files with 4718 additions and 1082 deletions

No files matched your search

+32 -2
View File
@@ -1,5 +1,35 @@
# 1.6.2 (future)
- IOS: Fix GL regression - 32bit color format cores were no longer rendering
# 1.6.5 (future)
# 1.6.4
- ANDROID: Fire Stick & Fire TV remote overrides gamepad port 0 on button press and viceversa like SHIELD devices
- ANDROID: Provide default save / system / state / screenshot locations
- AUDIO: Audio mixer supports MOD/S3M/XM file types now!
- INPUT: input swap override flag (for remotes) is cleared correctly
- INPUT: allow specifying libretro device in remap files
- INPUT: allow specifying analog dpad mode in remap files
- INPUT: allow saving libretro device to remap files
- INPUT: allow saving analog dpad mode to remap files
- INPUT: allow removing core and game remap files from the menu
- COMMON: Cores can now request to set a 'shared context'. You no longer need to explicitly enable 'Shared Hardware Context' for Citra/OpenLara/Dolphin.
- COMMON: Add 'Delete Core' option to Core Information menu.
- COMMON: Allow Max Timing Skew to be set to 0.
- COMMON: Change the "content dir" behavior so it works on either a flag or an empty directory setting, now platform drivers can provide defaults for save / system / state / screenshot dirs and still allow the content dir functionality, these settings are under settings / saving and flagged as advanced
- GUI: You can turn on/off 'Horizontal Animation' now for the XMB menu. Turning animations off can result in a performance boost.
- GUI: Fix sublabel word-wrapping in XMB where multi-byte languages were cut off too soon
- LOCALIZATION: Update Dutch translation
- LOCALIZATION: Update Traditional Chinese translation
- LOCALIZATION: Update Italian translation
- LOCALIZATION: Update Russian translation
- WINDOWS: Provide default save / system / state / screenshot locations
- LOBBIES: Show what country the host is in
- MENU: Enable OSD text rendering for gdi and libcaca drivers
- WINDOWS 98/ME/2K: Set default directory for MSVC 2005 RetroArch version.
- WII: Better V-Sync handling, backported from SuperrSonic.
- WIIU: Exception handler rewritten.
# 1.6.3
- IOS: Fix GL regression - 32bit color format cores were no longer rendering
- CHEEVOS: Add support for N64 cheevos and other small fixes.
- CHEEVOS: Add 'Achievements -> Achievements Verbose Mode'. Ability to display cheevos related messages in OSD, useful for RetroAchievements users.
- AUDIO: Audio mixer's volume can now be independently increased/decreased, and muted.
+6 -1
View File
@@ -91,7 +91,7 @@ ifeq ($(HAVE_SHADERPIPELINE), 1)
CFLAGS += -DHAVE_SHADERPIPELINE
endif
CFLAGS += -I$(LIBRETRO_COMM_DIR)/include
CFLAGS += -I$(LIBRETRO_COMM_DIR)/include -I$(DEPS_DIR)
# Switches
@@ -1324,6 +1324,11 @@ ifeq ($(HAVE_RBMP), 1)
OBJ += $(LIBRETRO_COMM_DIR)/formats/bmp/rbmp.o
endif
ifeq ($(HAVE_IBXM), 1)
DEFINES += -DHAVE_IBXM
OBJ += $(DEPS_DIR)/ibxm/ibxm.o
endif
OBJ += $(LIBRETRO_COMM_DIR)/formats/bmp/rbmp_encode.o \
$(LIBRETRO_COMM_DIR)/formats/json/jsonsax.o \
$(LIBRETRO_COMM_DIR)/formats/json/jsonsax_full.o \
+1
View File
@@ -25,6 +25,7 @@ OBJ := ctr/ctr_system.o \
frontend/frontend_driver.o \
frontend/drivers/platform_ctr.o \
frontend/drivers/platform_null.o \
libretro-common/encodings/encoding_utf.o \
libretro-common/compat/compat_strcasestr.o \
libretro-common/file/file_path.o \
libretro-common/string/stdstring.o \
+1
View File
@@ -133,6 +133,7 @@ endif
HAVE_RJPEG := 1
HAVE_RBMP := 1
HAVE_RTGA := 1
HAVE_IBXM := 1
HAVE_OVERLAY := 1
HAVE_ZLIB := 1
WANT_ZLIB := 1
+1 -1
View File
@@ -1,4 +1,4 @@
RARCH_VERSION = "0.9.9.3"
RARCH_VERSION = "1.6.4.0"
#which compiler to build with - GCC or SNC
#set to GCC for debug builds for use with debugger
+13 -3
View File
@@ -16,9 +16,20 @@ else ifneq ($(findstring MINGW,$(shell uname -a)),)
system_platform = win
endif
ifeq ($(DEBUG), 1)
PPU_OPTIMIZE_LV := -O0 -g
else
PPU_OPTIMIZE_LV := -O2 -DNDEBUG
endif
STRIP = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-strip.exe
PPU_CFLAGS += -I. -Ilibretro-common/include -Ideps/libz -D__CELLOS_LV2__ -DIS_SALAMANDER -DRARCH_CONSOLE -DHAVE_SYSUTILS -DHAVE_SYSMODULES -DHAVE_RARCH_EXEC
INCFLAGS = -I. -Idefines -Ilibretro-common/include -Ideps/libz
DEFINES = -D__CELLOS_LV2__ -DIS_SALAMANDER -DRARCH_CONSOLE -DHAVE_SYSUTILS -DHAVE_SYSMODULES -DHAVE_RARCH_EXEC
PPU_CFLAGS := $(PPU_OPTIMIZE_LV) $(INCFLAGS) $(DEFINES)
PPU_CXXFLAGS := $(PPU_OPTIMIZE_LV) $(INCFLAGS) $(DEFINES)
PPU_SRCS = frontend/frontend_salamander.c \
frontend/frontend_driver.c \
frontend/drivers/platform_ps3.c \
@@ -29,6 +40,7 @@ PPU_SRCS = frontend/frontend_salamander.c \
libretro-common/file/retro_dirent.c \
libretro-common/hash/rhash.c \
libretro-common/string/stdstring.c \
libretro-common/encodings/encoding_utf.c \
libretro-common/compat/compat_strl.c \
libretro-common/compat/compat_strcasestr.c \
libretro-common/streams/file_stream.c \
@@ -60,8 +72,6 @@ endif
PPU_LDLIBS += -lm -lnet_stub -lnetctl_stub -lio_stub -lsysmodule_stub -lsysutil_stub -lsysutil_game_stub -lfs_stub -lsysutil_np_stub
PPU_OPTIMIZE_LV := -O2
MAKE_FSELF = $(CELL_SDK)/host-win32/bin/make_fself.exe
include $(CELL_MK_DIR)/sdk.target.mk
+1 -1
View File
@@ -1,4 +1,4 @@
RARCH_VERSION = "0.9.9.3"
RARCH_VERSION = "1.6.4.0"
DEBUG = 0
HAVE_LOGGER = 0
+1
View File
@@ -40,6 +40,7 @@ OBJS = frontend/frontend_salamander.o \
libretro-common/lists/string_list.o \
libretro-common/lists/dir_list.o \
libretro-common/file/retro_dirent.o \
libretro-common/encodings/encoding_utf.o \
libretro-common/compat/compat_strl.o \
libretro-common/compat/compat_strcasestr.o \
libretro-common/file/config_file.o \
+1
View File
@@ -41,6 +41,7 @@ OBJS = frontend/frontend_salamander.o \
libretro-common/lists/string_list.o \
libretro-common/lists/dir_list.o \
libretro-common/file/retro_dirent.o \
libretro-common/encodings/encoding_utf.o \
libretro-common/compat/compat_strl.o \
libretro-common/compat/compat_strcasestr.o \
libretro-common/file/config_file.o \
+1
View File
@@ -51,6 +51,7 @@ OBJ = frontend/frontend_salamander.o \
libretro-common/lists/dir_list.o \
libretro-common/streams/file_stream.o \
libretro-common/file/retro_dirent.o \
libretro-common/encodings/encoding_utf.o \
libretro-common/compat/compat_strl.o \
libretro-common/compat/compat_strcasestr.o \
libretro-common/file/config_file.o \
+1
View File
@@ -16,6 +16,7 @@ OBJ += frontend/frontend_salamander.o
OBJ += frontend/frontend_driver.o
OBJ += frontend/drivers/platform_wiiu.o
OBJ += frontend/drivers/platform_null.o
OBJ += libretro-common/encodings/encoding_utf.o
OBJ += libretro-common/compat/compat_strcasestr.o
OBJ += libretro-common/file/file_path.o
OBJ += libretro-common/string/stdstring.o
+8
View File
@@ -914,6 +914,11 @@ bool audio_driver_mixer_extension_supported(const char *ext)
#ifdef HAVE_STB_VORBIS
string_list_append(str_list, "ogg", attr);
#endif
#ifdef HAVE_IBXM
string_list_append(str_list, "mod", attr);
string_list_append(str_list, "s3m", attr);
string_list_append(str_list, "xm", attr);
#endif
string_list_append(str_list, "wav", attr);
@@ -1008,6 +1013,9 @@ bool audio_driver_mixer_add_stream(audio_mixer_stream_params_t *params)
case AUDIO_MIXER_TYPE_OGG:
handle = audio_mixer_load_ogg(buf, (int32_t)params->bufsize);
break;
case AUDIO_MIXER_TYPE_MOD:
handle = audio_mixer_load_mod(buf, (int32_t)params->bufsize);
break;
case AUDIO_MIXER_TYPE_NONE:
free(buf);
return false;
+1 -1
View File
@@ -1523,7 +1523,7 @@ static struct pcm_params *pcm_params_get(unsigned int card, unsigned int device,
snprintf(fn, sizeof(fn), "/dev/snd/pcmC%uD%u%c", card, device,
flags & PCM_IN ? 'c' : 'p');
fd = open(fn, O_RDWR);
fd = open(fn, O_RDWR|O_NONBLOCK);
if (fd < 0)
{
fprintf(stderr, "cannot open device '%s'\n", fn);
+22 -23
View File
@@ -1372,9 +1372,7 @@ static void cheevos_free_condition(cheevos_condition_t* condition)
if (condition->condsets)
{
for (i = 0; i < condition->count; i++)
{
free((void*)condition->condsets[i].conds);
}
free((void*)condition->condsets);
}
@@ -2652,44 +2650,45 @@ bool cheevos_toggle_hardcore_mode(void)
static void cheevos_patch_addresses(cheevoset_t* set)
{
unsigned i, j, k;
cheevo_t* cheevo = set->cheevos;
for (unsigned i = set->count; i != 0; i--, cheevo++)
for (i = set->count; i != 0; i--, cheevo++)
{
cheevos_condset_t* condset = cheevo->condition.condsets;
for (unsigned j = cheevo->condition.count; j != 0; j--, condset++)
for (j = cheevo->condition.count; j != 0; j--, condset++)
{
cheevos_cond_t* cond = condset->conds;
for (unsigned k = condset->count; k != 0; k--, cond++)
for (k = condset->count; k != 0; k--, cond++)
{
switch (cond->source.type)
{
case CHEEVOS_VAR_TYPE_ADDRESS:
case CHEEVOS_VAR_TYPE_DELTA_MEM:
cheevos_parse_guest_addr(&cond->source, cond->source.value);
#ifdef CHEEVOS_DUMP_ADDRS
RARCH_LOG("CHEEVOS var %03d:%08X\n", cond->source.bank_id + 1, cond->source.value);
#endif
break;
case CHEEVOS_VAR_TYPE_ADDRESS:
case CHEEVOS_VAR_TYPE_DELTA_MEM:
cheevos_parse_guest_addr(&cond->source, cond->source.value);
#ifdef CHEEVOS_DUMP_ADDRS
RARCH_LOG("CHEEVOS var %03d:%08X\n", cond->source.bank_id + 1, cond->source.value);
#endif
break;
default:
break;
default:
break;
}
switch (cond->target.type)
{
case CHEEVOS_VAR_TYPE_ADDRESS:
case CHEEVOS_VAR_TYPE_DELTA_MEM:
cheevos_parse_guest_addr(&cond->target, cond->target.value);
#ifdef CHEEVOS_DUMP_ADDRS
RARCH_LOG("CHEEVOS var %03d:%08X\n", cond->target.bank_id + 1, cond->target.value);
#endif
break;
case CHEEVOS_VAR_TYPE_ADDRESS:
case CHEEVOS_VAR_TYPE_DELTA_MEM:
cheevos_parse_guest_addr(&cond->target, cond->target.value);
#ifdef CHEEVOS_DUMP_ADDRS
RARCH_LOG("CHEEVOS var %03d:%08X\n", cond->target.bank_id + 1, cond->target.value);
#endif
break;
default:
break;
default:
break;
}
}
}
+13 -1
View File
@@ -1,5 +1,6 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2011-2017 - Daniel De Matteis
* Copyright (C) 2015-2017 - Andrés Suárez
* Copyright (C) 2016-2017 - Brad Parker
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
@@ -1053,6 +1054,7 @@ static void command_event_deinit_core(bool reinit)
command_event(CMD_EVENT_DISABLE_OVERRIDES, NULL);
command_event(CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET, NULL);
command_event(CMD_EVENT_RESTORE_REMAPS, NULL);
}
static void command_event_init_cheats(void)
@@ -1226,7 +1228,7 @@ static bool command_event_init_core(enum rarch_core_type *data)
rarch_ctl(RARCH_CTL_UNSET_OVERRIDES_ACTIVE, NULL);
}
/* Auto-remap: apply shader preset files */
/* Auto-shaders: apply shader preset files */
if(settings->bools.auto_shaders_enable)
config_load_shader_preset();
@@ -1287,6 +1289,12 @@ static void command_event_restore_default_shader_preset(void)
path_clear(RARCH_PATH_DEFAULT_SHADER_PRESET);
}
static void command_event_restore_remaps(void)
{
if (rarch_ctl(RARCH_CTL_IS_REMAPS_GAME_ACTIVE, NULL))
input_remapping_set_defaults();
}
static bool command_event_save_auto_state(void)
{
char savestate_name_auto[PATH_MAX_LENGTH] = {0};
@@ -1797,6 +1805,7 @@ bool command_event(enum event_command cmd, void *data)
command_event(CMD_EVENT_AUTOSAVE_STATE, NULL);
command_event(CMD_EVENT_DISABLE_OVERRIDES, NULL);
command_event(CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET, NULL);
command_event(CMD_EVENT_RESTORE_REMAPS, NULL);
if (is_inited)
if (!task_push_start_dummy_core(&content_info))
@@ -2589,6 +2598,9 @@ bool command_event(enum event_command cmd, void *data)
case CMD_EVENT_DISABLE_OVERRIDES:
command_event_disable_overrides();
break;
case CMD_EVENT_RESTORE_REMAPS:
command_event_restore_remaps();
break;
case CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET:
command_event_restore_default_shader_preset();
break;
+1
View File
@@ -218,6 +218,7 @@ enum event_command
CMD_EVENT_MIXER_VOLUME_UP,
CMD_EVENT_MIXER_VOLUME_DOWN,
CMD_EVENT_DISABLE_OVERRIDES,
CMD_EVENT_RESTORE_REMAPS,
CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET,
CMD_EVENT_LIBUI_TEST
};
+13 -2
View File
@@ -295,6 +295,11 @@ static bool default_auto_shaders_enable = true;
static bool default_sort_savefiles_enable = false;
static bool default_sort_savestates_enable = false;
static bool default_savestates_in_content_dir = false;
static bool default_savefiles_in_content_dir = false;
static bool default_systemfiles_in_content_dir = false;
static bool default_screenshots_in_content_dir = false;
#if defined(__CELLOS_LV2__) || defined(_XBOX1) || defined(_XBOX360)
static unsigned menu_toggle_gamepad_combo = INPUT_TOGGLE_L3_R3;
#elif defined(VITA)
@@ -610,11 +615,17 @@ static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/window
#elif defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(_M_IX86) || defined(_M_IA64)
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/windows-msvc2010/x86/latest/";
#endif
#elif _MSC_VER == 1400
#if defined(__x86_64__)
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/windows-msvc2005/x86_64/latest/";
#elif defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(_M_IX86) || defined(_M_IA64)
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/windows-msvc2005/x86/latest/";
#endif
#else
#if defined(__x86_64__)
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/win-x86_64/latest/";
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/windows/x86_64/latest/";
#elif defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(_M_IX86) || defined(_M_IA64)
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/win-x86/latest/";
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/windows/x86/latest/";
#endif
#endif
#elif defined(__linux__)
+46 -36
View File
@@ -2,6 +2,7 @@
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
* Copyright (C) 2011-2017 - Daniel De Matteis
* Copyright (C) 2014-2017 - Jean-André Santoni
* Copyright (C) 2015-2017 - Andrés Suárez
* Copyright (C) 2016-2017 - Brad Parker
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
@@ -52,7 +53,7 @@
/* All config related settings go here. */
struct config_bool_setting
{
{
const char *ident;
bool *ptr;
bool def_enable;
@@ -61,7 +62,7 @@ struct config_bool_setting
};
struct config_int_setting
{
{
const char *ident;
int *ptr;
bool def_enable;
@@ -70,7 +71,7 @@ struct config_int_setting
};
struct config_uint_setting
{
{
const char *ident;
unsigned *ptr;
bool def_enable;
@@ -79,7 +80,7 @@ struct config_uint_setting
};
struct config_float_setting
{
{
const char *ident;
float *ptr;
bool def_enable;
@@ -88,7 +89,7 @@ struct config_float_setting
};
struct config_array_setting
{
{
const char *ident;
char *ptr;
bool def_enable;
@@ -97,7 +98,7 @@ struct config_array_setting
};
struct config_path_setting
{
{
const char *ident;
char *ptr;
bool def_enable;
@@ -485,7 +486,7 @@ static enum menu_driver_enum MENU_DEFAULT_DRIVER = MENU_NULL;
tmp[count].def = default_setting; \
tmp[count].handle = handle_setting; \
count++; \
}
}
#define SETTING_BOOL(key, configval, default_enable, default_setting, handle_setting) \
GENERAL_SETTING(key, configval, default_enable, default_setting, struct config_bool_setting, handle_setting)
@@ -1014,7 +1015,7 @@ static struct config_path_setting *populate_settings_path(settings_t *settings,
SETTING_PATH("cheat_database_path",
settings->paths.path_cheat_database, false, NULL, true);
#ifdef HAVE_MENU
SETTING_PATH("menu_wallpaper",
SETTING_PATH("menu_wallpaper",
settings->paths.path_menu_wallpaper, false, NULL, true);
#endif
SETTING_PATH("content_history_path",
@@ -1033,7 +1034,7 @@ static struct config_path_setting *populate_settings_path(settings_t *settings,
settings->paths.path_font, false, NULL, true);
SETTING_PATH("cursor_directory",
settings->paths.directory_cursor, false, NULL, true);
SETTING_PATH("content_history_dir",
SETTING_PATH("content_history_dir",
settings->paths.directory_content_history, false, NULL, true);
SETTING_PATH("screenshot_directory",
settings->paths.directory_screenshot, true, NULL, true);
@@ -1063,7 +1064,7 @@ static struct config_path_setting *populate_settings_path(settings_t *settings,
settings->paths.directory_autoconfig, false, NULL, true);
SETTING_PATH("audio_filter_dir",
settings->paths.directory_audio_filter, true, NULL, true);
SETTING_PATH("savefile_directory",
SETTING_PATH("savefile_directory",
dir_get_ptr(RARCH_DIR_SAVEFILE), true, NULL, false);
SETTING_PATH("savestate_directory",
dir_get_ptr(RARCH_DIR_SAVESTATE), true, NULL, false);
@@ -1078,11 +1079,11 @@ static struct config_path_setting *populate_settings_path(settings_t *settings,
settings->paths.directory_overlay, true, NULL, true);
#endif
#ifndef HAVE_DYNAMIC
SETTING_PATH("libretro_path",
SETTING_PATH("libretro_path",
path_get_ptr(RARCH_PATH_CORE), false, NULL, false);
#endif
SETTING_PATH(
"screenshot_directory",
"screenshot_directory",
settings->paths.directory_screenshot, true, NULL, false);
if (global)
@@ -1180,6 +1181,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
#endif
SETTING_BOOL("menu_throttle_framerate", &settings->bools.menu_throttle_framerate, true, true, false);
SETTING_BOOL("menu_linear_filter", &settings->bools.menu_linear_filter, true, true, false);
SETTING_BOOL("menu_horizontal_animation", &settings->bools.menu_horizontal_animation, true, true, false);
SETTING_BOOL("dpi_override_enable", &settings->bools.menu_dpi_override_enable, true, menu_dpi_override_enable, false);
SETTING_BOOL("menu_pause_libretro", &settings->bools.menu_pause_libretro, true, true, false);
SETTING_BOOL("menu_mouse_enable", &settings->bools.menu_mouse_enable, true, def_mouse_enable, false);
@@ -1204,14 +1206,14 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("xmb_show_netplay", &settings->bools.menu_xmb_show_netplay, true, xmb_show_netplay, false);
#endif
SETTING_BOOL("xmb_show_history", &settings->bools.menu_xmb_show_history, true, xmb_show_history, false);
#ifdef HAVE_LIBRETRODB
#ifdef HAVE_LIBRETRODB
SETTING_BOOL("xmb_show_add", &settings->bools.menu_xmb_show_add, true, xmb_show_add, false);
#endif
#endif
SETTING_BOOL("filter_by_current_core", &settings->bools.filter_by_current_core, false, false /* TODO */, false);
SETTING_BOOL("rgui_show_start_screen", &settings->bools.menu_show_start_screen, false, false /* TODO */, false);
SETTING_BOOL("menu_navigation_wraparound_enable", &settings->bools.menu_navigation_wraparound_enable, true, true, false);
SETTING_BOOL("menu_navigation_browser_filter_supported_extensions_enable",
SETTING_BOOL("menu_navigation_browser_filter_supported_extensions_enable",
&settings->bools.menu_navigation_browser_filter_supported_extensions_enable, true, true, false);
SETTING_BOOL("menu_show_advanced_settings", &settings->bools.menu_show_advanced_settings, true, show_advanced_settings, false);
#endif
@@ -1258,6 +1260,11 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("audio_wasapi_float_format", &settings->bools.audio_wasapi_float_format, true, wasapi_float_format, false);
#endif
SETTING_BOOL("savestates_in_content_dir", &settings->bools.savestates_in_content_dir, true, default_savestates_in_content_dir, false);
SETTING_BOOL("savefiles_in_content_dir", &settings->bools.savefiles_in_content_dir, true, default_savefiles_in_content_dir, false);
SETTING_BOOL("systemfiles_in_content_dir", &settings->bools.systemfiles_in_content_dir, true, default_systemfiles_in_content_dir, false);
SETTING_BOOL("screenshots_in_content_dir", &settings->bools.screenshots_in_content_dir, true, default_screenshots_in_content_dir, false);
if (global)
{
SETTING_BOOL("custom_bgm_enable", &global->console.sound.system_bgm_enable, true, false, false);
@@ -1923,7 +1930,7 @@ static config_file_t *open_default_config_file(void)
RARCH_WARN("Created new config file in: \"%s\".\n", conf_path);
}
#elif !defined(RARCH_CONSOLE)
bool has_application_data =
bool has_application_data =
fill_pathname_application_data(application_data,
sizeof(application_data));
@@ -2099,7 +2106,7 @@ static bool check_shader_compatibility(enum file_path_enum enum_idx)
return true;
}
if (string_is_equal_fast(settings->arrays.video_driver, "gl", 2) ||
if (string_is_equal_fast(settings->arrays.video_driver, "gl", 2) ||
string_is_equal_fast(settings->arrays.video_driver, "d3d", 3)
)
{
@@ -2170,7 +2177,7 @@ static void config_get_hex_base(config_file_t *conf,
* Loads a config file and reads all the values into memory.
*
*/
static bool config_load_file(const char *path, bool set_defaults,
static bool config_load_file(const char *path, bool set_defaults,
settings_t *settings)
{
unsigned i;
@@ -2706,10 +2713,10 @@ end:
* This function only has an effect if a game-specific or core-specific
* configuration file exists at respective locations.
*
* core-specific: $CONFIG_DIR/$CORE_NAME/$CORE_NAME.cfg
* core-specific: $CONFIG_DIR/$CORE_NAME/$CORE_NAME.cfg
* fallback: $CURRENT_CFG_LOCATION/$CORE_NAME/$CORE_NAME.cfg
*
* game-specific: $CONFIG_DIR/$CORE_NAME/$ROM_NAME.cfg
* game-specific: $CONFIG_DIR/$CORE_NAME/$ROM_NAME.cfg
* fallback: $CURRENT_CFG_LOCATION/$CORE_NAME/$GAME_NAME.cfg
*
* Returns: false if there was an error or no action was performed.
@@ -2805,7 +2812,7 @@ bool config_load_override(void)
/* Re-load the configuration with any overrides that might have been found */
buf[0] = '\0';
/* Store the libretro_path we're using since it will be
/* Store the libretro_path we're using since it will be
* overwritten by the override when reloading. */
strlcpy(buf, path_get(RARCH_PATH_CORE), sizeof(buf));
@@ -2925,6 +2932,7 @@ bool config_load_remap(void)
if (input_remapping_load_file(new_conf, game_path))
{
runloop_msg_queue_push("Game remap file loaded.", 1, 100, true);
rarch_ctl(RARCH_CTL_SET_REMAPS_GAME_ACTIVE, NULL);
return true;
}
}
@@ -2944,6 +2952,7 @@ bool config_load_remap(void)
if (input_remapping_load_file(new_conf, core_path))
{
runloop_msg_queue_push("Core remap file loaded.", 1, 100, true);
rarch_ctl(RARCH_CTL_SET_REMAPS_CORE_ACTIVE, NULL);
return true;
}
}
@@ -3252,7 +3261,7 @@ static void save_keybinds_user(config_file_t *conf, unsigned user)
*/
void config_load(void)
{
/* Flush out some states that could have been
/* Flush out some states that could have been
* set by core environment variables */
core_unset_input_descriptors();
@@ -3442,7 +3451,7 @@ bool config_save_file(const char *path)
#ifdef HAVE_MENU
config_set_path(conf, "xmb_font",
!string_is_empty(settings->paths.path_menu_xmb_font)
!string_is_empty(settings->paths.path_menu_xmb_font)
? settings->paths.path_menu_xmb_font : "");
#endif
@@ -3633,7 +3642,7 @@ bool config_save_overrides(int override_type)
fill_pathname_application_special(config_directory, sizeof(config_directory),
APPLICATION_SPECIAL_DIRECTORY_CONFIG);
fill_pathname_join(override_directory, config_directory, core_name,
fill_pathname_join(override_directory, config_directory, core_name,
sizeof(override_directory));
if(!path_file_exists(override_directory))
@@ -3690,9 +3699,9 @@ bool config_save_overrides(int override_type)
{
if ((*bool_settings[i].ptr) != (*bool_overrides[i].ptr))
{
RARCH_LOG(" original: %s=%d\n",
RARCH_LOG(" original: %s=%d\n",
bool_settings[i].ident, (*bool_settings[i].ptr));
RARCH_LOG(" override: %s=%d\n",
RARCH_LOG(" override: %s=%d\n",
bool_overrides[i].ident, (*bool_overrides[i].ptr));
config_set_bool(conf, bool_overrides[i].ident,
(*bool_overrides[i].ptr));
@@ -3702,9 +3711,9 @@ bool config_save_overrides(int override_type)
{
if ((*int_settings[i].ptr) != (*int_overrides[i].ptr))
{
RARCH_LOG(" original: %s=%d\n",
RARCH_LOG(" original: %s=%d\n",
int_settings[i].ident, (*int_settings[i].ptr));
RARCH_LOG(" override: %s=%d\n",
RARCH_LOG(" override: %s=%d\n",
int_overrides[i].ident, (*int_overrides[i].ptr));
config_set_int(conf, int_overrides[i].ident,
(*int_overrides[i].ptr));
@@ -3714,9 +3723,9 @@ bool config_save_overrides(int override_type)
{
if ((*uint_settings[i].ptr) != (*uint_overrides[i].ptr))
{
RARCH_LOG(" original: %s=%d\n",
RARCH_LOG(" original: %s=%d\n",
uint_settings[i].ident, (*uint_settings[i].ptr));
RARCH_LOG(" override: %s=%d\n",
RARCH_LOG(" override: %s=%d\n",
uint_overrides[i].ident, (*uint_overrides[i].ptr));
config_set_int(conf, uint_overrides[i].ident,
(*uint_overrides[i].ptr));
@@ -3726,9 +3735,9 @@ bool config_save_overrides(int override_type)
{
if ((*float_settings[i].ptr) != (*float_overrides[i].ptr))
{
RARCH_LOG(" original: %s=%f\n",
RARCH_LOG(" original: %s=%f\n",
float_settings[i].ident, *float_settings[i].ptr);
RARCH_LOG(" override: %s=%f\n",
RARCH_LOG(" override: %s=%f\n",
float_overrides[i].ident, *float_overrides[i].ptr);
config_set_float(conf, float_overrides[i].ident,
*float_overrides[i].ptr);
@@ -3739,9 +3748,9 @@ bool config_save_overrides(int override_type)
{
if (!string_is_equal(array_settings[i].ptr, array_overrides[i].ptr))
{
RARCH_LOG(" original: %s=%s\n",
RARCH_LOG(" original: %s=%s\n",
array_settings[i].ident, array_settings[i].ptr);
RARCH_LOG(" override: %s=%s\n",
RARCH_LOG(" override: %s=%s\n",
array_overrides[i].ident, array_overrides[i].ptr);
config_set_string(conf, array_overrides[i].ident,
array_overrides[i].ptr);
@@ -3752,9 +3761,9 @@ bool config_save_overrides(int override_type)
{
if (!string_is_equal(path_settings[i].ptr, path_overrides[i].ptr))
{
RARCH_LOG(" original: %s=%s\n",
RARCH_LOG(" original: %s=%s\n",
path_settings[i].ident, path_settings[i].ptr);
RARCH_LOG(" override: %s=%s\n",
RARCH_LOG(" override: %s=%s\n",
path_overrides[i].ident, path_overrides[i].ptr);
config_set_path(conf, path_overrides[i].ident,
path_overrides[i].ptr);
@@ -3776,7 +3785,8 @@ bool config_save_overrides(int override_type)
snprintf(cfg, sizeof(cfg), "input_player%u_joypad_index", i + 1);
config_set_int(conf, cfg, overrides->uints.input_joypad_map[i]);
}
if (input_config_get_device(i) != overrides->uints.input_libretro_device[i])
if (settings->uints.input_libretro_device[i] != overrides->uints.input_libretro_device[i])
{
snprintf(cfg, sizeof(cfg), "input_libretro_device_p%u", i + 1);
config_set_int(conf, cfg, overrides->uints.input_libretro_device[i]);
+6
View File
@@ -119,6 +119,7 @@ typedef struct settings
bool menu_show_advanced_settings;
bool menu_throttle_framerate;
bool menu_linear_filter;
bool menu_horizontal_animation;
bool menu_show_online_updater;
bool menu_show_core_updater;
bool menu_xmb_shadows_enable;
@@ -209,6 +210,11 @@ typedef struct settings
bool sort_savestates_enable;
bool config_save_on_exit;
bool show_hidden_files;
bool savefiles_in_content_dir;
bool savestates_in_content_dir;
bool screenshots_in_content_dir;
bool systemfiles_in_content_dir;
#ifdef HAVE_LAKKA
bool ssh_enable;
bool samba_enable;
+21
View File
@@ -0,0 +1,21 @@
Micromod (c)2017 [email protected]
A good-quality player library for the ProTracker MOD music format
for Javascript (HTML5 Web Audio), Java, ANSI C (SDL) and Pascal (SDL).
Also hosted here is IBXM, a player library for the ProTracker MOD,
Scream Tracker 3 S3M, and FastTracker 2 XM music formats for Javascript
(HTML5 Web Audio), Java and ANSI C.
The Java version of Micromod contains a powerful command-line tool for
the creation of MOD files from textual MT files and WAV samples.
There is some basic documentation built-in to the tool and some example
MT files are contained in the songs directory. Some knowledge of the
ProTracker MOD format, audio synthesis and "tracking" is assumed.
If you have any questions or feedback please feel free to
contact me at the above email address!
Cheers,
Martin
+1922
View File
File diff suppressed because it is too large. Load diff
+71
View File
@@ -0,0 +1,71 @@
/* ibxm/ac mod/xm/s3m replay (c)[email protected] */
#ifndef __IBXM_H__
#define __IBXM_H__
extern const char *IBXM_VERSION;
struct data {
char *buffer;
int length;
};
struct sample {
char name[ 32 ];
int loop_start, loop_length;
short volume, panning, rel_note, fine_tune, *data;
};
struct envelope {
char enabled, sustain, looped, num_points;
short sustain_tick, loop_start_tick, loop_end_tick;
short points_tick[ 16 ], points_ampl[ 16 ];
};
struct instrument {
int num_samples, vol_fadeout;
char name[ 32 ], key_to_sample[ 97 ];
char vib_type, vib_sweep, vib_depth, vib_rate;
struct envelope vol_env, pan_env;
struct sample *samples;
};
struct pattern {
int num_channels, num_rows;
char *data;
};
struct module {
char name[ 32 ];
int num_channels, num_instruments;
int num_patterns, sequence_len, restart_pos;
int default_gvol, default_speed, default_tempo, c2_rate, gain;
int linear_periods, fast_vol_slides;
unsigned char *default_panning, *sequence;
struct pattern *patterns;
struct instrument *instruments;
};
/* Allocate and initialize a module from the specified data, returns NULL on error.
Message should point to a 64-character buffer to receive error messages. */
struct module* module_load( struct data *data, char *message );
/* Deallocate the specified module. */
void dispose_module( struct module *module );
/* Allocate and initialize a replay with the specified module and sampling rate. */
struct replay* new_replay( struct module *module, int sample_rate, int interpolation );
/* Deallocate the specified replay. */
void dispose_replay( struct replay *replay );
/* Returns the song duration in samples at the current sampling rate. */
int replay_calculate_duration( struct replay *replay );
/* Seek to approximately the specified sample position.
The actual sample position reached is returned. */
int replay_seek( struct replay *replay, int sample_pos );
/* Set the pattern in the sequence to play. The tempo is reset to the default. */
void replay_set_sequence_pos( struct replay *replay, int pos );
/* Generates audio and returns the number of stereo samples written into mix_buf. */
int replay_get_audio( struct replay *replay, int *mix_buf );
/* Returns the length of the output buffer required by replay_get_audio(). */
int calculate_mix_buf_len( int sample_rate );
#endif
+37
View File
@@ -0,0 +1,37 @@
---
Copyright (c) 2015, Martin Cameron
All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the
above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the organization nor the names of
its contributors may be used to endorse or promote
products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
---
+5 -1
View File
@@ -1,6 +1,6 @@
#!/bin/sh
RARCH_VERSION=1.3.6
RARCH_VERSION=1.6.4
PLATFORM=$1
SALAMANDER=no
MAKEFILE_GRIFFIN=no
@@ -90,6 +90,8 @@ SCETOOL_PATH=${PS3TOOLS_PATH}/scetool/scetool.exe
SCETOOL_FLAGS_CORE="--sce-type=SELF --compress-data=TRUE --skip-sections=TRUE --key-revision=04 --self-auth-id=1010000001000003 --self-vendor-id=01000002 --self-type=APP --self-app-version=0001000000000000 --self-fw-version=0003004100000000 --encrypt"
SCETOOL_FLAGS_EBOOT="--sce-type=SELF --compress-data=TRUE --skip-sections=TRUE --key-revision=04 --self-auth-id=1010000001000003 --self-vendor-id=01000002 --self-type=NPDRM --self-fw-version=0003004100000000 --np-license-type=FREE --np-content-id=UP0001-SSNE10000_00-0000000000000001 --np-app-type=EXEC --self-app-version=0001000000000000 --np-real-fname=EBOOT.BIN --encrypt"
cp -rfv ${PS3TOOLS_PATH}/scetool/data .
# ODE PS3
elif [ $PLATFORM = "ode-ps3" ]; then
#For this script to work correctly, you must place scetool.exe and the "data" folder containing your ps3 keys for scetool to use in the dist-scripts folder.
@@ -418,6 +420,8 @@ if [ $PLATFORM = "dex-ps3" ] ; then
elif [ $PLATFORM = "cex-ps3" ] ; then
$SCETOOL_PATH $SCETOOL_FLAGS_EBOOT ../retroarch-salamander_${platform}.elf ../pkg/${platform}/SSNE10000/USRDIR/EBOOT.BIN
rm -rf ../retroarch-salamander_${platform}.elf
(cd ../tools/ps3/ps3py && python2 setup.py build)
find ../tools/ps3/ps3py/build -name '*.dll' -exec cp {} ../tools/ps3/ps3py \;
../tools/ps3/ps3py/pkg.py --contentid UP0001-SSNE10000_00-0000000000000001 ../pkg/${platform}/SSNE10000/ ../pkg/${platform}/RetroArch.PS3.CEX.PS3.pkg
elif [ $PLATFORM = "ode-ps3" ] ; then
$SCETOOL_PATH $SCETOOL_FLAGS_ODE ../retroarch-salamander_${platform}.elf ../pkg/${platform}_iso/PS3_GAME/USRDIR/EBOOT.BIN
+20 -5
View File
@@ -92,8 +92,9 @@ static dylib_t lib_handle;
#define SYMBOL_VIDEOPROCESSOR(x) current_core->x = libretro_videoprocessor_##x
#endif
static bool ignore_environment_cb = false;
static bool *load_no_content_hook = NULL;
static bool ignore_environment_cb = false;
static bool core_set_shared_context = false;
static bool *load_no_content_hook = NULL;
const struct retro_subsystem_info *libretro_find_subsystem_info(
const struct retro_subsystem_info *info, unsigned num_info,
@@ -632,6 +633,11 @@ bool init_libretro_sym(enum rarch_core_type type, struct retro_core_t *current_c
return true;
}
bool libretro_get_shared_context(void)
{
return core_set_shared_context;
}
/**
* uninit_libretro_sym:
*
@@ -651,6 +657,8 @@ void uninit_libretro_sym(struct retro_core_t *current_core)
memset(current_core, 0, sizeof(struct retro_core_t));
core_set_shared_context = false;
rarch_ctl(RARCH_CTL_CORE_OPTIONS_DEINIT, NULL);
rarch_ctl(RARCH_CTL_SYSTEM_INFO_FREE, NULL);
rarch_ctl(RARCH_CTL_FRAME_TIME_FREE, NULL);
@@ -1016,7 +1024,7 @@ bool rarch_environment_cb(unsigned cmd, void *data)
break;
case RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY:
if (string_is_empty(settings->paths.directory_system))
if (string_is_empty(settings->paths.directory_system) || settings->bools.systemfiles_in_content_dir)
{
const char *fullpath = path_get(RARCH_PATH_CONTENT);
if (!string_is_empty(fullpath))
@@ -1025,8 +1033,9 @@ bool rarch_environment_cb(unsigned cmd, void *data)
temp_path[0] = '\0';
RARCH_WARN("SYSTEM DIR is empty, assume CONTENT DIR %s\n",
fullpath);
if (string_is_empty(settings->paths.directory_system))
RARCH_WARN("SYSTEM DIR is empty, assume CONTENT DIR %s\n",
fullpath);
fill_pathname_basedir(temp_path, fullpath, sizeof(temp_path));
dir_set(RARCH_DIR_SYSTEM, temp_path);
}
@@ -1633,6 +1642,12 @@ bool rarch_environment_cb(unsigned cmd, void *data)
break;
}
case RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT:
{
core_set_shared_context = true;
break;
}
/* Default */
default:
RARCH_LOG("Environ UNSUPPORTED (#%u).\n", cmd);
+2
View File
@@ -117,6 +117,8 @@ struct retro_core_t
uint64_t serialization_quirks_v;
};
bool libretro_get_shared_context(void);
/**
* init_libretro_sym:
* @type : Type of core to be loaded.
+3
View File
@@ -82,6 +82,9 @@ enum file_path_enum
FILE_PATH_7Z_EXTENSION,
FILE_PATH_OGG_EXTENSION,
FILE_PATH_WAV_EXTENSION,
FILE_PATH_MOD_EXTENSION,
FILE_PATH_S3M_EXTENSION,
FILE_PATH_XM_EXTENSION,
FILE_PATH_CONFIG_EXTENSION,
FILE_PATH_CORE_INFO_EXTENSION
};
+9
View File
@@ -107,6 +107,15 @@ const char *file_path_str(enum file_path_enum enum_idx)
case FILE_PATH_WAV_EXTENSION:
str = ".wav";
break;
case FILE_PATH_MOD_EXTENSION:
str = ".mod";
break;
case FILE_PATH_S3M_EXTENSION:
str = ".s3m";
break;
case FILE_PATH_XM_EXTENSION:
str = ".xm";
break;
case FILE_PATH_JPEG_EXTENSION:
str = ".jpeg";
break;
+53 -22
View File
@@ -1557,18 +1557,6 @@ static void frontend_unix_get_env(int *argc,
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_WALLPAPERS],
app_dir, "assets/wallpapers",
sizeof(g_defaults.dirs[DEFAULT_DIR_WALLPAPERS]));
if(!string_is_empty(downloads_dir) && test_permissions(downloads_dir))
{
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
downloads_dir, "",
sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS]));
}
else
{
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
app_dir, "downloads",
sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS]));
}
__android_log_print(ANDROID_LOG_INFO,
"RetroArch", "[ENV]: default download folder: [%s]",
@@ -1576,8 +1564,7 @@ static void frontend_unix_get_env(int *argc,
switch (perms)
{
/* Set defaults for this since we can't guarantee
* saving on content dir will work in this case */
/* only sdcard/Android/data/com.retroarch is writable */
case INTERNAL_STORAGE_APPDIR_WRITABLE:
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SRAM],
internal_storage_app_path, "saves",
@@ -1605,11 +1592,11 @@ static void frontend_unix_get_env(int *argc,
internal_storage_app_path, "cheats",
sizeof(g_defaults.dirs[DEFAULT_DIR_CHEATS]));
if( !string_is_empty(screenshot_dir)
&& test_permissions(screenshot_dir))
if(!string_is_empty(screenshot_dir)
&& test_permissions(screenshot_dir))
{
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT],
screenshot_dir, "",
screenshot_dir, "RetroArch",
sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
}
else
@@ -1619,10 +1606,24 @@ static void frontend_unix_get_env(int *argc,
sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
}
if(!string_is_empty(downloads_dir)
&& test_permissions(downloads_dir))
{
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
downloads_dir, "RetroArch",
sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS]));
}
else
{
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
internal_storage_app_path, "downloads",
sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS]));
}
break;
/* only the internal app dir is writable, this should never happen*/
case INTERNAL_STORAGE_NOT_WRITABLE:
/* Set defaults for this since we can't guarantee
* saving on content dir will work in this case. */
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SRAM],
app_dir, "saves",
sizeof(g_defaults.dirs[DEFAULT_DIR_SRAM]));
@@ -1653,7 +1654,7 @@ static void frontend_unix_get_env(int *argc,
&& test_permissions(screenshot_dir))
{
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT],
screenshot_dir, "",
screenshot_dir, "RetroArch",
sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
}
else
@@ -1663,10 +1664,40 @@ static void frontend_unix_get_env(int *argc,
sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
}
if(!string_is_empty(downloads_dir)
&& test_permissions(downloads_dir))
{
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
downloads_dir, "RetroArch",
sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS]));
}
else
{
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
app_dir, "downloads",
sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS]));
}
break;
/* sdcard is writable, this should be the case most of the time*/
case INTERNAL_STORAGE_WRITABLE:
/* Don't set defaults for saves, states, system or screenshots
in this case to be able to honour saving on content dir */
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SRAM],
internal_storage_path, "RetroArch/saves",
sizeof(g_defaults.dirs[DEFAULT_DIR_SRAM]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SAVESTATE],
internal_storage_path, "RetroArch/states",
sizeof(g_defaults.dirs[DEFAULT_DIR_SAVESTATE]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SYSTEM],
internal_storage_path, "RetroArch/system",
sizeof(g_defaults.dirs[DEFAULT_DIR_SYSTEM]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT],
internal_storage_path, "RetroArch/screenshots",
sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
internal_storage_path, "RetroArch/downloads",
sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_MENU_CONFIG],
internal_storage_path, "RetroArch/config",
sizeof(g_defaults.dirs[DEFAULT_DIR_MENU_CONFIG]));
-5
View File
@@ -48,7 +48,6 @@
#include "system/dynamic.h"
#include "system/memory.h"
#include "system/exception_handler.h"
#include "system/exception.h"
#include <sys/iosupport.h>
#include <wiiu/os/foreground.h>
@@ -408,11 +407,7 @@ static bool swap_is_pending(void* start_time)
int main(int argc, char **argv)
{
#if 1
setup_os_exceptions();
#else
InstallExceptionHandler();
#endif
ProcUIInit(&SaveCallback);
#ifdef IS_SALAMANDER
+8 -2
View File
@@ -278,9 +278,9 @@ static void frontend_win32_environment_get(int *argc, char *argv[],
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_PLAYLIST],
":\\playlists", sizeof(g_defaults.dirs[DEFAULT_DIR_ASSETS]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG],
":\\records_config", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG]));
":\\config\\record", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_RECORD_OUTPUT],
":\\records", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_OUTPUT]));
":\\recordings", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_OUTPUT]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_MENU_CONFIG],
":\\config", sizeof(g_defaults.dirs[DEFAULT_DIR_MENU_CONFIG]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_REMAP],
@@ -303,6 +303,12 @@ static void frontend_win32_environment_get(int *argc, char *argv[],
":\\downloads", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT],
":\\screenshots", sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_SRAM],
":\\saves", sizeof(g_defaults.dirs[DEFAULT_DIR_SRAM]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_SAVESTATE],
":\\states", sizeof(g_defaults.dirs[DEFAULT_DIR_SAVESTATE]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_SYSTEM],
":\\system", sizeof(g_defaults.dirs[DEFAULT_DIR_SYSTEM]));
#ifdef HAVE_MENU
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
+1 -1
View File
@@ -94,7 +94,7 @@ static void *caca_gfx_init(const video_info_t *video,
}
if (video->font_enable)
font_driver_init_osd(NULL, false, video->is_threaded,
font_driver_init_osd(caca, false, video->is_threaded,
FONT_DRIVER_RENDER_CACA);
return caca;
+1 -1
View File
@@ -140,7 +140,7 @@ static void *gdi_gfx_init(const video_info_t *video,
video_context_driver_input_driver(&inp);
if (settings->bools.video_font_enable)
font_driver_init_osd(NULL, false,
font_driver_init_osd(gdi, false,
video->is_threaded,
FONT_DRIVER_RENDER_GDI);
+4
View File
@@ -43,6 +43,7 @@
#include "../drivers_renderchain/gl_legacy_renderchain.h"
#include "../../configuration.h"
#include "../../dynamic.h"
#include "../../record/record_driver.h"
#include "../../retroarch.h"
@@ -1658,6 +1659,9 @@ static const gfx_ctx_driver_t *gl_get_context(gl_t *gl)
gl_shared_context_use = settings->bools.video_shared_context
&& hwr->context_type != RETRO_HW_CONTEXT_NONE;
if (libretro_get_shared_context() && (hwr->context_type != RETRO_HW_CONTEXT_NONE))
gl_shared_context_use = true;
return video_context_driver_init_first(gl, settings->arrays.video_context_driver,
api, major, minor, gl_shared_context_use);
}
+60 -5
View File
@@ -42,6 +42,37 @@
#include "../../configuration.h"
#include "../../driver.h"
#ifndef _CPU_ISR_Disable
#define _CPU_ISR_Disable( _isr_cookie ) \
{ register u32 _disable_mask = 0; \
_isr_cookie = 0; \
__asm__ __volatile__ ( \
"mfmsr %0\n" \
"rlwinm %1,%0,0,17,15\n" \
"mtmsr %1\n" \
"extrwi %0,%0,1,16" \
: "=&r" ((_isr_cookie)), "=&r" ((_disable_mask)) \
: "0" ((_isr_cookie)), "1" ((_disable_mask)) \
); \
}
#endif
#ifndef _CPU_ISR_Restore
#define _CPU_ISR_Restore( _isr_cookie ) \
{ register u32 _enable_mask = 0; \
__asm__ __volatile__ ( \
" cmpwi %0,0\n" \
" beq 1f\n" \
" mfmsr %1\n" \
" ori %1,%1,0x8000\n" \
" mtmsr %1\n" \
"1:" \
: "=r"((_isr_cookie)),"=&r" ((_enable_mask)) \
: "0"((_isr_cookie)),"1" ((_enable_mask)) \
); \
}
#endif
extern syssram* __SYS_LockSram(void);
extern u32 __SYS_UnlockSram(u32 write);
@@ -92,6 +123,9 @@ static volatile bool g_draw_done = false;
static bool g_vsync = false;
static uint32_t g_orientation = 0;
static uint32_t retraceCount;
static uint32_t referenceRetraceCount;
static uint8_t gx_fifo[256 * 1024] ATTRIBUTE_ALIGN(32);
static uint8_t display_list[1024] ATTRIBUTE_ALIGN(32);
static size_t display_list_size;
@@ -213,9 +247,15 @@ unsigned menu_gx_resolutions[][2] = {
static void retrace_callback(u32 retrace_count)
{
u32 level = 0;
(void)retrace_count;
g_draw_done = true;
OSSignalCond(g_video_cond);
_CPU_ISR_Disable(level);
retraceCount = retrace_count;
_CPU_ISR_Restore(level);
}
static bool gx_isValidXOrigin(int origin)
@@ -249,7 +289,7 @@ static void gx_set_video_mode(void *data, unsigned fbWidth, unsigned lines,
VIDEO_SetPostRetraceCallback(NULL);
g_draw_done = false;
/* wait for next even field */
/* this prevents screen artefacts when switching
/* this prevents screen artifacts when switching
* between interlaced & non-interlaced modes */
do VIDEO_WaitVSync();
while (!VIDEO_GetNextField());
@@ -293,13 +333,13 @@ static void gx_set_video_mode(void *data, unsigned fbWidth, unsigned lines,
max_height = VI_MAX_HEIGHT_MPAL;
break;
case VI_EURGB60:
max_width = VI_MAX_WIDTH_NTSC;
max_height = VI_MAX_HEIGHT_NTSC;
max_width = VI_MAX_WIDTH_EURGB60;
max_height = VI_MAX_HEIGHT_EURGB60;
break;
default:
tvmode = VI_NTSC;
max_width = VI_MAX_WIDTH_EURGB60;
max_height = VI_MAX_HEIGHT_EURGB60;
max_width = VI_MAX_WIDTH_NTSC;
max_height = VI_MAX_HEIGHT_NTSC;
break;
}
@@ -575,6 +615,10 @@ static void init_vtx(void *data, const video_info_t *video)
{
Mtx44 m;
gx_video_t *gx = (gx_video_t*)data;
u32 level = 0;
_CPU_ISR_Disable(level);
referenceRetraceCount = retraceCount;
_CPU_ISR_Restore(level);
GX_SetCullMode(GX_CULL_NONE);
GX_SetClipMode(GX_CLIP_DISABLE);
@@ -1440,6 +1484,7 @@ static bool gx_frame(void *data, const void *frame,
char fps_text_buf[128];
gx_video_t *gx = (gx_video_t*)data;
u8 clear_efb = GX_FALSE;
u32 level = 0;
fps_text_buf[0] = '\0';
@@ -1524,6 +1569,12 @@ static bool gx_frame(void *data, const void *frame,
gx_render_overlay(gx);
#endif
_CPU_ISR_Disable(level);
if (referenceRetraceCount > retraceCount)
VIDEO_WaitVSync();
referenceRetraceCount = retraceCount;
_CPU_ISR_Restore(level);
GX_DrawDone();
if (video_info->fps_show)
@@ -1564,6 +1615,10 @@ static bool gx_frame(void *data, const void *frame,
VIDEO_SetNextFramebuffer(gx->framebuf[g_current_framebuf]);
VIDEO_Flush();
_CPU_ISR_Disable(level);
++referenceRetraceCount;
_CPU_ISR_Restore(level);
return true;
}
-2
View File
@@ -45,8 +45,6 @@ static void *caca_init_font(void *data,
font->caca = (caca_t*)data;
font_size = 1;
if (!font_renderer_create_default((const void**)&font->caca_font_driver,
&font->caca_font_data, font_path, font_size))
{
-2
View File
@@ -51,8 +51,6 @@ static void *gdi_init_font(void *data,
font->gdi = (gdi_t*)data;
font_size = 1;
if (!font_renderer_create_default((const void**)&font->gdi_font_driver,
&font->gdi_font_data, font_path, font_size))
{
+1 -1
View File
@@ -34,7 +34,7 @@ static const font_renderer_driver_t *font_backends[] = {
&coretext_font_renderer,
#endif
#ifdef HAVE_STB_FONT
#if defined(VITA) || defined(WIIU) || defined(ANDROID) || defined(_WIN32) && !defined(_XBOX)
#if defined(VITA) || defined(WIIU) || defined(ANDROID) || defined(_WIN32) && !defined(_XBOX) && !defined(_MSC_VER) || defined(_WIN32) && !defined(_XBOX) && defined(_MSC_VER) && _MSC_VER > 1400
&stb_unicode_font_renderer,
#else
&stb_font_renderer,
+8
View File
@@ -35,6 +35,8 @@
#include "../config.h"
#endif
#include "../dynamic.h"
#ifdef HAVE_THREADS
#include <rthreads/rthreads.h>
#endif
@@ -2463,6 +2465,8 @@ void video_driver_build_info(video_frame_info_t *video_info)
bool is_slowmotion = false;
settings_t *settings = NULL;
video_viewport_t *custom_vp = NULL;
struct retro_hw_render_callback *hwr =
video_driver_get_hw_context();
#ifdef HAVE_THREADS
bool is_threaded = video_driver_is_threaded();
video_driver_threaded_lock(is_threaded);
@@ -2483,6 +2487,10 @@ void video_driver_build_info(video_frame_info_t *video_info)
video_info->fullscreen = settings->bools.video_fullscreen;
video_info->monitor_index = settings->uints.video_monitor_index;
video_info->shared_context = settings->bools.video_shared_context;
if (libretro_get_shared_context() && hwr && hwr->context_type != RETRO_HW_CONTEXT_NONE)
video_info->shared_context = true;
video_info->font_enable = settings->bools.video_font_enable;
video_info->font_msg_pos_x = settings->floats.video_msg_pos_x;
video_info->font_msg_pos_y = settings->floats.video_msg_pos_y;
+4
View File
@@ -14,6 +14,8 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
#define HAVE_IBXM 1
#if defined(HAVE_CG) || defined(HAVE_HLSL) || defined(HAVE_GLSL)
#define HAVE_SHADERS
#endif
@@ -350,6 +352,8 @@ VIDEO DRIVER
#include "../gfx/drivers/gdi_gfx.c"
#endif
#include "../deps/ibxm/ibxm.c"
/*============================================================
FONTS
============================================================ */
+26
View File
@@ -1072,6 +1072,32 @@ static void handle_hotplug(android_input_t *android,
}
}
/* Amazon Fire TV & Fire stick */
else if(strstr(device_model, "AFTB") || strstr(device_model, "AFTT") ||
strstr(device_model, "AFTS") || strstr(device_model, "AFTM") ||
strstr(device_model, "AFTRS"))
{
RARCH_LOG("Special Device Detected: %s\n", device_model);
{
/* always map remote to port #0 */
if (strstr(device_name, "Amazon Fire TV Remote"))
{
android->pads_connected = 0;
*port = 0;
strlcpy(name_buf, device_name, sizeof(name_buf));
}
/* remove the remote when a gamepad enters */
else if(strstr(android->pad_states[0].name,"Amazon Fire TV Remote"))
{
android->pads_connected = 0;
*port = 0;
strlcpy(name_buf, device_name, sizeof(name_buf));
}
else
strlcpy(name_buf, device_name, sizeof(name_buf));
}
}
/* Other uncommon devices
* These are mostly remote control type devices, bind them always to port 0
* And overwrite the binding whenever a controller button is pressed
+18
View File
@@ -132,6 +132,22 @@ static bool winraw_set_keyboard_input(HWND window)
return true;
}
static void winraw_log_mice_info(winraw_mouse_t *mice, unsigned mouse_cnt)
{
char name[256];
UINT name_size = sizeof(name);
UINT r;
unsigned i;
for (i = 0; i < mouse_cnt; ++i)
{
r = GetRawInputDeviceInfoA(mice[i].hnd, RIDI_DEVICENAME, name, &name_size);
if (r == (UINT)-1 || r == 0)
name[0] = '\0';
RARCH_LOG("[WINRAW]: Mouse #%u %s.\n", i, name);
}
}
static bool winraw_init_devices(winraw_mouse_t **mice, unsigned *mouse_cnt)
{
UINT r, i;
@@ -191,6 +207,8 @@ static bool winraw_init_devices(winraw_mouse_t **mice, unsigned *mouse_cnt)
mice_r[mouse_cnt_r++].hnd = devs[i].hDevice;
}
winraw_log_mice_info(mice_r, mouse_cnt_r);
*mice = mice_r;
*mouse_cnt = mouse_cnt_r;
+1
View File
@@ -324,6 +324,7 @@ static void gx_joypad_poll(void)
if (g_quit)
{
rarch_ctl(RARCH_CTL_SET_SHUTDOWN, NULL);
g_quit = false;
return;
}
+38
View File
@@ -1,5 +1,6 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2011-2017 - Daniel De Matteis
* Copyright (C) 2015-2017 - Andrés Suárez
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
@@ -23,6 +24,9 @@
#include "../configuration.h"
#include "../retroarch.h"
static unsigned old_analog_dpad_mode[MAX_USERS];
static unsigned old_libretro_device[MAX_USERS];
/**
* input_remapping_load_file:
* @data : Path to config file.
@@ -54,6 +58,9 @@ bool input_remapping_load_file(void *data, const char *path)
"a", "x", "l", "r", "l2", "r2",
"l3", "r3", "l_x", "l_y", "r_x", "r_y" };
old_analog_dpad_mode[i] = settings->uints.input_analog_dpad_mode[i];
old_libretro_device[i] = settings->uints.input_libretro_device[i];
snprintf(buf, sizeof(buf), "input_player%u", i + 1);
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++)
@@ -82,6 +89,12 @@ bool input_remapping_load_file(void *data, const char *path)
settings->uints.input_remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] =
key_remap;
}
snprintf(buf, sizeof(buf), "input_player%u_analog_dpad_mode", i + 1);
CONFIG_GET_INT_BASE(conf, settings, uints.input_analog_dpad_mode[i], buf);
snprintf(buf, sizeof(buf), "input_libretro_device_p%u", i + 1);
CONFIG_GET_INT_BASE(conf, settings, uints.input_libretro_device[i], buf);
}
config_file_free(conf);
@@ -158,6 +171,10 @@ bool input_remapping_save_file(const char *path)
config_unset(conf,key_ident[j]);
}
}
snprintf(buf, sizeof(buf), "input_libretro_device_p%u", i + 1);
config_set_int(conf, buf, input_config_get_device(i));
snprintf(buf, sizeof(buf), "input_player%u_analog_dpad_mode", i + 1);
config_set_int(conf, buf, settings->uints.input_analog_dpad_mode[i]);
}
ret = config_file_write(conf, remap_file);
@@ -166,6 +183,22 @@ bool input_remapping_save_file(const char *path)
return ret;
}
bool input_remapping_remove_file(const char *path)
{
char buf[PATH_MAX_LENGTH];
char remap_file[PATH_MAX_LENGTH];
settings_t *settings = config_get_ptr();
buf[0] = remap_file[0] = '\0';
fill_pathname_join(buf, settings->paths.directory_input_remapping,
path, sizeof(buf));
fill_pathname_noext(remap_file, buf, ".rmp", sizeof(remap_file));
return remove(remap_file) == 0 ? true : false;
}
void input_remapping_set_defaults(void)
{
unsigned i, j;
@@ -180,5 +213,10 @@ void input_remapping_set_defaults(void)
}
for (j = 0; j < 4; j++)
settings->uints.input_remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] = j;
if (old_analog_dpad_mode[i])
settings->uints.input_analog_dpad_mode[i] = old_analog_dpad_mode[i];
if (old_libretro_device[i])
settings->uints.input_libretro_device[i] = old_libretro_device[i];
}
}
+2
View File
@@ -44,6 +44,8 @@ bool input_remapping_load_file(void *data, const char *path);
**/
bool input_remapping_save_file(const char *path);
bool input_remapping_remove_file(const char *path);
void input_remapping_set_defaults(void);
RETRO_END_DECLS
+54 -54
View File
@@ -127,7 +127,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case RARCH_OVERLAY_NEXT:
snprintf(s, len,
"切換到下一個屏幕覆層。將會循環選擇。");
"切換到下一個營幕覆層。將會循環選擇。");
break;
case RARCH_DISK_EJECT_TOGGLE:
snprintf(s, len,
@@ -210,21 +210,21 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
switch (msg)
{
case MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS:
snprintf(s, len, "你的登陸信息 \n"
"Retro Achievements 賬號. \n"
snprintf(s, len, "你的登入訊息 \n"
"Retro Achievements 帳號. \n"
" \n"
"訪問 retroachievements.org 並註冊 \n"
"以獲取一個免費賬號. \n"
"以獲取一個免費帳號. \n"
" \n"
"在你註冊以後, 你需要 \n"
"在RetroArch輸入你的 \n"
"賬號以及密碼.");
"帳號以及密碼.");
break;
case MENU_ENUM_LABEL_CHEEVOS_USERNAME:
snprintf(s, len, "你的Retro Achievements賬號的用戶名。");
snprintf(s, len, "你的Retro Achievements帳號的用戶名。");
break;
case MENU_ENUM_LABEL_CHEEVOS_PASSWORD:
snprintf(s, len, "你的Retro Achievements賬號的密碼。");
snprintf(s, len, "你的Retro Achievements帳號的密碼。");
break;
case MENU_ENUM_LABEL_USER_LANGUAGE:
snprintf(s, len, "依據選擇的語言來本地化菜單和其他屏顯消息。 \n"
@@ -242,7 +242,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
snprintf(s, len, "自動加載遊戲內容指定的核心選項.");
break;
case MENU_ENUM_LABEL_AUTO_OVERRIDES_ENABLE:
snprintf(s, len, "自動加載覆蓋配置。");
snprintf(s, len, "自動加載覆蓋設定。");
break;
case MENU_ENUM_LABEL_AUTO_REMAPS_ENABLE:
snprintf(s, len, "自動加載輸入重映射文件.");
@@ -280,26 +280,26 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
"截圖目錄之中.");
break;
case MENU_ENUM_LABEL_RUN:
snprintf(s, len, "啟動內容.");
snprintf(s, len, "啟動遊戲.");
break;
case MENU_ENUM_LABEL_INFORMATION:
snprintf(s, len, "顯示本內容的額外 \n"
"元數據信息.");
snprintf(s, len, "顯示本遊戲的額外 \n"
"元數據訊息.");
break;
case MENU_ENUM_LABEL_FILE_BROWSER_CONFIG:
snprintf(s, len, "配置文件.");
snprintf(s, len, "設定文件.");
break;
case MENU_ENUM_LABEL_FILE_BROWSER_COMPRESSED_ARCHIVE:
snprintf(s, len, "壓縮歸檔文件.");
break;
case MENU_ENUM_LABEL_FILE_BROWSER_RECORD_CONFIG:
snprintf(s, len, "記錄配置文件.");
snprintf(s, len, "錄製設定文件.");
break;
case MENU_ENUM_LABEL_FILE_BROWSER_CURSOR:
snprintf(s, len, "數據庫指針文件。");
break;
case MENU_ENUM_LABEL_FILE_CONFIG:
snprintf(s, len, "配置文件.");
snprintf(s, len, "設定文件.");
break;
case MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY:
snprintf(s, len,
@@ -319,15 +319,15 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY:
snprintf(s, len,
"縮略圖目錄. \n"
"縮圖目錄. \n"
" \n"
"用以存放縮略圖.");
break;
case MENU_ENUM_LABEL_LIBRETRO_INFO_PATH:
snprintf(s, len,
"核心Core信息目錄. \n"
"核心Core訊息目錄. \n"
" \n"
"用於搜索libretro核心信息 \n"
"用於搜索libretro核心訊息 \n"
"的目錄。");
break;
case MENU_ENUM_LABEL_PLAYLIST_DIRECTORY:
@@ -400,9 +400,9 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_FILE_BROWSER_MOVIE_OPEN:
snprintf(s, len,
"視頻 \n"
"視訊 \n"
" \n"
"選擇文件並使用視頻播放器打開。");
"選擇文件並使用視訊播放器打開。");
break;
case MENU_ENUM_LABEL_FILE_BROWSER_MUSIC_OPEN:
snprintf(s, len,
@@ -476,8 +476,8 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE:
snprintf(s, len,
"顯示器的視頻刷新率。 \n"
"可被用來計算一個合適的音頻輸入率。");
"顯示器的視訊刷新率。 \n"
"可被用來計算一個合適的聲音輸入率。");
break;
case MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE:
snprintf(s, len,
@@ -488,11 +488,11 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_AUDIO_ENABLE:
snprintf(s, len,
"啟用音頻輸出。");
"啟用聲音輸出。");
break;
case MENU_ENUM_LABEL_AUDIO_SYNC:
snprintf(s, len,
"同步音頻(推薦)。");
"同步聲音(推薦)。");
break;
case MENU_ENUM_LABEL_AUDIO_LATENCY:
snprintf(s, len,
@@ -514,8 +514,8 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE:
snprintf(s, len,
"Number of entries that will be kept in \n"
"content history playlist.");
"可存放在歷史遊戲清單的數量 \n"
".");
break;
case MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN:
snprintf(s, len,
@@ -524,7 +524,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_VIDEO_FONT_SIZE:
snprintf(s, len,
"屏顯信息的字體大小.");
"屏顯訊息的字體大小.");
break;
case MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX:
snprintf(s, len,
@@ -540,7 +540,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_VIDEO_FONT_ENABLE:
snprintf(s, len,
"顯示/隱藏屏顯信息.");
"顯示/隱藏屏顯訊息.");
break;
case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X:
case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y:
@@ -550,7 +550,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE:
snprintf(s, len,
"Enable or disable the current overlay.");
"啟用或取消目前的 overlay.");
break;
case MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU:
snprintf(s, len,
@@ -577,7 +577,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE:
snprintf(s, len,
"音頻輸出採樣率.");
"聲音輸出採樣率.");
break;
case MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT:
snprintf(s, len,
@@ -752,12 +752,12 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_VIDEO_DRIVER:
snprintf(s, len,
"當前視頻驅動.");
"當前視訊驅動.");
if (string_is_equal_fast(settings->arrays.video_driver, "gl", 2))
{
snprintf(s, len,
"OpenGL視頻驅動. \n"
"OpenGL視訊驅動. \n"
" \n"
"This driver allows libretro GL cores to \n"
"be used in addition to software-rendered \n"
@@ -771,7 +771,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
else if (string_is_equal_fast(settings->arrays.video_driver, "sdl2", 4))
{
snprintf(s, len,
"SDL 2 視頻驅動.\n"
"SDL 2 視訊驅動.\n"
" \n"
"This is an SDL 2 software-rendered video \n"
"driver.\n"
@@ -783,7 +783,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
else if (string_is_equal_fast(settings->arrays.video_driver, "sdl1", 4))
{
snprintf(s, len,
"SDL 視頻驅動.\n"
"SDL 視訊驅動.\n"
" \n"
"This is an SDL 1.2 software-rendered video \n"
"driver.\n"
@@ -794,7 +794,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
else if (string_is_equal_fast(settings->arrays.video_driver, "d3d", 3))
{
snprintf(s, len,
"Direct3D 視頻驅動. \n"
"Direct3D 視訊驅動. \n"
" \n"
"Performance for software-rendered cores \n"
"is dependent on your graphic card's \n"
@@ -803,7 +803,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
else if (string_is_equal_fast(settings->arrays.video_driver, "exynos", 6))
{
snprintf(s, len,
"Exynos-G2D 視頻驅動. \n"
"Exynos-G2D 視訊驅動. \n"
" \n"
"This is a low-level Exynos video driver. \n"
"Uses the G2D block in Samsung Exynos SoC \n"
@@ -815,7 +815,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
else if (string_is_equal_fast(settings->arrays.video_driver, "drm", 3))
{
snprintf(s, len,
"Plain DRM 視頻驅動. \n"
"Plain DRM 視訊驅動. \n"
" \n"
"This is a low-level video driver using. \n"
"libdrm for hardware scaling using \n"
@@ -824,7 +824,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
else if (string_is_equal_fast(settings->arrays.video_driver, "sunxi", 5))
{
snprintf(s, len,
"Sunxi-G2D 視頻驅動. \n"
"Sunxi-G2D 視訊驅動. \n"
" \n"
"This is a low-level Sunxi video driver. \n"
"Uses the G2D block in Allwinner SoCs.");
@@ -832,7 +832,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN:
snprintf(s, len,
"音頻DSP插件.\n"
"聲音DSP插件.\n"
" Processes audio before it's sent to \n"
"the driver."
);
@@ -1311,7 +1311,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_VIDEO_VSYNC:
snprintf(s, len,
"視頻垂直同步.\n");
"視訊垂直同步.\n");
break;
case MENU_ENUM_LABEL_VIDEO_HARD_SYNC:
snprintf(s, len,
@@ -1332,7 +1332,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_SCREENSHOT:
snprintf(s, len,
"Take screenshot.");
"營幕快照.");
break;
case MENU_ENUM_LABEL_VIDEO_FRAME_DELAY:
snprintf(s, len,
@@ -1379,7 +1379,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
"'Save Configuration on Exit' is enabled.\n");
break;
case MENU_ENUM_LABEL_VIDEO_FULLSCREEN:
snprintf(s, len, "Toggles fullscreen.");
snprintf(s, len, "啟用全營幕.");
break;
case MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE:
snprintf(s, len,
@@ -1483,7 +1483,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
);
break;
case MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE:
snprintf(s, len, "Enable touch support.");
snprintf(s, len, "啟用觸控支援.");
break;
case MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH:
snprintf(s, len, "Use front instead of back touch.");
@@ -1563,27 +1563,27 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_TIMEDATE_ENABLE:
snprintf(s, len,
"Shows current date and/or time inside menu.");
"在選單內顯示當前日期或時間.");
break;
case MENU_ENUM_LABEL_CORE_ENABLE:
snprintf(s, len,
"Shows current core inside menu.");
"在選單內顯示當前使用遊戲核心.");
break;
case MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST:
snprintf(s, len,
"Enables Netplay in host (server) mode.");
"啟用連線遊戲模式 (主機端) .");
break;
case MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT:
snprintf(s, len,
"Enables Netplay in client mode.");
"啟用連線遊戲模式 (連線端) .");
break;
case MENU_ENUM_LABEL_NETPLAY_DISCONNECT:
snprintf(s, len,
"Disconnects an active Netplay connection.");
"中斷使用中的連線遊戲模式.");
break;
case MENU_ENUM_LABEL_NETPLAY_SETTINGS:
snprintf(s, len,
"Setting related to Netplay.");
"連線遊戲模式相關設定.");
break;
case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS:
snprintf(s, len,
@@ -1713,11 +1713,11 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_OSK_ENABLE:
snprintf(s, len,
"Enable/disable on-screen keyboard.");
"開啟或取消營幕的虛擬鍵盤.");
break;
case MENU_ENUM_LABEL_AUDIO_MUTE:
snprintf(s, len,
"Mute/unmute audio.");
"開啟或關閉靜音.");
break;
case MENU_ENUM_LABEL_REWIND:
snprintf(s, len,
@@ -1739,15 +1739,15 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_LOAD_STATE:
snprintf(s, len,
"Loads state.");
"載入即時存檔.");
break;
case MENU_ENUM_LABEL_SAVE_STATE:
snprintf(s, len,
"Saves state.");
"儲存即時存檔.");
break;
case MENU_ENUM_LABEL_NETPLAY_FLIP_PLAYERS:
snprintf(s, len,
"Netplay flip users.");
"踢掉連線遊戲的使用者.");
break;
case MENU_ENUM_LABEL_CHEAT_INDEX_PLUS:
snprintf(s, len,
@@ -1767,7 +1767,7 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
break;
case MENU_ENUM_LABEL_RESET:
snprintf(s, len,
"Reset the content.\n");
"重設遊戲.\n");
break;
case MENU_ENUM_LABEL_PAUSE_TOGGLE:
snprintf(s, len,
+337 -337
View File
File diff suppressed because it is too large. Load diff
+2
View File
@@ -860,6 +860,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS,
"Menu File Browser")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER,
"Menu Linear Filter")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_HORIZONTAL_ANIMATION,
"Horizontal Animation")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS,
"Menu")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER,
+73 -35
View File
@@ -159,7 +159,7 @@ MSG_HASH(
"Password"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS,
"Obiettivi dell'account")
"Accounts Cheevos")
MSG_HASH(MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME,
"Nome utente")
MSG_HASH(
@@ -181,7 +181,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST,
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST,
"Carica Configurazione")
MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TAB,
"Aggiungi scheda")
"Scansione/Aggiungi directory")
MSG_HASH(
MENU_ENUM_LABEL_VALUE_NETPLAY_TAB,
"Stanze Netplay "
@@ -462,7 +462,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST,
"Scarica sulle directories")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE,
"Download Core...")
"Scarica Core...")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT,
"Scarica contenuto")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE,
@@ -523,13 +523,13 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE,
"Abilita cronologia")
MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB,
"Cronologia scheda")
"Cronologia")
MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU,
"Menú orizzontale")
MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB,
"Image")
"Immagini")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION,
"Information")
"Informazioni")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST,
"Informazioni")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ADC_TYPE,
@@ -1119,9 +1119,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY,
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX,
"Cataloga automaticamente gli stati di salvataggio")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD,
"Carica automaticamente gli stati di salvataggio")
"Carica automaticamente i salvataggi")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE,
"Salva stato automaticamente")
"Salva stato automatico")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY,
"Directory degli stati di salvataggio")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_THUMBNAIL_ENABLE,
@@ -1139,11 +1139,11 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_STATE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS,
"Salvataggi")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY,
"Scansiona directory")
"Scansione delle directory")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE,
"Scansione dei file")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY,
"<Scansiona questa directory>")
"<Effettua la scansione di questa directory>")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY,
"Directory delle screenshot")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION,
@@ -1155,7 +1155,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS,
MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS,
"Settaggi")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS_TAB,
"Settaggi scheda")
"Impostazioni")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER,
"Shader")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES,
@@ -1663,9 +1663,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY,
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS,
"Cerca e connetti all' host netplay sulla rete locale.")
MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST,
"Visualizzare le informazioni dei core, di rete e di sistema.")
"Visualizza le informazioni dei core, di rete e di sistema.")
MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER,
"Scarica i componenti aggiuntivi, i componenti e il contenuto di RetroArch.")
"Scarica i componenti aggiuntivi e il contenuto di RetroArch.")
MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE,
"Attiva o disattiva la condivisione di rete delle cartelle.")
MSG_HASH(MENU_ENUM_SUBLABEL_SERVICES_SETTINGS,
@@ -1689,7 +1689,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES,
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES,
"Indica al driver video di utilizzare esplicitamente una modalità di buffering specifica.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX,
"Seleziona quale schermo da utilizzare.")
"Seleziona lo schermo da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO,
"La stima precisa di aggiornamento dello schermo in Hz.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SETTINGS,
@@ -1741,7 +1741,7 @@ MSG_HASH(MSG_CONTENT_CRC32S_DIFFER,
MSG_HASH(MSG_CONTENT_LOADING_SKIPPED_IMPLEMENTATION_WILL_DO_IT,
"Content loading skipped. Implementation will load it on its own.")
MSG_HASH(MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES,
"Core does not support save states.")
"Il Core non supporta gli salva stati.")
MSG_HASH(MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY,
"Il file delle opzioni dei core è stato creato correttamente.")
MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER,
@@ -1771,7 +1771,7 @@ MSG_HASH(MSG_DETECTED_VIEWPORT_OF,
MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH,
"Did not find a valid content patch.")
MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT,
"Disconnect device from a valid port.")
"Scollegare il dispositivo da una porta valida.")
MSG_HASH(MSG_DISK_CLOSED,
"Chiuso")
MSG_HASH(MSG_DISK_EJECTED,
@@ -1861,13 +1861,13 @@ MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_HOST,
MSG_HASH(MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT,
"Failed to send SRAM data to client.")
MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER,
"Failed to start audio driver. Will continue without audio.")
"Impossibile avviare il driver audio. Continuerà senza audio.")
MSG_HASH(MSG_FAILED_TO_START_MOVIE_RECORD,
"Failed to start movie record.")
"Impossibile avviare una registrazione di un filmato.")
MSG_HASH(MSG_FAILED_TO_START_RECORDING,
"Failed to start recording.")
"Impossibile avviare la registrazione.")
MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT,
"Failed to take screenshot.")
"Impossibile eseguire lo screenshot.")
MSG_HASH(MSG_FAILED_TO_UNDO_LOAD_STATE,
"Failed to undo load state.")
MSG_HASH(MSG_FAILED_TO_UNDO_SAVE_STATE,
@@ -1875,7 +1875,7 @@ MSG_HASH(MSG_FAILED_TO_UNDO_SAVE_STATE,
MSG_HASH(MSG_FAILED_TO_UNMUTE_AUDIO,
"Failed to unmute audio.")
MSG_HASH(MSG_FATAL_ERROR_RECEIVED_IN,
"Fatal error received in")
"Errore irreversibile ricevuto su")
MSG_HASH(MSG_FILE_NOT_FOUND,
"File non trovato")
MSG_HASH(MSG_FOUND_AUTO_SAVESTATE_IN,
@@ -1915,7 +1915,7 @@ MSG_HASH(MSG_INTERFACE,
MSG_HASH(MSG_INTERNAL_STORAGE,
"Memoria interna")
MSG_HASH(MSG_REMOVABLE_STORAGE,
"Removable Storage")
"Dispositivi di memoria rimovibili")
MSG_HASH(MSG_INVALID_NICKNAME_SIZE,
"Dimensione del nickname non valido.")
MSG_HASH(MSG_IN_BYTES,
@@ -1935,7 +1935,7 @@ MSG_HASH(MSG_LOADED_STATE_FROM_SLOT_AUTO,
MSG_HASH(MSG_LOADING,
"Caricamento")
MSG_HASH(MSG_FIRMWARE,
"One or more firmware files are missing")
"Uno o più file del firmware sono mancanti")
MSG_HASH(MSG_LOADING_CONTENT_FILE,
"Loading content file")
MSG_HASH(MSG_LOADING_HISTORY_FILE,
@@ -2017,7 +2017,7 @@ MSG_HASH(MSG_SAVED_STATE_TO_SLOT,
MSG_HASH(MSG_SAVED_STATE_TO_SLOT_AUTO,
"Saved state to slot #-1 (auto).")
MSG_HASH(MSG_SAVED_SUCCESSFULLY_TO,
"Saved successfully to")
"Salvato con successo su")
MSG_HASH(MSG_SAVING_RAM_TYPE,
"Saving RAM type")
MSG_HASH(MSG_SAVING_STATE,
@@ -2051,7 +2051,7 @@ MSG_HASH(MSG_STATE_SIZE,
MSG_HASH(MSG_STATE_SLOT,
"State slot")
MSG_HASH(MSG_TAKING_SCREENSHOT,
"Taking screenshot.")
"Cattura screenshot.")
MSG_HASH(MSG_TO,
"to")
MSG_HASH(MSG_UNDID_LOAD_STATE,
@@ -2065,7 +2065,7 @@ MSG_HASH(MSG_UNPAUSED,
MSG_HASH(MSG_UNRECOGNIZED_COMMAND,
"Unrecognized command")
MSG_HASH(MSG_USING_CORE_NAME_FOR_NEW_CONFIG,
"Using core name for new config.")
"Utilizzo del core di base per la nuova configurazione.")
MSG_HASH(MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED,
"Using libretro dummy core. Skipping recording.")
MSG_HASH(MSG_VALUE_CONNECT_DEVICE_FROM_A_VALID_PORT,
@@ -2184,11 +2184,11 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER,
"Database - Filter : Developer"
"Database - Filtro : Developer"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER,
"Database - Filter : Publisher"
"Database - Filtro : Publisher"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISABLED,
"Disattivato")
@@ -2295,19 +2295,57 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_VOLUME,
"Audio Mixer Volume Level (dB)"
"Audio Mixer Livello del Volume (dB)"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_MUTE,
"Audio Mixer Mute"
"Audio Mixer Muto"
)
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MIXER_MUTE,
"Mute/unmute mixer audio.")
"Muto/disattiva muto sul mixer audio.")
MSG_HASH(MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER,
"Show Online Updater")
"Visualizza Online Updater")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_ONLINE_UPDATER,
"Show/hide the 'Online Updater' option.")
"Visualizza/Nascondi l'opzione 'Online Updater'.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SHOW_CORE_UPDATER,
"Show Core Updater")
"Visualizza Core Updater")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_CORE_UPDATER,
"Show/hide the ability to update cores (and core info files).")
"Visualizza/Nascondi l'abilità di aggiornare i core (e i file di informazione dei core).")
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_LIST,
"Seleziona quale core utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_LOAD_CONTENT_LIST,
"Seleziona quale contenuto avviare.")
MSG_HASH(MENU_ENUM_SUBLABEL_QUIT_RETROARCH,
"Permette di uscire dal programma.")
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_DRIVER,
"Driver di input da utilizzare. A seconda del driver video, potrebbe forzare un diverso driver di input.")
MSG_HASH(MENU_ENUM_SUBLABEL_JOYPAD_DRIVER,
"I driver del Joypad da utilizzare")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DRIVER,
"I driver video da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_DRIVER,
"I driver audio da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_RESAMPLER_DRIVER,
"I driver di riprogrammazione audio da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_CAMERA_DRIVER,
"I driver della fotocamera da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_LOCATION_DRIVER,
"Posizione dei driver da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_DRIVER,
"I driver del menu da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_RECORD_DRIVER,
"I driver per la registrazione da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_DRIVER,
"I driver WiFi da utilizzare.")
MSG_HASH(MENU_ENUM_SUBLABEL_SCAN_DIRECTORY,
"Effettua la scansione di una directory per i file compatibili e li aggiunge alla raccolta.")
MSG_HASH(MENU_ENUM_SUBLABEL_SCAN_FILE,
"Esegue la scansione di un file compatibile e li aggiunge alla raccolta.")
MSG_HASH(MENU_ENUM_SUBLABEL_NETWORK_INFORMATION,
"Mostra le interfacce di rete e gli indirizzi IP associati.")
MSG_HASH(MENU_ENUM_SUBLABEL_SYSTEM_INFORMATION,
"Mostra le informazioni specifiche del dispositivo.")
MSG_HASH(MENU_ENUM_SUBLABEL_DATABASE_MANAGER,
"Visualizza i database.")
MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_MANAGER,
"Visualizza le ricerche precedenti")
+16
View File
@@ -581,6 +581,8 @@ MSG_HASH(MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS,
"menu_file_browser_settings")
MSG_HASH(MENU_ENUM_LABEL_MENU_LINEAR_FILTER,
"menu_linear_filter")
MSG_HASH(MENU_ENUM_LABEL_MENU_HORIZONTAL_ANIMATION,
"menu_horizontal_animation")
MSG_HASH(MENU_ENUM_LABEL_MENU_SETTINGS,
"menu_settings")
MSG_HASH(MENU_ENUM_LABEL_MENU_WALLPAPER,
@@ -821,6 +823,10 @@ MSG_HASH(MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE,
"remap_file_save_core")
MSG_HASH(MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME,
"remap_file_save_game")
MSG_HASH(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE,
"remap_file_remove_core")
MSG_HASH(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME,
"remap_file_remove_game")
MSG_HASH(MENU_ENUM_LABEL_RESTART_CONTENT,
"restart_content")
MSG_HASH(MENU_ENUM_LABEL_RESTART_RETROARCH,
@@ -909,6 +915,14 @@ MSG_HASH(MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE,
"sort_savefiles_enable")
MSG_HASH(MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE,
"sort_savestates_enable")
MSG_HASH(MENU_ENUM_LABEL_SAVEFILES_IN_CONTENT_DIR_ENABLE,
"savefiles_in_content_dir_enable")
MSG_HASH(MENU_ENUM_LABEL_SAVESTATES_IN_CONTENT_DIR_ENABLE,
"savestates_in_content_dir_enable")
MSG_HASH(MENU_ENUM_LABEL_SYSTEMFILES_IN_CONTENT_DIR_ENABLE,
"systemfiles_in_content_dir_enable")
MSG_HASH(MENU_ENUM_LABEL_SCREENSHOTS_IN_CONTENT_DIR_ENABLE,
"screenshots_in_content_dir_enable")
MSG_HASH(MENU_ENUM_LABEL_SSH_ENABLE,
"ssh_enable")
MSG_HASH(MENU_ENUM_LABEL_START_CORE,
@@ -1249,3 +1263,5 @@ MSG_HASH(MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER,
"menu_show_online_updater")
MSG_HASH(MENU_ENUM_LABEL_MENU_SHOW_CORE_UPDATER,
"menu_show_core_updater")
MSG_HASH(MENU_ENUM_LABEL_CORE_DELETE,
"core_delete")
+54 -54
View File
@@ -4,15 +4,15 @@ MSG_HASH(
)
MSG_HASH(
MSG_UNKNOWN_COMPILER,
"Unknown compiler"
"Onbekende compiler"
)
MSG_HASH(
MSG_DEVICE_DISCONNECTED_FROM_PORT,
"Device disconnected from port"
"Apparaat ontkoppeld van poprt"
)
MSG_HASH(
MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED,
"Unknown netplay command received"
"Onbekend netplay commando ontvangen"
)
MSG_HASH(
MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER,
@@ -56,15 +56,15 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_THREADED,
"Improves performance at the cost of latency and more video stuttering. Use only if you cannot obtain full speed otherwise."
"Verbetert prestaties ten kosten van latentie en meer video stotteringen. Gebruik dit enkel als het niet mogelijk is om full speed te bereiken zonder dit te activeren."
)
MSG_HASH(
MSG_AUDIO_VOLUME,
"Audio volume"
"Geluidsvolume"
)
MSG_HASH(
MSG_AUTODETECT,
"Autodetect"
"Autodetecteren"
)
MSG_HASH(
MSG_AUTOLOADING_SAVESTATE_FROM,
@@ -76,11 +76,11 @@ MSG_HASH(
)
MSG_HASH(
MSG_CONNECTING_TO_NETPLAY_HOST,
"Connecting to netplay host"
"Verbinden met netplay host"
)
MSG_HASH(
MSG_CONNECTING_TO_PORT,
"Connecting to port"
"Verbinding maken met port"
)
MSG_HASH(
MSG_CONNECTION_SLOT,
@@ -116,12 +116,12 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST,
"Achievement List"
"Achievements Lijst"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE,
"Achievement List (Hardcore)"
"Achievements Lijst (Hardcore)"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST,
@@ -261,11 +261,11 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS,
"Basic menu controls"
"Basis menu besturing"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_CONFIRM,
"Confirm/OK"
"Bevestigen/OK"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_INFO,
@@ -273,11 +273,11 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_QUIT,
"Quit"
"Afsluiten"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_SCROLL_UP,
"Scroll Up"
"Omhoog scrollen"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_START,
@@ -297,7 +297,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE,
"Bluetooth Enable"
"Bluetooth Activeren"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL,
@@ -329,11 +329,11 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEAT_FILE,
"Cheat File"
"Cheat Bestand"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD,
"Load Cheat File"
"Laad Cheat Bestand"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS,
@@ -365,7 +365,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL,
"Test Unofficial Achievements"
"Test Onofficiele Achievements"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS,
@@ -519,7 +519,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER,
MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY,
"Dynamische Wallpapers")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE,
"Achievements Aciveren")
"Achievements Activeren")
MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR,
"Menu entry hover kleur")
MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR,
@@ -627,37 +627,37 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE,
"Keyboard Gamepad Mapping Enable")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A,
"A button (right)")
"A knop (right)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B,
"B button (down)")
"B knop (down)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_DOWN,
"Down D-pad")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L2,
"L2 button (trigger)")
"L2 knop (trigger)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L3,
"L3 button (thumb)")
"L3 knop (thumb)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L,
"L button (shoulder)")
"L knop (shoulder)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_LEFT,
"Left D-pad")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R2,
"R2 button (trigger)")
"R2 knop (trigger)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R3,
"R3 button (thumb)")
"R3 knop (thumb)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R,
"R button (shoulder)")
"R knop (shoulder)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_RIGHT,
"Right D-pad")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_SELECT,
"Select button")
"Select knop")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_START,
"Start button")
"Start knop")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_UP,
"Up D-pad")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X,
"X button (top)")
"X knop (top)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y,
"Y button (left)")
"Y knop (left)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEY,
"(Key: %s)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE,
@@ -1667,7 +1667,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_FPS_SHOW,
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS,
"Configure hotkey settings.")
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO,
"Gamepad button combination to toggle menu.")
"Gamepad knoppencombination to toggle menu.")
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_SETTINGS,
"Adjusts settings for joypads, keyboard and mouse.")
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_USER_BINDS,
@@ -1693,7 +1693,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE,
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE,
"Sets the window size relative to the core viewport size. Alternatively you can set a window width and height below for a fixed window size")
MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE,
"Sets the language of the interface.")
"Stel de taal in van de gebruikersinterface.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION,
"Inserts a black frame inbetween frames. Useful for users of 120 Hz screens who want to play 60 Hz material with eliminated ghosting.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY,
@@ -1793,7 +1793,7 @@ MSG_HASH(MSG_DISK_EJECTED,
MSG_HASH(MSG_DOWNLOADING,
"Downloading")
MSG_HASH(MSG_DOWNLOAD_FAILED,
"Download failed")
"Download mislukt")
MSG_HASH(MSG_ERROR,
"Error")
MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT,
@@ -1805,17 +1805,17 @@ MSG_HASH(MSG_ERROR_PARSING_ARGUMENTS,
MSG_HASH(MSG_ERROR_SAVING_CORE_OPTIONS_FILE,
"Error saving core options file.")
MSG_HASH(MSG_ERROR_SAVING_REMAP_FILE,
"Error saving remap file.")
"Fout is opgetreden tijdens het opslaan van remap bestand.")
MSG_HASH(MSG_ERROR_SAVING_SHADER_PRESET,
"Error saving shader preset.")
"Fout is opgetreden tijdens het opslaan van shader preset.")
MSG_HASH(MSG_EXTERNAL_APPLICATION_DIR,
"External Application Dir")
"Externe Applicatie Dir")
MSG_HASH(MSG_EXTRACTING,
"Extracting")
"Uitpakken")
MSG_HASH(MSG_EXTRACTING_FILE,
"Extracting file")
"Uitpakken van bestand")
MSG_HASH(MSG_FAILED_SAVING_CONFIG_TO,
"Failed saving config to")
"Fout is opgetrijdens tijdens het opslaan van configuratie naar ")
MSG_HASH(MSG_FAILED_TO,
"Failed to")
MSG_HASH(MSG_FAILED_TO_ACCEPT_INCOMING_SPECTATOR,
@@ -1937,11 +1937,11 @@ MSG_HASH(MSG_IN_MEGABYTES,
MSG_HASH(MSG_LIBRETRO_ABI_BREAK,
"is compiled against a different version of libretro than this libretro implementation.")
MSG_HASH(MSG_LIBRETRO_FRONTEND,
"Frontend for libretro")
"Frontend voor libretro")
MSG_HASH(MSG_LOADED_STATE_FROM_SLOT,
"Loaded state from slot #%d.")
"State geladen van slot #%d.")
MSG_HASH(MSG_LOADED_STATE_FROM_SLOT_AUTO,
"Loaded state from slot #-1 (auto).")
"State geladen van slot #-1 (auto).")
MSG_HASH(MSG_LOADING,
"Laden")
MSG_HASH(MSG_FIRMWARE,
@@ -1953,7 +1953,7 @@ MSG_HASH(MSG_LOADING_HISTORY_FILE,
MSG_HASH(MSG_LOADING_STATE,
"Loading state")
MSG_HASH(MSG_MEMORY,
"Memory")
"Geheugen")
MSG_HASH(MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE,
"Movie file is not a valid BSV1 file.")
MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION,
@@ -1975,13 +1975,13 @@ MSG_HASH(MSG_OVERRIDES_ERROR_SAVING,
MSG_HASH(MSG_OVERRIDES_SAVED_SUCCESSFULLY,
"Overrides saved successfully.")
MSG_HASH(MSG_PAUSED,
"Paused.")
"Gepauzeerd.")
MSG_HASH(MSG_PROGRAM,
"RetroArch")
MSG_HASH(MSG_READING_FIRST_DATA_TRACK,
"Reading first data track...")
MSG_HASH(MSG_RECEIVED,
"received")
"ontvangen")
MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE,
"Recording terminated due to resize.")
MSG_HASH(MSG_RECORDING_TO,
@@ -2753,10 +2753,10 @@ MSG_HASH(
"If set to a directory, content which is temporarily extracted (e.g. from archives) will be extracted to this directory."
)
MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_DIRECTORY,
"Saved queries are stored to this directory.")
"Bewaarde queries worden in deze directory opgeslagen.")
MSG_HASH(
MENU_ENUM_SUBLABEL_CONTENT_DATABASE_DIRECTORY,
"Databases are stored to this directory."
"Databases worden in deze directory opgeslagen."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_ASSETS_DIRECTORY,
@@ -2837,22 +2837,22 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_X,
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_Y,
"Custom viewport offset used for defining the Y-axis position of the viewport. These are ignored if 'Integer Scale' is enabled. It will be automatically centered then.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_USE_MITM_SERVER,
"Use Relay Server")
"Gebruik Relay Server")
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_USE_MITM_SERVER,
"Forward netplay connections through a man-in-the-middle server. Useful if the host is behind a firewall or has NAT/UPnP problems.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TO_MIXER,
"Add to mixer")
"Aan audio mixer toevoegen")
MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TO_MIXER_AND_COLLECTION,
"Add to mixer")
"Aan audio mixer toevoegen")
MSG_HASH(MENU_ENUM_LABEL_VALUE_FILTER_BY_CURRENT_CORE,
"Filter by current core")
MSG_HASH(
MSG_AUDIO_MIXER_VOLUME,
"Global audio mixer volume"
"Globale volume voor audio mixer"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_MIXER_VOLUME,
"Global audio mixer volume (in dB). 0 dB is normal volume, and no gain is applied."
"Globale volume voor audio mixer (in dB uitgedrukt). 0 dB is het normale geluidsniveau."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_VOLUME,
@@ -2865,7 +2865,7 @@ MSG_HASH(
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MIXER_MUTE,
"Mute/unmute mixer audio.")
MSG_HASH(MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER,
"Show Online Updater")
"Online Updater Weergeven")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_ONLINE_UPDATER,
"Show/hide the 'Online Updater' option.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SHOW_CORE_UPDATER,
+248 -54
View File
@@ -31,6 +31,10 @@ MSG_HASH(
MSG_GOT_CONNECTION_FROM_NAME,
"Установленно соединение с: \"%s (%s)\""
)
MSG_HASH(
MSG_PUBLIC_ADDRESS,
"Public address"
)
MSG_HASH(
MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN,
"Нет аргументов и встроенного меню,отображается справка..."
@@ -47,6 +51,66 @@ MSG_HASH(
MSG_WAITING_FOR_CLIENT,
"Ожидание клиента ..."
)
MSG_HASH(
MSG_NETPLAY_YOU_HAVE_LEFT_THE_GAME,
"You have left the game"
)
MSG_HASH(
MSG_NETPLAY_YOU_HAVE_JOINED_AS_PLAYER_N,
"You have joined as player %d"
)
MSG_HASH(
MSG_NETPLAY_IMPLEMENTATIONS_DIFFER,
"Implementations differ. Make sure you're using the exact same versions of RetroArch and the core."
)
MSG_HASH(
MSG_NETPLAY_ENDIAN_DEPENDENT,
"This core does not support inter-architecture netplay between these systems"
)
MSG_HASH(
MSG_NETPLAY_PLATFORM_DEPENDENT,
"This core does not support inter-architecture netplay"
)
MSG_HASH(
MSG_NETPLAY_ENTER_PASSWORD,
"Enter netplay server password:"
)
MSG_HASH(
MSG_NETPLAY_INCORRECT_PASSWORD,
"Incorrect password"
)
MSG_HASH(
MSG_NETPLAY_SERVER_NAMED_HANGUP,
"\"%s\" has disconnected"
)
MSG_HASH(
MSG_NETPLAY_SERVER_HANGUP,
"A netplay client has disconnected"
)
MSG_HASH(
MSG_NETPLAY_CLIENT_HANGUP,
"Netplay disconnected"
)
MSG_HASH(
MSG_NETPLAY_CANNOT_PLAY_UNPRIVILEGED,
"You do not have permission to play"
)
MSG_HASH(
MSG_NETPLAY_CANNOT_PLAY_NO_SLOTS,
"There are no free player slots"
)
MSG_HASH(
MSG_NETPLAY_CANNOT_PLAY,
"Cannot switch to play mode"
)
MSG_HASH(
MSG_NETPLAY_PEER_PAUSED,
"Netplay peer \"%s\" paused"
)
MSG_HASH(
MSG_NETPLAY_CHANGED_NICK,
"Your nickname changed to \"%s\""
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT,
"Предоставьте аппаратно-рендерированным ядрам собственный контекст.Избегайте принятия изменений состояния оборудования между кадрами."
@@ -123,8 +187,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST,
"Список достижений"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE,
"Список достижений (Hardcore)"
@@ -141,6 +203,10 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_ADD_TAB,
"Импорт содержимого"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_NETPLAY_TAB,
"Сетевая игра"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE,
"Спрашивать"
@@ -213,6 +279,18 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME,
"Уровень громкости звука (dB)"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_WASAPI_EXCLUSIVE_MODE,
"WASAPI Exclusive Mode"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_WASAPI_FLOAT_FORMAT,
"WASAPI Float Format"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_WASAPI_SH_BUFFER_LENGTH,
"WASAPI Shared Buffer Length"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL,
"Интервал авто-сохранений"
@@ -373,6 +451,10 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL,
"Тестовые Неофициальные Достижения"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_VERBOSE_ENABLE,
"Achievements Verbose Mode"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS,
"Разблокированные достижения:"
@@ -416,6 +498,8 @@ MSG_HASH(
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE,
"Размер списка истории")
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE,
"Allow to remove entries")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS,
"Выйти из меню")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR,
@@ -427,9 +511,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS,
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS,
"Основной счётчик")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ENABLE,
"Отобразить имя основного средства")
"Показать название ядра")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION,
"Основная информация")
"Информация о ядре")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS,
"Авторы")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES,
@@ -520,6 +604,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS,
"Драйвер")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN,
"Загрузка макета при выключении ядра")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CHECK_FOR_MISSING_FIRMWARE,
"Check for Missing Firmware Before Loading")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER,
"Динамические обои")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY,
@@ -579,7 +665,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ADC_TYPE,
"Аналого-цифровой тип")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU,
"Все пользователи управляющие меню")
"Все пользователи управляют меню")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X,
"Левый аналог ось - X")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_MINUS,
@@ -609,7 +695,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD,
"Мертвая зона у стиков")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL,
"Сменить функции кнопок")
"Сменить функции кнопок OK и Отмена")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL,
"Скрепить всё")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL,
@@ -624,8 +710,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX,
"Индекс устройства")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_TYPE,
"Тип устройства")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MOUSE_INDEX,
"Mouse Index")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER,
"Ввод драйвера")
"Драйвер ввода")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE,
"Рабочий цикл")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS,
@@ -696,6 +784,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY,
"На весь экран")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE,
"Переключатель мыши")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE,
"Game focus toggle")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY,
"Состояние загрузки")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE,
@@ -706,6 +796,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE,
"Отключения звука")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP,
"Netplay отразить пользователей")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH,
"Netplay toggle play/spectate mode")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OSK,
"Переключение экранной клавиатуры")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT,
@@ -803,7 +895,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE_BRAZIL,
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE_PORTUGAL,
"Portuguese (Portugal)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN,
"Russian")
"Русский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_SPANISH,
"Spanish")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE,
@@ -890,8 +982,14 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NEAREST,
"Ближайший")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY,
"Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ALLOW_SLAVES,
"Allow Slave-Mode Clients")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES,
"Проверка фреймов Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_INPUT_LATENCY_FRAMES_MIN,
"Input Latency Frames")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_INPUT_LATENCY_FRAMES_RANGE,
"Input Latency Frames Range")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT,
"Netplay P2 использует C1")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES,
@@ -903,21 +1001,37 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT,
"Подключение к Netplay-хосту")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST,
"Старт хостинг")
"Запустить Netplay-хост")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISABLE_HOST,
"Stop netplay host")
"Остановить Netplay-хост")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS,
"Адрес сервера")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS,
"Scan local network")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE,
"Включить клиент Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME,
"Имя пользователя")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_PASSWORD,
"Server Password")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_PUBLIC_ANNOUNCE,
"Publicly Announce Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_REQUIRE_SLAVES,
"Disallow Non-Slave-Mode Clients")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS,
"Настройки Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_START_AS_SPECTATOR,
"Netplay Spectator Mode")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_STATELESS_MODE,
"Netplay Stateless Mode")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATE_PASSWORD,
"Server Spectate-Only Password")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE,
"Включить режим зрителя в Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT,
"Порт Netplay TCP / UDP")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NAT_TRAVERSAL,
"Netplay NAT Traversal")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE,
"Сетевые команды")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT,
@@ -954,6 +1068,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE,
"Нет информации.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS,
"Нет элементов.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND,
"No netplay hosts found.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND,
"No networks found.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS,
"Нет счетчиков производительности.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS,
@@ -989,11 +1107,11 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED,
MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY,
"Наложение")
MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY,
"Наложение преднастроек")
"Непрозрачность наложения")
MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET,
"Масштаб наложения")
"Преднастройка наложения")
MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE,
"Overlay Scale")
"Масштаб наложения")
MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS,
"Экранное наложение")
MSG_HASH(MENU_ENUM_LABEL_VALUE_PAL60_ENABLE,
@@ -1138,6 +1256,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG,
"Правый аналог")
MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN,
"Запустить")
MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN_MUSIC,
"Run")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE,
"Включить SAMBA")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY,
@@ -1150,6 +1270,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE,
"Автосохранение")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY,
"Сохранить состояние")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_THUMBNAIL_ENABLE,
"Savestate Thumbnails")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG,
"Сохранить текущую конфигурацию")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE,
@@ -1161,7 +1283,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG,
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_STATE,
"Сохранить состояние")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS,
"Сохранить")
"Сохранения")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY,
"Сканировать каталог")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE,
@@ -1254,6 +1376,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH,
"Отображать ширину (mm)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT,
"Поддержка DirectSound")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WASAPI_SUPPORT,
"WASAPI support")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT,
"Поддержка динамических библиотек")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT,
@@ -1282,6 +1406,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT,
"Поддержка JACK")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT,
"поддержка KMS/EGL")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LAKKA_VERSION,
"Lakka Version")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT,
"Поддержка LibretroDB")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT,
@@ -1381,7 +1507,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS,
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS,
"Экраны заголовков")
MSG_HASH(MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE,
"Показывать время / дата")
"Показать время/дату")
MSG_HASH(MENU_ENUM_LABEL_VALUE_TITLE_COLOR,
"Цвет заголовков в меню")
MSG_HASH(MENU_ENUM_LABEL_VALUE_TRUE,
@@ -1427,7 +1553,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_USER,
MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS,
"Интерфейс пользователя")
MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE,
"Language")
"Язык")
MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_SETTINGS,
"Пользователь")
MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER,
@@ -1438,6 +1564,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY,
"<Использовать этот катало>")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE,
"Разрешить вращение")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO,
"Config Aspect Ratio")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO,
"Автоотношение сторон")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX,
@@ -1457,9 +1585,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR,
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER,
"Мерцающий фильтр")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE,
"Onscreen Notification включить")
"Включить экранные уведомления")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH,
"Экранный шрифт уведомления")
"Шрифт экранного уведомления")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE,
"Размер уведомлений на экране")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT,
@@ -1483,9 +1611,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES,
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES,
"Максимальное количество образов свопчейнов")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X,
"Позиция X по уведомлению на экране")
"Позиция уведомления на экране по оси X")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y,
"Позиция Y на экранном уведомлении")
"Позиция уведомления на экране по оси Y")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX,
"Индекс монитора")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD,
@@ -1546,6 +1674,14 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC,
"Вертикальная синхронизация (Vsync)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN,
"Полноэкранный режим")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH,
"Window Width")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT,
"Window Height")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_X,
"Fullscreen Width")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_Y,
"Fullscreen Height")
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER,
"Wi-Fi драйвер")
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS,
@@ -1593,21 +1729,25 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_UNDERSEA,
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_VOLCANIC_RED,
"Вулканический красный")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE,
"Шейдерный канал меню")
"Шейдерный фон меню")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR,
"Масштаб в меню")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE,
"Тени иконок включена")
"Отображение теней у иконок")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY,
"Показать вкладку история просмотров")
"Показать вкладку История просмотров")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_ADD,
"Показать вкладку Импорт контента")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES,
"Показать вкладку изображение")
"Показать вкладку Изображение")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC,
"Показать вкладку музыка")
"Показать вкладку Музыка")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS,
"Показать вкладку настройки")
"Показать вкладку Настройки")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO,
"Показать вкладку видео")
"Показать вкладку Видео")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_NETPLAY,
"Показать вкладку Сетевая игра")
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_THEME,
"Тема значка меню")
MSG_HASH(MENU_ENUM_LABEL_VALUE_YES,
@@ -1620,6 +1760,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL,
"Включение или отключение неофициальных достижений и / или бета-функций в целях тестирования.")
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
"Включить или отключить сохранения, читы, перемотка назад, перемотка вперед, пауза и замедленное воспроизведение для всех игр.")
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_VERBOSE_ENABLE,
"Enable or disable OSD verbosity for achievements.")
MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS,
"Изменение драйверов для этой системы.")
MSG_HASH(MENU_ENUM_SUBLABEL_RETRO_ACHIEVEMENTS_SETTINGS,
@@ -1676,8 +1818,10 @@ MSG_HASH(MENU_ENUM_SUBLABEL_LOG_VERBOSITY,
"Включить или отключить ведение журнала в терминале.")
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY,
"Присоединиться или создать сеанс netplay.")
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS,
"Search for and connect to netplay hosts on the local network.")
MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST,
"Отображать информацию о ядре, сети и системе.")
"Показать информацию о ядре, сети и системе.")
MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER,
"Загрузите надстройки, компоненты и содержимое для RetroArch.")
MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE,
@@ -1690,6 +1834,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE,
"Включить или отключить удаленный доступ к командной строке.")
MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE,
"Запрещается активация заставки вашей системы.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE,
"Sets the window size relative to the core viewport size. Alternatively, you can set a window width and height below for a fixed window size.")
MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE,
"Устанавливает язык интерфейса.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION,
@@ -1908,6 +2054,10 @@ MSG_HASH(MSG_GOT_INVALID_DISK_INDEX,
"Задан неверный номер диска.")
MSG_HASH(MSG_GRAB_MOUSE_STATE,
"Режим перехвата мыши")
MSG_HASH(MSG_GAME_FOCUS_ON,
"Game focus on")
MSG_HASH(MSG_GAME_FOCUS_OFF,
"Game focus off")
MSG_HASH(MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING,
"Ядро использует аппаратный рендеринг. Включите запись с GPU.")
MSG_HASH(MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32,
@@ -2122,6 +2272,18 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_VOLUME,
"Громкость звука (в дБ). 0 дБ - это нормальный уровень громкости, при этом не применяется усиление."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_WASAPI_EXCLUSIVE_MODE,
"Allow the WASAPI driver to take exclusive control of the audio device. If disabled, it will use shared mode instead."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_WASAPI_FLOAT_FORMAT,
"Use float format for the WASAPI driver, if supported by your audio device."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH,
"The intermediate buffer length (in frames) when using the WASAPI driver in shared mode."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_SYNC,
"Синхронизировать звук. Рекомендуется."
@@ -2237,6 +2399,14 @@ MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING,
"Database - Filter : Edge Magazine Rating")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO,
"Database Info")
MSG_HASH(MSG_WIFI_SCAN_COMPLETE,
"Wi-Fi scan complete.")
MSG_HASH(MSG_SCANNING_WIRELESS_NETWORKS,
"Scanning wireless networks...")
MSG_HASH(MSG_NETPLAY_LAN_SCAN_COMPLETE,
"Netplay scan complete.")
MSG_HASH(MSG_NETPLAY_LAN_SCANNING,
"Scanning for netplay hosts...")
MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE,
"Ставить на паузу когда окно теряет фокус.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION,
@@ -2251,6 +2421,22 @@ MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS,
"Использовать управление в меню, такое же как в игре (для клавиатуры).")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE,
"Показывать сообщения на экране.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_USER_REMOTE_ENABLE,
"User %d Remote Enable")
MSG_HASH(MENU_ENUM_LABEL_VALUE_BATTERY_LEVEL_ENABLE,
"Показать заряд батареи")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SELECT_FILE,
"Select File")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SELECT_FROM_COLLECTION,
"Select From Collection")
MSG_HASH(MENU_ENUM_LABEL_VALUE_FILTER,
"Filter")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCALE,
"Scale")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_START_WHEN_LOADED,
"Netplay will start when content is loaded.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_LOAD_CONTENT_MANUALLY,
"Couldn't find a suitable core or content file, load manually.")
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BROWSE_URL_LIST,
"Просмотр URL"
@@ -2266,7 +2452,7 @@ MSG_HASH(
MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_BOKEH,
"Bokeh")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_REFRESH_ROOMS,
"Refresh Room List")
"Обновить список комнат")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ROOM_NICKNAME,
"Nickname: %s")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ROOM_NICKNAME_LAN,
@@ -2288,15 +2474,15 @@ MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_NICKNAME,
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_POST_FILTER_RECORD,
"Capture the image after filters (but not shaders) are applied. Your video will look as fancy as what you see on your screen.")
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_LIST,
"Select which core to use.")
"Выберите, какое ядро использовать.")
MSG_HASH(MENU_ENUM_SUBLABEL_LOAD_CONTENT_LIST,
"Select which content to start.")
"Выберите, какой контент запустить.")
MSG_HASH(MENU_ENUM_SUBLABEL_NETWORK_INFORMATION,
"Show network interface(s) and associated IP addresses.")
"Показать сетевые интерфейсы и ассоциированные IP адреса.")
MSG_HASH(MENU_ENUM_SUBLABEL_SYSTEM_INFORMATION,
"Show information specific to the device.")
"Показать информацию, относящуюся к устройству.")
MSG_HASH(MENU_ENUM_SUBLABEL_QUIT_RETROARCH,
"Quit the program.")
"Закрыть программу.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_WIDTH,
"Set the custom width size for the display window. Leaving it at 0 will attempt to scale the window as large as possible.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_HEIGHT,
@@ -2379,15 +2565,15 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE,
"Automatically makes a savestate at the end of RetroArch's runtime. RetroArch will automatically load this savestate if 'Auto Load State' is enabled."
"Автоматически сохранять игру при выходе. RetroArch загрузит это сохранение, если включена 'Автозагрузка'."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_LOAD,
"Automatically load the auto save state on startup."
"При запуске игры загружать автоматически сохраненное состояние."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_SAVESTATE_THUMBNAIL_ENABLE,
"Show thumbnails of save states inside the menu."
"Показывать миниатюры файлов сохранений в меню."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUTOSAVE_INTERVAL,
@@ -2475,23 +2661,23 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_OVERLAY_OPACITY,
"Opacity of all UI elements of the overlay."
"Непрозрачность всех элементов пользовательского интерфейса наложения."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_OVERLAY_SCALE,
"Scale of all UI elements of the overlay."
"Масштаб всех элементов пользовательского интерфейса наложения."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ENABLE,
"Enable the overlay."
"Включить наложение."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_OVERLAY_PRESET,
"Select an overlay from the file browser."
"Выберите наложение из браузера файлов."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_NETPLAY_IP_ADDRESS,
"The address of the host to connect to."
"Адрес хоста для подключения."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_NETPLAY_TCP_UDP_PORT,
@@ -2499,7 +2685,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_NETPLAY_PASSWORD,
"The password for connecting to the netplay host. Used only in host mode."
"Пароль для подключения к Netplay-хосту. Используется только в режиме хоста."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_NETPLAY_PUBLIC_ANNOUNCE,
@@ -2551,11 +2737,11 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_TIMEDATE_ENABLE,
"Shows current date and/or time inside the menu."
"Показывать текущую дату и/или время в меню."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_BATTERY_LEVEL_ENABLE,
"Shows current battery level inside the menu."
"Показывать текущий уровень заряда батареи в меню."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_NAVIGATION_WRAPAROUND,
@@ -2614,9 +2800,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GAME_SPECIFIC_OPTIONS,
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_ENABLE,
"Shows current core name inside menu.")
MSG_HASH(MENU_ENUM_SUBLABEL_DATABASE_MANAGER,
"View databases.")
"Просмотр баз данных.")
MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_MANAGER,
"View previous searches.")
"Просмотр предыдущих запросов.")
MSG_HASH(MENU_ENUM_SUBLABEL_TAKE_SCREENSHOT,
"Captures an image of the screen.")
MSG_HASH(
@@ -2662,7 +2848,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_CORE_INPUT_REMAPPING_OPTIONS,
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_OPTIONS,
"Change the options for the currently running content.")
MSG_HASH(MENU_ENUM_SUBLABEL_SHOW_ADVANCED_SETTINGS,
"Show advanced settings for power users (hidden by default).")
"Показывать расширенные настройки для опытных пользователей (скрыто по умолчанию).")
MSG_HASH(MENU_ENUM_SUBLABEL_THREADED_DATA_RUNLOOP_ENABLE,
"Perform tasks on a separate thread.")
MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_REMOVE,
@@ -2670,7 +2856,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_REMOVE,
MSG_HASH(MENU_ENUM_SUBLABEL_SYSTEM_DIRECTORY,
"Sets the System directory. Cores can query for this directory to load BIOSes, system-specific configs, etc.")
MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_BROWSER_DIRECTORY,
"Sets start directory for the filebrowser.")
"Установить начальный каталог для файлового браузера.")
MSG_HASH(
MENU_ENUM_SUBLABEL_CONTENT_DIR,
"Usually set by developers who bundle libretro/RetroArch apps to point to assets."
@@ -2862,11 +3048,19 @@ MSG_HASH(
)
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MIXER_MUTE,
"Mute/unmute mixer audio.")
MSG_HASH(MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER,
"Show Online Updater")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SHOW_ONLINE_UPDATER,
"Показать меню Онлайн-обновление")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_ONLINE_UPDATER,
"Show/hide the 'Online Updater' option.")
"Показать/скрыть опцию 'Онлайн-обновление'.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_VIEWS_SETTINGS,
"Элементы главного экрана")
MSG_HASH(
MENU_ENUM_SUBLABEL_MENU_VIEWS_SETTINGS,
"Показать или скрыть элементы на экране меню."
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SHOW_CORE_UPDATER,
"Show Core Updater")
"Показать меню Обновление ядра")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_CORE_UPDATER,
"Show/hide the ability to update cores (and core info files).")
"Показать/скрыть возможность обновлять ядра (и информационные файлы ядер).")
MSG_HASH(MSG_PREPARING_FOR_CONTENT_SCAN,
"Preparing for content scan...")
+22
View File
@@ -953,6 +953,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS,
"Settings")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER,
"Menu Linear Filter")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_HORIZONTAL_ANIMATION,
"Horizontal Animation")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS,
"Menu")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER,
@@ -1217,6 +1219,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE,
"Save Core Remap File")
MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME,
"Save Game Remap File")
MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CORE,
"Delete Core Remap File")
MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_GAME,
"Delete Game Remap File")
MSG_HASH(MENU_ENUM_LABEL_VALUE_REQUIRED,
"Required")
MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_CONTENT,
@@ -1323,6 +1329,14 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE,
"Sort Saves In Folders")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE,
"Sort Savestates In Folders")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATES_IN_CONTENT_DIR_ENABLE,
"Write Savestates to Content Dir")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILES_IN_CONTENT_DIR_ENABLE,
"Write Saves to Content Dir")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEMFILES_IN_CONTENT_DIR_ENABLE,
"System Files are in Content Dir")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOTS_IN_CONTENT_DIR_ENABLE,
"Write Screenshots to Content Dir")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SSH_ENABLE,
"SSH Enable")
MSG_HASH(MENU_ENUM_LABEL_VALUE_START_CORE,
@@ -1945,6 +1959,8 @@ MSG_HASH(MSG_ERROR_SAVING_CORE_OPTIONS_FILE,
"Error saving core options file.")
MSG_HASH(MSG_ERROR_SAVING_REMAP_FILE,
"Error saving remap file.")
MSG_HASH(MSG_ERROR_REMOVING_REMAP_FILE,
"Error removing remap file.")
MSG_HASH(MSG_ERROR_SAVING_SHADER_PRESET,
"Error saving shader preset.")
MSG_HASH(MSG_EXTERNAL_APPLICATION_DIR,
@@ -2137,6 +2153,8 @@ MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO,
"Redirecting savestate to")
MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY,
"Remap file saved successfully.")
MSG_HASH(MSG_REMAP_FILE_REMOVED_SUCCESSFULLY,
"Remap file removed successfully.")
MSG_HASH(MSG_REMOVED_DISK_FROM_TRAY,
"Removed disk from tray.")
MSG_HASH(MSG_REMOVING_TEMPORARY_CONTENT_FILE,
@@ -3059,3 +3077,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_CORE_UPDATER,
"Show/hide the ability to update cores (and core info files).")
MSG_HASH(MSG_PREPARING_FOR_CONTENT_SCAN,
"Preparing for content scan...")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_DELETE,
"Delete core")
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_DELETE,
"Remove this core from disk.")
+203 -2
View File
@@ -30,6 +30,7 @@
#include <rthreads/rthreads.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
@@ -46,6 +47,10 @@
#include "../../deps/stb/stb_vorbis.h"
#endif
#ifdef HAVE_IBXM
#include "../../deps/ibxm/ibxm.h"
#endif
#define AUDIO_MIXER_MAX_VOICES 8
#define AUDIO_MIXER_TEMP_OGG_BUFFER 8192
@@ -70,6 +75,15 @@ struct audio_mixer_sound
const void* data;
} ogg;
#endif
#ifdef HAVE_IBXM
struct
{
/* mod/s3m/xm */
unsigned size;
const void* data;
} mod;
#endif
} types;
};
@@ -85,14 +99,12 @@ struct audio_mixer_voice
{
struct
{
/* wav */
unsigned position;
} wav;
#ifdef HAVE_STB_VORBIS
struct
{
/* ogg */
unsigned position;
unsigned samples;
unsigned buf_samples;
@@ -103,6 +115,17 @@ struct audio_mixer_voice
const retro_resampler_t *resampler;
} ogg;
#endif
#ifdef HAVE_IBXM
struct
{
unsigned position;
unsigned samples;
unsigned buf_samples;
int* buffer;
struct replay* stream;
} mod;
#endif
} types;
};
@@ -319,6 +342,24 @@ audio_mixer_sound_t* audio_mixer_load_ogg(void *buffer, int32_t size)
#endif
}
audio_mixer_sound_t* audio_mixer_load_mod(void *buffer, int32_t size)
{
#ifdef HAVE_IBXM
audio_mixer_sound_t* sound = (audio_mixer_sound_t*)calloc(1, sizeof(*sound));
if (!sound)
return NULL;
sound->type = AUDIO_MIXER_TYPE_MOD;
sound->types.mod.size = size;
sound->types.mod.data = buffer;
return sound;
#else
return NULL;
#endif
}
void audio_mixer_destroy(audio_mixer_sound_t* sound)
{
void *handle = NULL;
@@ -337,6 +378,13 @@ void audio_mixer_destroy(audio_mixer_sound_t* sound)
handle = (void*)sound->types.ogg.data;
if (handle)
free(handle);
#endif
break;
case AUDIO_MIXER_TYPE_MOD:
#ifdef HAVE_IBXM
handle = (void*)sound->types.mod.data;
if (handle)
free(handle);
#endif
break;
case AUDIO_MIXER_TYPE_NONE:
@@ -413,6 +461,74 @@ error:
}
#endif
#ifdef HAVE_IBXM
static bool audio_mixer_play_mod(
audio_mixer_sound_t* sound,
audio_mixer_voice_t* voice,
bool repeat, float volume,
audio_mixer_stop_cb_t stop_cb)
{
struct data data;
char message[64];
int buf_samples = 0;
int samples = 0;
void *mod_buffer = NULL;
struct module* module = NULL;
struct replay* replay = NULL;
data.buffer = (char*)sound->types.mod.data;
data.length = sound->types.mod.size;
module = module_load(&data, message);
if (!module)
{
printf("audio_mixer_play_mod module_load() failed with error: %s\n", message);
goto error;
}
replay = new_replay( module, s_rate, 1);
if (!replay)
{
printf("audio_mixer_play_mod new_replay() failed\n");
goto error;
}
buf_samples = calculate_mix_buf_len(s_rate);
mod_buffer = memalign_alloc(16, ((buf_samples + 15) & ~15) * sizeof(int));
if (!mod_buffer)
{
printf("audio_mixer_play_mod cannot allocate mod_buffer !\n");
goto error;
}
samples = replay_calculate_duration(replay);
if (!samples)
{
printf("audio_mixer_play_mod cannot retrieve duration !\n");
goto error;
}
voice->types.mod.buffer = (int*)mod_buffer;
voice->types.mod.buf_samples = buf_samples;
voice->types.mod.stream = replay;
voice->types.mod.position = 0;
voice->types.mod.samples = 0; /* samples; */
return true;
error:
if (mod_buffer)
memalign_free(mod_buffer);
if (module)
dispose_module(module);
return false;
}
#endif
audio_mixer_voice_t* audio_mixer_play(audio_mixer_sound_t* sound, bool repeat,
float volume, audio_mixer_stop_cb_t stop_cb)
{
@@ -440,6 +556,11 @@ audio_mixer_voice_t* audio_mixer_play(audio_mixer_sound_t* sound, bool repeat,
case AUDIO_MIXER_TYPE_OGG:
#ifdef HAVE_STB_VORBIS
res = audio_mixer_play_ogg(sound, voice, repeat, volume, stop_cb);
#endif
break;
case AUDIO_MIXER_TYPE_MOD:
#ifdef HAVE_IBXM
res = audio_mixer_play_mod(sound, voice, repeat, volume, stop_cb);
#endif
break;
case AUDIO_MIXER_TYPE_NONE:
@@ -608,6 +729,81 @@ again:
}
#endif
#ifdef HAVE_IBXM
static void audio_mixer_mix_mod(float* buffer, size_t num_frames,
audio_mixer_voice_t* voice,
float volume)
{
int i;
float samplef = 0.0f;
int samplei = 0;
unsigned temp_samples = 0;
unsigned buf_free = num_frames * 2;
int* pcm = NULL;
if (voice->types.mod.position == voice->types.mod.samples)
{
again:
temp_samples = replay_get_audio(
voice->types.mod.stream, voice->types.mod.buffer );
temp_samples *= 2; /* stereo */
if (temp_samples == 0)
{
if (voice->repeat)
{
if (voice->stop_cb)
voice->stop_cb(voice->sound, AUDIO_MIXER_SOUND_REPEATED);
replay_seek( voice->types.mod.stream, 0);
goto again;
}
else
{
if (voice->stop_cb)
voice->stop_cb(voice->sound, AUDIO_MIXER_SOUND_FINISHED);
voice->type = AUDIO_MIXER_TYPE_NONE;
return;
}
}
voice->types.mod.position = 0;
voice->types.mod.samples = temp_samples;
}
pcm = voice->types.mod.buffer + voice->types.mod.position;
if (voice->types.mod.samples < buf_free)
{
for (i = voice->types.mod.samples; i != 0; i--)
{
samplei = *pcm++ * volume;
samplef = (float)((int)samplei + 32768) / 65535.0f;
samplef = samplef * 2.0f - 1.0f;
*buffer++ = samplef;
}
buf_free -= voice->types.mod.samples;
goto again;
}
else
{
int i;
for (i = buf_free; i != 0; --i )
{
samplei = *pcm++ * volume;
samplef = (float)((int)samplei + 32768) / 65535.0f;
samplef = samplef * 2.0f - 1.0f;
*buffer++ = samplef;
}
voice->types.mod.position += buf_free;
voice->types.mod.samples -= buf_free;
}
}
#endif
void audio_mixer_mix(float* buffer, size_t num_frames, float volume_override, bool override)
{
unsigned i;
@@ -631,6 +827,11 @@ void audio_mixer_mix(float* buffer, size_t num_frames, float volume_override, bo
case AUDIO_MIXER_TYPE_OGG:
#ifdef HAVE_STB_VORBIS
audio_mixer_mix_ogg(buffer, num_frames, voice, volume);
#endif
break;
case AUDIO_MIXER_TYPE_MOD:
#ifdef HAVE_IBXM
audio_mixer_mix_mod(buffer, num_frames, voice, volume);
#endif
break;
case AUDIO_MIXER_TYPE_NONE:
+11 -46
View File
@@ -20,8 +20,9 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <retro_common.h>
@@ -156,45 +157,6 @@ const char *retro_dirent_get_name(struct RDIR *rdir)
#endif
}
static bool path_is_directory_internal(const char *path)
{
#if defined(VITA) || defined(PSP)
SceIoStat buf;
char *tmp = strdup(path);
size_t len = strlen(tmp);
if (tmp[len-1] == '/')
tmp[len-1]='\0';
if (sceIoGetstat(tmp, &buf) < 0)
{
free(tmp);
return false;
}
free(tmp);
return FIO_S_ISDIR(buf.st_mode);
#elif defined(__CELLOS_LV2__)
CellFsStat buf;
if (cellFsStat(path, &buf) < 0)
return false;
return ((buf.st_mode & S_IFMT) == S_IFDIR);
#elif defined(_WIN32)
struct _stat buf;
DWORD file_info = GetFileAttributes(path);
_stat(path, &buf);
if (file_info == INVALID_FILE_ATTRIBUTES)
return false;
return (file_info & FILE_ATTRIBUTE_DIRECTORY);
#else
struct stat buf;
if (stat(path, &buf) < 0)
return false;
return S_ISDIR(buf.st_mode);
#endif
}
/**
*
* retro_dirent_is_dir:
@@ -221,17 +183,20 @@ bool retro_dirent_is_dir(struct RDIR *rdir, const char *path)
#elif defined(__CELLOS_LV2__)
CellFsDirent *entry = (CellFsDirent*)&rdir->entry;
return (entry->d_type == CELL_FS_TYPE_DIRECTORY);
#elif defined(DT_DIR)
#else
struct stat buf;
#if defined(DT_DIR)
const struct dirent *entry = (const struct dirent*)rdir->entry;
if (entry->d_type == DT_DIR)
return true;
/* This can happen on certain file systems. */
if (entry->d_type == DT_UNKNOWN || entry->d_type == DT_LNK)
return path_is_directory_internal(path);
return false;
#else
if (!(entry->d_type == DT_UNKNOWN || entry->d_type == DT_LNK))
return false;
#endif
/* dirent struct doesn't have d_type, do it the slow way ... */
return path_is_directory_internal(path);
if (stat(path, &buf) < 0)
return false;
return S_ISDIR(buf.st_mode);
#endif
}
+3 -1
View File
@@ -40,7 +40,8 @@ enum audio_mixer_type
{
AUDIO_MIXER_TYPE_NONE = 0,
AUDIO_MIXER_TYPE_WAV,
AUDIO_MIXER_TYPE_OGG
AUDIO_MIXER_TYPE_OGG,
AUDIO_MIXER_TYPE_MOD
};
typedef struct audio_mixer_sound audio_mixer_sound_t;
@@ -59,6 +60,7 @@ void audio_mixer_done(void);
audio_mixer_sound_t* audio_mixer_load_wav(void *buffer, int32_t size);
audio_mixer_sound_t* audio_mixer_load_ogg(void *buffer, int32_t size);
audio_mixer_sound_t* audio_mixer_load_mod(void *buffer, int32_t size);
void audio_mixer_destroy(audio_mixer_sound_t* sound);
+12
View File
@@ -923,6 +923,18 @@ enum retro_mod
* writeable (and readable).
*/
#define RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT (44 | RETRO_ENVIRONMENT_EXPERIMENTAL)
/* N/A (null) * --
* The frontend will try to use a 'shared' hardware context (mostly applicable
* to OpenGL) when a hardware context is being set up.
*
* Returns true if the frontend supports shared hardware contexts and false
* if the frontend does not support shared hardware contexts.
*
* This will do nothing on its own until SET_HW_RENDER env callbacks are
* being used.
*/
enum retro_hw_render_interface_type
{
RETRO_HW_RENDER_INTERFACE_VULKAN = 0,
@@ -24,6 +24,8 @@
#define __LIBRETRO_SDK_FILE_STREAM_TRANSFORMS_H
#include <retro_common_api.h>
#include <streams/file_stream.h>
#include <string.h>
RETRO_BEGIN_DECLS
+1 -1
View File
@@ -87,7 +87,7 @@ char *string_trim_whitespace_right(char *const s);
/* Remove leading and trailing whitespaces */
char *string_trim_whitespace(char *const s);
char *word_wrap(char* buffer, const char *string, int line_width);
char *word_wrap(char* buffer, const char *string, int line_width, bool unicode);
RETRO_END_DECLS
+35 -3
View File
@@ -437,11 +437,18 @@ void scond_free(scond_t *cond)
#ifdef USE_WIN32_THREADS
static bool _scond_wait_win32(scond_t *cond, slock_t *lock, DWORD dwMilliseconds)
{
static bool beginPeriod = false;
struct QueueEntry myentry;
struct QueueEntry **ptr;
#if _WIN32_WINNT >= 0x0500
static LARGE_INTEGER performanceCounterFrequency;
LARGE_INTEGER tsBegin;
static bool first_init = true;
#else
static bool beginPeriod = false;
DWORD tsBegin;
#endif
DWORD waitResult;
DWORD dwFinalTimeout = dwMilliseconds; /* Careful! in case we begin in the head,
we don't do the hot potato stuff,
@@ -453,16 +460,33 @@ static bool _scond_wait_win32(scond_t *cond, slock_t *lock, DWORD dwMilliseconds
/* since this library is meant for realtime game software
* I have no problem setting this to 1 and forgetting about it. */
#if _WIN32_WINNT >= 0x0500
if (first_init)
{
performanceCounterFrequency.QuadPart = 0;
first_init = false;
}
if (performanceCounterFrequency.QuadPart == 0)
{
QueryPerformanceFrequency(&performanceCounterFrequency);
}
#else
if (!beginPeriod)
{
beginPeriod = true;
timeBeginPeriod(1);
}
#endif
/* Now we can take a good timestamp for use in faking the timeout ourselves. */
/* But don't bother unless we need to (to save a little time) */
if (dwMilliseconds != INFINITE)
#if _WIN32_WINNT >= 0x0500
QueryPerformanceCounter(&tsBegin);
#else
tsBegin = timeGetTime();
#endif
/* add ourselves to a queue of waiting threads */
ptr = &cond->head;
@@ -504,8 +528,16 @@ static bool _scond_wait_win32(scond_t *cond, slock_t *lock, DWORD dwMilliseconds
/* Assess the remaining timeout time */
if (dwMilliseconds != INFINITE)
{
DWORD now = timeGetTime();
#if _WIN32_WINNT >= 0x0500
LARGE_INTEGER now;
QueryPerformanceCounter(&now);
LONGLONG elapsed = now.QuadPart - tsBegin.QuadPart;
elapsed *= 1000;
elapsed /= performanceCounterFrequency.QuadPart;
#else
DWORD now = timeGetTime();
DWORD elapsed = now - tsBegin;
#endif
/* Try one last time with a zero timeout (keeps the code simpler) */
if (elapsed > dwMilliseconds)
+20 -5
View File
@@ -24,6 +24,7 @@
#include <ctype.h>
#include <string/stdstring.h>
#include <encodings/utf.h>
char *string_to_upper(char *s)
{
@@ -144,7 +145,7 @@ char *string_trim_whitespace(char *const s)
return s;
}
char *word_wrap(char* buffer, const char *string, int line_width)
char *word_wrap(char* buffer, const char *string, int line_width, bool unicode)
{
unsigned i = 0;
unsigned len = (unsigned)strlen(string);
@@ -156,20 +157,34 @@ char *word_wrap(char* buffer, const char *string, int line_width)
/* copy string until the end of the line is reached */
for (counter = 1; counter <= (unsigned)line_width; counter++)
{
const char *character;
unsigned char_len;
unsigned j = i;
character = utf8skip(&string[i], 1);
char_len = character - &string[i];
/* check if end of string reached */
if (i == strlen(string))
if (i == len)
{
buffer[i] = 0;
return buffer;
}
buffer[i] = string[i];
if (!unicode)
counter += char_len - 1;
do
{
buffer[i] = string[i];
char_len--;
i++;
} while(char_len);
/* check for newlines embedded in the original input
* and reset the index */
if (buffer[i] == '\n')
if (buffer[j] == '\n')
counter = 1;
i++;
}
/* check for whitespace */
+35
View File
@@ -693,6 +693,24 @@ static int general_push(menu_displaylist_info_t *info,
if (!string_is_empty(system->valid_extensions))
strlcpy(info->exts, system->valid_extensions, sizeof(info->exts));
}
{
union string_list_elem_attr attr;
char newstring2[PATH_MAX_LENGTH];
struct string_list *str_list3 = string_split(info->exts, "|");
newstring2[0] = '\0';
attr.i = 0;
#ifdef HAVE_IBXM
string_list_append(str_list3, "s3m", attr);
string_list_append(str_list3, "mod", attr);
string_list_append(str_list3, "xm", attr);
#endif
string_list_join_concat(newstring2, sizeof(newstring2),
str_list3, "|");
string_list_free(str_list3);
strlcpy(info->exts, newstring2, sizeof(info->exts));
}
break;
case PUSH_ARCHIVE_OPEN_DETECT_CORE:
case PUSH_DETECT_CORE_LIST:
@@ -745,7 +763,24 @@ static int general_push(menu_displaylist_info_t *info,
str_list2, "|");
strlcpy(info->exts, newstring, sizeof(info->exts));
{
union string_list_elem_attr attr;
char newstring2[PATH_MAX_LENGTH];
struct string_list *str_list3 = string_split(info->exts, "|");
newstring2[0] = '\0';
attr.i = 0;
#ifdef HAVE_IBXM
string_list_append(str_list3, "s3m", attr);
string_list_append(str_list3, "mod", attr);
string_list_append(str_list3, "xm", attr);
#endif
string_list_join_concat(newstring2, sizeof(newstring2),
str_list3, "|");
string_list_free(str_list3);
strlcpy(info->exts, newstring2, sizeof(info->exts));
}
string_list_free(str_list2);
}
break;
-1
View File
@@ -1844,7 +1844,6 @@ static int menu_cbs_init_bind_get_string_representation_compare_type(
case MENU_SETTING_ACTION_LOADSTATE:
case 7: /* Run */
case MENU_SETTING_ACTION_DELETE_ENTRY:
case 117: /* Netplay settings */
case MENU_SETTING_ACTION_CORE_DISK_OPTIONS:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_menu_more);
+125 -23
View File
@@ -1,6 +1,7 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2011-2017 - Daniel De Matteis
* Copyright (C) 2016-2017 - Brad Parker
* Copyright (C) 2015-2017 - Andrés Suárez
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
@@ -262,6 +263,16 @@ int generic_action_ok_displaylist_push(const char *path,
info_label = label;
dl_type = DISPLAYLIST_GENERIC;
break;
case ACTION_OK_DL_FILE_BROWSER_SELECT_FILE:
if (path)
strlcpy(menu->deferred_path, path,
sizeof(menu->deferred_path));
info.type = type;
info.directory_ptr = idx;
info_label = label;
dl_type = DISPLAYLIST_FILE_BROWSER_SELECT_FILE;
break;
case ACTION_OK_DL_FILE_BROWSER_SELECT_DIR:
if (path)
strlcpy(menu->deferred_path, path,
@@ -2080,10 +2091,12 @@ static int action_ok_cheat_file_save_as(const char *path,
enum
{
ACTION_OK_REMAP_FILE_SAVE_CORE = 0,
ACTION_OK_REMAP_FILE_SAVE_GAME
ACTION_OK_REMAP_FILE_SAVE_GAME,
ACTION_OK_REMAP_FILE_REMOVE_CORE,
ACTION_OK_REMAP_FILE_REMOVE_GAME
};
static int generic_action_ok_remap_file_save(const char *path,
static int generic_action_ok_remap_file_operation(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx,
unsigned action_type)
{
@@ -2108,10 +2121,12 @@ static int generic_action_ok_remap_file_save(const char *path,
switch (action_type)
{
case ACTION_OK_REMAP_FILE_SAVE_CORE:
case ACTION_OK_REMAP_FILE_REMOVE_CORE:
if (!string_is_empty(core_name))
fill_pathname_join(file, core_name, core_name, sizeof(file));
break;
case ACTION_OK_REMAP_FILE_SAVE_GAME:
case ACTION_OK_REMAP_FILE_REMOVE_GAME:
if (!string_is_empty(core_name))
fill_pathname_join(file, core_name,
path_basename(path_get(RARCH_PATH_BASENAME)), sizeof(file));
@@ -2121,32 +2136,74 @@ static int generic_action_ok_remap_file_save(const char *path,
if(!path_file_exists(directory))
path_mkdir(directory);
if(input_remapping_save_file(file))
runloop_msg_queue_push(
msg_hash_to_str(MSG_REMAP_FILE_SAVED_SUCCESSFULLY),
1, 100, true);
else
runloop_msg_queue_push(
msg_hash_to_str(MSG_ERROR_SAVING_REMAP_FILE),
1, 100, true);
if (action_type < ACTION_OK_REMAP_FILE_REMOVE_CORE)
{
if(input_remapping_save_file(file))
{
if (action_type == ACTION_OK_REMAP_FILE_SAVE_CORE)
rarch_ctl(RARCH_CTL_SET_REMAPS_CORE_ACTIVE, NULL);
else
rarch_ctl(RARCH_CTL_SET_REMAPS_GAME_ACTIVE, NULL);
runloop_msg_queue_push(
msg_hash_to_str(MSG_REMAP_FILE_SAVED_SUCCESSFULLY),
1, 100, true);
}
else
runloop_msg_queue_push(
msg_hash_to_str(MSG_ERROR_SAVING_REMAP_FILE),
1, 100, true);
}
else
{
RARCH_LOG("removing %s", file);
if(input_remapping_remove_file(file))
{
if (action_type == ACTION_OK_REMAP_FILE_REMOVE_CORE)
rarch_ctl(RARCH_CTL_UNSET_REMAPS_CORE_ACTIVE, NULL);
else
rarch_ctl(RARCH_CTL_UNSET_REMAPS_GAME_ACTIVE, NULL);
runloop_msg_queue_push(
msg_hash_to_str(MSG_REMAP_FILE_REMOVED_SUCCESSFULLY),
1, 100, true);
}
else
runloop_msg_queue_push(
msg_hash_to_str(MSG_ERROR_REMOVING_REMAP_FILE),
1, 100, true);
}
return 0;
}
static int action_ok_remap_file_save_core(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
return generic_action_ok_remap_file_save(path, label, type,
return generic_action_ok_remap_file_operation(path, label, type,
idx, entry_idx, ACTION_OK_REMAP_FILE_SAVE_CORE);
}
static int action_ok_remap_file_save_game(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
return generic_action_ok_remap_file_save(path, label, type,
return generic_action_ok_remap_file_operation(path, label, type,
idx, entry_idx, ACTION_OK_REMAP_FILE_SAVE_GAME);
}
static int action_ok_remap_file_remove_core(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
return generic_action_ok_remap_file_operation(path, label, type,
idx, entry_idx, ACTION_OK_REMAP_FILE_REMOVE_CORE);
}
static int action_ok_remap_file_remove_game(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
return generic_action_ok_remap_file_operation(path, label, type,
idx, entry_idx, ACTION_OK_REMAP_FILE_REMOVE_GAME);
}
int action_ok_path_use_directory(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
@@ -3653,6 +3710,15 @@ void netplay_refresh_rooms_menu(file_list_t *list)
for (i = 0; i < netplay_room_count; i++)
{
char country[PATH_MAX_LENGTH] = {0};
if (*netplay_room_list[i].country)
{
strlcat(country, " (", sizeof(country));
strlcat(country, netplay_room_list[i].country, sizeof(country));
strlcat(country, ")", sizeof(country));
}
/* Uncomment this to debug mismatched room parameters*/
#if 0
RARCH_LOG("[lobby] room Data: %d\n"
@@ -3674,13 +3740,13 @@ void netplay_refresh_rooms_menu(file_list_t *list)
netplay_room_list[i].timestamp);
#endif
j+=8;
snprintf(s, sizeof(s), "%s: %s",
netplay_room_list[i].lan ? "Local" :
(netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ?
snprintf(s, sizeof(s), "%s: %s%s",
netplay_room_list[i].lan ? "Local" :
(netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ?
"Internet (relay)" : "Internet (direct)"),
netplay_room_list[i].nickname);
netplay_room_list[i].nickname, country);
/*int room_type = netplay_room_list[i].lan ? MENU_ROOM_LAN :
/*int room_type = netplay_room_list[i].lan ? MENU_ROOM_LAN :
(netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ? MENU_ROOM_MITM : MENU_ROOM); */
menu_entries_append_enum(list,
s,
@@ -3771,14 +3837,14 @@ static void netplay_refresh_rooms_cb(void *task_data, void *user_data, const cha
if (address->sa_family == AF_INET)
{
struct sockaddr_in *sin = (struct sockaddr_in *) address;
inet_ntop_compat(AF_INET, &sin->sin_addr,
inet_ntop_compat(AF_INET, &sin->sin_addr,
netplay_room_list[i].address, INET6_ADDRSTRLEN);
}
#if defined(AF_INET6) && !defined(HAVE_SOCKET_LEGACY)
else if (address->sa_family == AF_INET6)
{
struct sockaddr_in6 *sin = (struct sockaddr_in6 *) address;
inet_ntop_compat(AF_INET6, &sin->sin6_addr,
inet_ntop_compat(AF_INET6, &sin->sin6_addr,
netplay_room_list[i].address, INET6_ADDRSTRLEN);
}
#endif
@@ -3786,9 +3852,9 @@ static void netplay_refresh_rooms_cb(void *task_data, void *user_data, const cha
strlcpy(netplay_room_list[i].corename,
host->core,
sizeof(netplay_room_list[i].corename));
strlcpy(netplay_room_list[i].retroarchversion,
strlcpy(netplay_room_list[i].retroarch_version,
host->retroarch_version,
sizeof(netplay_room_list[i].retroarchversion));
sizeof(netplay_room_list[i].retroarch_version));
strlcpy(netplay_room_list[i].coreversion,
host->core_version,
sizeof(netplay_room_list[i].coreversion));
@@ -3935,6 +4001,15 @@ int action_ok_push_filebrowser_list_dir_select(const char *path,
entry_idx, ACTION_OK_DL_FILE_BROWSER_SELECT_DIR);
}
int action_ok_push_filebrowser_list_file_select(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
filebrowser_set_type(FILEBROWSER_SELECT_FILE);
strlcpy(filebrowser_label, label, sizeof(filebrowser_label));
return generic_action_ok_displaylist_push(path, NULL, label, type, idx,
entry_idx, ACTION_OK_DL_FILE_BROWSER_SELECT_DIR);
}
static int action_ok_push_default(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
@@ -4374,8 +4449,9 @@ static int action_ok_netplay_enable_client(const char *path,
static int action_ok_netplay_disconnect(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
settings_t *settings = config_get_ptr();
#ifdef HAVE_NETWORKING
settings_t *settings = config_get_ptr();
netplay_driver_ctl(RARCH_NETPLAY_CTL_DISCONNECT, NULL);
netplay_driver_ctl(RARCH_NETPLAY_CTL_DISABLE, NULL);
@@ -4393,6 +4469,21 @@ static int action_ok_netplay_disconnect(const char *path,
#endif
}
static int action_ok_core_delete(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
char* core_path = strdup(path_get(RARCH_PATH_CORE));
generic_action_ok_command(CMD_EVENT_UNLOAD_CORE);
menu_entries_flush_stack(0, 0);
remove(core_path);
free(core_path);
return 0;
}
static int is_rdb_entry(enum msg_hash_enums enum_idx)
{
switch (enum_idx)
@@ -4658,7 +4749,6 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_ONLINE_UPDATER:
case MENU_ENUM_LABEL_NETPLAY:
case MENU_ENUM_LABEL_LOAD_CONTENT_LIST:
case MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL:
case MENU_ENUM_LABEL_ADD_CONTENT_LIST:
case MENU_ENUM_LABEL_CONFIGURATIONS_LIST:
case MENU_ENUM_LABEL_HELP_LIST:
@@ -4666,6 +4756,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_CONTENT_SETTINGS:
BIND_ACTION_OK(cbs, action_ok_push_default);
break;
case MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL:
BIND_ACTION_OK(cbs, action_ok_push_filebrowser_list_file_select);
break;
case MENU_ENUM_LABEL_SCAN_DIRECTORY:
BIND_ACTION_OK(cbs, action_ok_scan_directory_list);
break;
@@ -4721,6 +4814,12 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME:
BIND_ACTION_OK(cbs, action_ok_remap_file_save_game);
break;
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE:
BIND_ACTION_OK(cbs, action_ok_remap_file_remove_core);
break;
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME:
BIND_ACTION_OK(cbs, action_ok_remap_file_remove_game);
break;
case MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST:
BIND_ACTION_OK(cbs, action_ok_content_collection_list);
break;
@@ -4838,6 +4937,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_NETPLAY_DISCONNECT:
BIND_ACTION_OK(cbs, action_ok_netplay_disconnect);
break;
case MENU_ENUM_LABEL_CORE_DELETE:
BIND_ACTION_OK(cbs, action_ok_core_delete);
break;
default:
return -1;
}
+6 -3
View File
@@ -333,6 +333,7 @@ default_sublabel_macro(action_bind_sublabel_video_viewport_custom_width,
default_sublabel_macro(action_bind_sublabel_video_viewport_custom_x, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_X)
default_sublabel_macro(action_bind_sublabel_video_viewport_custom_y, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_Y)
default_sublabel_macro(action_bind_sublabel_netplay_use_mitm_server, MENU_ENUM_SUBLABEL_NETPLAY_USE_MITM_SERVER)
default_sublabel_macro(action_bind_sublabel_core_delete, MENU_ENUM_SUBLABEL_CORE_DELETE)
static int action_bind_sublabel_cheevos_entry(
file_list_t *list,
@@ -363,9 +364,9 @@ static int action_bind_sublabel_netplay_room(
if (i < 1)
return 0;
snprintf(s,len, "RetroArch: %s\nCore: %s (%s)\nGame: %s (%08x)",
string_is_empty(netplay_room_list[i - 3].retroarchversion) ? "n/a" : netplay_room_list[i - 3].retroarchversion,
netplay_room_list[i - 3].corename, netplay_room_list[i - 3].coreversion,
snprintf(s,len, "RetroArch: %s\nCore: %s (%s)\nGame: %s (%08x)",
string_is_empty(netplay_room_list[i - 3].retroarch_version) ? "n/a" : netplay_room_list[i - 3].retroarch_version,
netplay_room_list[i - 3].corename, netplay_room_list[i - 3].coreversion,
!string_is_equal(netplay_room_list[i - 3].gamename, "N/A") ? netplay_room_list[i - 3].gamename : "n/a", netplay_room_list[i - 3].gamecrc);
#if 0
strlcpy(s, netplay_room_list[i - 3].corename, len);
@@ -1290,6 +1291,8 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_NETPLAY_USE_MITM_SERVER:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_netplay_use_mitm_server);
break;
case MENU_ENUM_LABEL_CORE_DELETE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_delete);
default:
case MSG_UNKNOWN:
return -1;
+47 -3
View File
@@ -57,12 +57,14 @@
#include "../../file_path_special.h"
/* This struct holds the y position and the line height for each menu entry */
typedef struct
{
float line_height;
float y;
} mui_node_t;
/* Textures used for the tabs and the switches */
enum
{
MUI_TEXTURE_POINTER = 0,
@@ -77,6 +79,7 @@ enum
MUI_TEXTURE_LAST
};
/* The menu has 3 tabs */
enum
{
MUI_SYSTEM_TAB_MAIN = 0,
@@ -129,10 +132,13 @@ typedef struct mui_handle
size_t selection_ptr;
} categories;
/* One font for the menu entries, one font for the labels */
font_data_t *font;
font_data_t *font2;
video_font_raster_block_t raster_block;
video_font_raster_block_t raster_block2;
/* Y position of the vertical scroll */
float scroll_y;
} mui_handle_t;
@@ -229,6 +235,7 @@ static void mui_draw_icon(
menu_display_blend_end();
}
/* Draw a single tab */
static void mui_draw_tab(mui_handle_t *mui,
unsigned i,
unsigned width, unsigned height,
@@ -268,6 +275,7 @@ static void mui_draw_tab(mui_handle_t *mui,
&tab_color[0]);
}
/* Draw the onscreen keyboard */
static void mui_render_keyboard(mui_handle_t *mui,
video_frame_info_t *video_info,
const char *grid[], unsigned id)
@@ -357,6 +365,7 @@ static int mui_osk_ptr_at_pos(void *data, int x, int y,
return -1;
}
/* Draw the tabs background */
static void mui_draw_tab_begin(mui_handle_t *mui,
unsigned width, unsigned height,
float *tabs_bg_color, float *tabs_separator_color)
@@ -378,6 +387,7 @@ static void mui_draw_tab_begin(mui_handle_t *mui,
tabs_separator_color);
}
/* Draw the active tab */
static void mui_draw_tab_end(mui_handle_t *mui,
unsigned width, unsigned height,
unsigned header_height,
@@ -395,6 +405,7 @@ static void mui_draw_tab_end(mui_handle_t *mui,
&active_tab_marker_color[0]);
}
/* Compute the total height of the scrollable content */
static float mui_content_height(void)
{
unsigned i;
@@ -410,6 +421,7 @@ static float mui_content_height(void)
return sum;
}
/* Draw the scrollbar */
static void mui_draw_scrollbar(mui_handle_t *mui,
unsigned width, unsigned height, float *coord_color)
{
@@ -450,6 +462,7 @@ static void mui_get_message(void *data, const char *message)
strlcpy(mui->box_message, message, sizeof(mui->box_message));
}
/* Draw the modal */
static void mui_render_messagebox(mui_handle_t *mui,
video_frame_info_t *video_info,
const char *message, float *body_bg_color, uint32_t font_color)
@@ -518,6 +531,7 @@ end:
string_list_free(list);
}
/* Used for the sublabels */
static unsigned mui_count_lines(const char *str)
{
unsigned c = 0;
@@ -528,6 +542,7 @@ static unsigned mui_count_lines(const char *str)
return lines;
}
/* Compute the line height for each menu entries. */
static void mui_compute_entries_box(mui_handle_t* mui, int width)
{
size_t usable_width = width - (mui->margin * 2);
@@ -547,7 +562,7 @@ static void mui_compute_entries_box(mui_handle_t* mui, int width)
if (menu_entry_get_sublabel(i, sublabel_str, sizeof(sublabel_str)))
{
word_wrap(sublabel_str, sublabel_str, (int)(usable_width / mui->glyph_width2));
word_wrap(sublabel_str, sublabel_str, (int)(usable_width / mui->glyph_width2), false);
lines = mui_count_lines(sublabel_str);
}
@@ -558,6 +573,8 @@ static void mui_compute_entries_box(mui_handle_t* mui, int width)
}
}
/* Called on each frame. We use this callback to implement the touch scroll
with acceleration */
static void mui_render(void *data, bool is_idle)
{
menu_animation_ctx_delta_t delta;
@@ -648,6 +665,7 @@ static void mui_render(void *data, bool is_idle)
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &i);
}
/* Display an entry value on the right of the screen. */
static void mui_render_label_value(mui_handle_t *mui, mui_node_t *node,
int i, int y, unsigned width, unsigned height,
uint64_t index, uint32_t color, bool selected, const char *label,
@@ -697,7 +715,7 @@ static void mui_render_label_value(mui_handle_t *mui, mui_node_t *node,
if (menu_entry_get_sublabel(i, sublabel_str, sizeof(sublabel_str)))
{
word_wrap(sublabel_str, sublabel_str, (int)(usable_width / mui->glyph_width2));
word_wrap(sublabel_str, sublabel_str, (int)(usable_width / mui->glyph_width2), false);
menu_display_draw_text(mui->font2, sublabel_str,
mui->margin,
@@ -898,6 +916,8 @@ static void mui_draw_bg(menu_display_ctx_draw_t *draw,
menu_display_blend_end();
}
/* Main function of the menu driver. Takes care of drawing the header, the tabs,
and the menu list */
static void mui_frame(void *data, video_frame_info_t *video_info)
{
float black_bg[16] = {
@@ -1406,6 +1426,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info)
menu_display_unset_viewport(video_info->width, video_info->height);
}
/* Compute the positions of the widgets */
static void mui_layout(mui_handle_t *mui, bool video_is_threaded)
{
float scale_factor;
@@ -1534,6 +1555,7 @@ static void mui_context_destroy(void *data)
mui_context_bg_destroy(mui);
}
/* Upload textures to the gpu */
static bool mui_load_image(void *userdata, void *data, enum menu_image_type type)
{
mui_handle_t *mui = (mui_handle_t*)userdata;
@@ -1556,6 +1578,7 @@ static bool mui_load_image(void *userdata, void *data, enum menu_image_type type
return true;
}
/* Compute the scroll value depending on the highlighted entry */
static float mui_get_scroll(mui_handle_t *mui)
{
unsigned width, height, half = 0;
@@ -1575,6 +1598,8 @@ static float mui_get_scroll(mui_handle_t *mui)
return ((selection + 2 - half) * mui->line_height);
}
/* The navigation pointer has been updated (for example by pressing up or down
on the keyboard). We use this function to animate the scroll. */
static void mui_navigation_set(void *data, bool scroll)
{
menu_animation_ctx_entry_t entry;
@@ -1595,11 +1620,12 @@ static void mui_navigation_set(void *data, bool scroll)
menu_animation_push(&entry);
}
static void mui_list_set_selection(void *data, file_list_t *list)
static void mui_list_set_selection(void *data, file_list_t *list)
{
mui_navigation_set(data, true);
}
/* The navigation pointer is set back to zero */
static void mui_navigation_clear(void *data, bool pending_push)
{
size_t i = 0;
@@ -1621,6 +1647,7 @@ static void mui_navigation_alphabet(void *data, size_t *unused)
mui_navigation_set(data, true);
}
/* A new list had been pushed. We update the scroll value */
static void mui_populate_entries(
void *data, const char *path,
const char *label, unsigned i)
@@ -1632,6 +1659,7 @@ static void mui_populate_entries(
mui->scroll_y = mui_get_scroll(mui);
}
/* Context reset is called on launch or when a core is launched */
static void mui_context_reset(void *data, bool is_threaded)
{
mui_handle_t *mui = (mui_handle_t*)data;
@@ -1674,6 +1702,7 @@ static int mui_environ(enum menu_environ_cb type, void *data, void *userdata)
return -1;
}
/* Called before we push the new list after clicking on a tab */
static void mui_preswitch_tabs(mui_handle_t *mui, unsigned action)
{
size_t stack_size = 0;
@@ -1712,6 +1741,8 @@ static void mui_preswitch_tabs(mui_handle_t *mui, unsigned action)
}
}
/* This callback is not caching anything. We use it to navigate the tabs
with the keyboard */
static void mui_list_cache(void *data,
enum menu_list_type type, unsigned action)
{
@@ -1759,6 +1790,8 @@ static void mui_list_cache(void *data,
}
}
/* A new list has been pushed. We use this callback to customize a few lists for
this menu driver */
static int mui_list_push(void *data, void *userdata,
menu_displaylist_info_t *info, unsigned type)
{
@@ -1892,6 +1925,7 @@ static int mui_list_push(void *data, void *userdata,
return ret;
}
/* Returns the active tab id */
static size_t mui_list_get_selection(void *data)
{
mui_handle_t *mui = (mui_handle_t*)data;
@@ -1902,6 +1936,8 @@ static size_t mui_list_get_selection(void *data)
return mui->categories.selection_ptr;
}
/* The pointer or the mouse is pressed down. We use this callback to
highlight the entry that has been pressed */
static int mui_pointer_down(void *userdata,
unsigned x, unsigned y,
unsigned ptr, menu_file_list_cbs_t *cbs,
@@ -1946,6 +1982,10 @@ static int mui_pointer_down(void *userdata,
return 0;
}
/* The pointer or the left mouse button has been released.
If we clicked on the header, we perform a cancel action.
If we clicked on the tabs, we switch to a new list.
If we clicked on a menu entry, we call the entry action callback. */
static int mui_pointer_up(void *userdata,
unsigned x, unsigned y,
unsigned ptr, menu_file_list_cbs_t *cbs,
@@ -2010,6 +2050,9 @@ static int mui_pointer_up(void *userdata,
return 0;
}
/* The menu system can insert menu entries on the fly. It is used in the shaders
UI, the wifi UI, the netplay lobby, etc. This function allocates the mui_node_t
for the new entry. */
static void mui_list_insert(void *userdata,
file_list_t *list,
const char *path,
@@ -2044,6 +2087,7 @@ static void mui_list_insert(void *userdata,
file_list_set_userdata(list, i, node);
}
/* Clearing the current menu list */
static void mui_list_clear(file_list_t *list)
{
size_t i;
+18 -8
View File
@@ -613,7 +613,7 @@ static void xmb_draw_icon(
static void xmb_draw_thumbnail(
menu_display_frame_info_t menu_disp_info,
xmb_handle_t *xmb, float *color,
unsigned width, unsigned height,
unsigned width, unsigned height,
float x, float y,
float w, float h, uintptr_t texture)
{
@@ -829,7 +829,7 @@ static void xmb_render_messagebox_internal(
{
const char *msg = list->elems[i].data;
int len = (int)utf8len(msg);
if (len > longest)
{
longest = len;
@@ -1615,6 +1615,7 @@ static void xmb_list_switch(xmb_handle_t *xmb)
int dir = -1;
file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
size_t selection = menu_navigation_get_selection();
settings_t *settings = config_get_ptr();
if (xmb->categories.selection_ptr > xmb->categories.selection_ptr_old)
dir = 1;
@@ -1639,7 +1640,10 @@ static void xmb_list_switch(xmb_handle_t *xmb)
xmb_list_switch_old(xmb, xmb->selection_buf_old,
dir, xmb->selection_ptr_old);
xmb_list_switch_new(xmb, selection_buf, dir, selection);
/* Check if we are to have horizontal animations. */
if (settings->bools.menu_horizontal_animation)
xmb_list_switch_new(xmb, selection_buf, dir, selection);
xmb->categories.active.idx_old = (unsigned)xmb->categories.selection_ptr;
if (!string_is_equal(xmb_thumbnails_ident(),
@@ -2328,7 +2332,7 @@ static void xmb_draw_items(
label_offset = - xmb->margins.label.top;
word_wrap(entry_sublabel, entry.sublabel, 50);
word_wrap(entry_sublabel, entry.sublabel, 50, true);
xmb_draw_text(menu_disp_info, xmb, entry_sublabel,
node->x + xmb->margins.screen.left +
@@ -3800,14 +3804,14 @@ static void xmb_list_deep_copy(const file_list_t *src, file_list_t *dst)
if (src_udata)
{
void *data = calloc(1, sizeof(xmb_node_t));
void *data = malloc(sizeof(xmb_node_t));
memcpy(data, src_udata, sizeof(xmb_node_t));
file_list_set_userdata(dst, i, data);
}
if (src_adata)
{
void *data = calloc(1, sizeof(menu_file_list_cbs_t));
void *data = malloc(sizeof(menu_file_list_cbs_t));
memcpy(data, src_adata, sizeof(menu_file_list_cbs_t));
file_list_set_actiondata(dst, i, data);
}
@@ -3821,12 +3825,18 @@ static void xmb_list_cache(void *data, enum menu_list_type type, unsigned action
file_list_t *menu_stack = menu_entries_get_menu_stack_ptr(0);
file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
size_t selection = menu_navigation_get_selection();
settings_t *settings = config_get_ptr();
if (!xmb)
return;
xmb_list_deep_copy(selection_buf, xmb->selection_buf_old);
xmb_list_deep_copy(menu_stack, xmb->menu_stack_old);
/* Check whether to enable the horizontal animation. */
if (settings->bools.menu_horizontal_animation)
{
xmb_list_deep_copy(selection_buf, xmb->selection_buf_old);
xmb_list_deep_copy(menu_stack, xmb->menu_stack_old);
}
xmb->selection_ptr_old = selection;
list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+59
View File
@@ -32,6 +32,30 @@ static void menu_cbs_init_log(const char *entry_label, const char *bind_label, c
#endif
}
/* This sets up all the callback functions for a menu entry.
*
* OK : When we press the 'OK' button on an entry.
* Cancel : When we press the 'Cancel' button on an entry.
* Scan : When we press the 'Scan' button on an entry.
* Start : When we press the 'Start' button on an entry.
* Select : When we press the 'Select' button on an entry.
* Info : When we press the 'Info' button on an entry.
* Content Switch : ??? (TODO/FIXME - Kivutar should document this)
* Up : when we press 'Up' on the D-pad while this entry is selected.
* Down : when we press 'Down' on the D-pad while this entry is selected.
* Left : when we press 'Left' on the D-pad while this entry is selected.
* Right : when we press 'Right' on the D-pad while this entry is selected.
* Deferred push : When pressing an entry results in spawning a new list, it waits until the next
* frame to push this onto the stack. This function callback will then be invoked.
* Refresh : What happens when the screen has to be refreshed. Does an entry have internal state
* that needs to be rebuild?
* Get value: Each entry has associated 'text', which we call the value. This function callback
* lets us render that text.
* Get title: Each entry can have a custom 'title'.
* Label: Each entry has a label name. This function callback lets us render that label text.
* Sublabel: each entry has a sublabel, which consists of one or more lines of additional information.
* This function callback lets us render that text.
*/
void menu_cbs_init(void *data,
menu_file_list_cbs_t *cbs,
const char *path, const char *label,
@@ -66,70 +90,104 @@ void menu_cbs_init(void *data,
RARCH_LOG("\t\t\tenum_idx %d [%s]\n", cbs->enum_idx, msg_hash_to_str(cbs->enum_idx));
#endif
/* It will try to find a corresponding callback function inside
* menu_cbs_ok.c, then map this callback to the entry. */
menu_cbs_init_bind_ok(cbs, path, label, type, idx, label_hash, menu_label_hash);
menu_cbs_init_log(repr_label, "OK", cbs->action_ok_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_cancel.c, then map this callback to the entry. */
menu_cbs_init_bind_cancel(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "CANCEL", cbs->action_cancel_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_scan.c, then map this callback to the entry. */
menu_cbs_init_bind_scan(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "SCAN", cbs->action_scan_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_start.c, then map this callback to the entry. */
menu_cbs_init_bind_start(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "START", cbs->action_start_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_select.c, then map this callback to the entry. */
menu_cbs_init_bind_select(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "SELECT", cbs->action_select_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_info.c, then map this callback to the entry. */
menu_cbs_init_bind_info(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "INFO", cbs->action_info_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_bind_content_list_switch.c, then map this callback to the entry. */
menu_cbs_init_bind_content_list_switch(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "CONTENT SWITCH", cbs->action_content_list_switch_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_up.c, then map this callback to the entry. */
menu_cbs_init_bind_up(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "UP", cbs->action_up_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_down.c, then map this callback to the entry. */
menu_cbs_init_bind_down(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "DOWN", cbs->action_down_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_left.c, then map this callback to the entry. */
menu_cbs_init_bind_left(cbs, path, label, type, idx, menu_label, label_hash);
menu_cbs_init_log(repr_label, "LEFT", cbs->action_left_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_right.c, then map this callback to the entry. */
menu_cbs_init_bind_right(cbs, path, label, type, idx, menu_label, label_hash);
menu_cbs_init_log(repr_label, "RIGHT", cbs->action_right_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_deferred_push.c, then map this callback to the entry. */
menu_cbs_init_bind_deferred_push(cbs, path, label, type, idx, label_hash);
menu_cbs_init_log(repr_label, "DEFERRED PUSH", cbs->action_deferred_push_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_refresh.c, then map this callback to the entry. */
menu_cbs_init_bind_refresh(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "REFRESH", cbs->action_refresh_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_get_string_representation.c, then map this callback to the entry. */
menu_cbs_init_bind_get_string_representation(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "GET VALUE", cbs->action_get_value_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_title.c, then map this callback to the entry. */
menu_cbs_init_bind_title(cbs, path, label, type, idx, label_hash);
menu_cbs_init_log(repr_label, "GET TITLE", cbs->action_get_title_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_label.c, then map this callback to the entry. */
menu_cbs_init_bind_label(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "LABEL", cbs->action_label_ident);
/* It will try to find a corresponding callback function inside
* menu_cbs_sublabel.c, then map this callback to the entry. */
menu_cbs_init_bind_sublabel(cbs, path, label, type, idx);
menu_cbs_init_log(repr_label, "SUBLABEL", cbs->action_sublabel_ident);
@@ -144,6 +202,7 @@ void menu_cbs_init(void *data,
menu_driver_ctl(RARCH_MENU_CTL_BIND_INIT, &bind_info);
}
/* Pretty much a stub function. TODO/FIXME - Might as well remove this. */
int menu_cbs_exit(void)
{
return -1;
+25
View File
@@ -45,6 +45,7 @@ enum
ACTION_OK_DL_SHADER_PRESET,
ACTION_OK_DL_GENERIC,
ACTION_OK_DL_PUSH_DEFAULT,
ACTION_OK_DL_FILE_BROWSER_SELECT_FILE,
ACTION_OK_DL_FILE_BROWSER_SELECT_DIR,
ACTION_OK_DL_INPUT_SETTINGS_LIST,
ACTION_OK_DL_DRIVER_SETTINGS_LIST,
@@ -221,6 +222,30 @@ int action_scan_file(const char *path,
int bind_right_generic(unsigned type, const char *label,
bool wraparound);
/* This sets up all the callback functions for a menu entry.
*
* OK : When we press the 'OK' button on an entry.
* Cancel : When we press the 'Cancel' button on an entry.
* Scan : When we press the 'Scan' button on an entry.
* Start : When we press the 'Start' button on an entry.
* Select : When we press the 'Select' button on an entry.
* Info : When we press the 'Info' button on an entry.
* Content Switch : ??? (TODO/FIXME - Kivutar should document this)
* Up : when we press 'Up' on the D-pad while this entry is selected.
* Down : when we press 'Down' on the D-pad while this entry is selected.
* Left : when we press 'Left' on the D-pad while this entry is selected.
* Right : when we press 'Right' on the D-pad while this entry is selected.
* Deferred push : When pressing an entry results in spawning a new list, it waits until the next
* frame to push this onto the stack. This function callback will then be invoked.
* Refresh : What happens when the screen has to be refreshed. Does an entry have internal state
* that needs to be rebuild?
* Get value: Each entry has associated 'text', which we call the value. This function callback
* lets us render that text.
* Get title: Each entry can have a custom 'title'.
* Label: Each entry has a label name. This function callback lets us render that label text.
* Sublabel: each entry has a sublabel, which consists of one or more lines of additional information.
* This function callback lets us render that text.
*/
void menu_cbs_init(void *data,
menu_file_list_cbs_t *cbs,
const char *path, const char *label,
+60 -8
View File
@@ -1,6 +1,7 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2011-2017 - Daniel De Matteis
* Copyright (C) 2014-2017 - Jean-André Santoni
* Copyright (C) 2015-2017 - Andrés Suárez
* Copyright (C) 2016-2017 - Brad Parker
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
@@ -297,7 +298,7 @@ static void print_buf_lines(file_list_t *list, char *buf,
sizeof(core_path));
if (
path_file_exists(core_path)
path_file_exists(core_path)
&& core_info_get_display_name(
core_path, display_name, sizeof(display_name)))
menu_entries_set_alt_at_offset(list, j, display_name);
@@ -397,6 +398,12 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info)
msg_hash_to_str(MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE),
MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE,
0, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_DELETE),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_DELETE),
MENU_ENUM_LABEL_CORE_DELETE,
MENU_SETTING_ACTION_CORE_DELETE, 0, 0);
return 0;
}
@@ -558,6 +565,12 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info)
}
}
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_DELETE),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_DELETE),
MENU_ENUM_LABEL_CORE_DELETE,
MENU_SETTING_ACTION_CORE_DELETE, 0, 0);
return 0;
}
@@ -1843,7 +1856,7 @@ static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info)
strlcpy(thumbnail_content, db_info_entry->name, sizeof(thumbnail_content));
if (!string_is_empty(thumbnail_content))
menu_driver_set_thumbnail_content(thumbnail_content, sizeof(thumbnail_content));
menu_driver_set_thumbnail_content(thumbnail_content, sizeof(thumbnail_content));
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, NULL);
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE, NULL);
@@ -2771,12 +2784,14 @@ static int menu_displaylist_parse_load_content_settings(
bool show_advanced_settings = settings->bools.menu_show_advanced_settings;
#endif
rarch_system_info_t *system = runloop_get_system_info();
#if 0
const struct retro_subsystem_info* subsystem = system ? system->subsystem.data : NULL;
if (subsystem)
{
int p;
unsigned p;
for (p = 0; p < system->subsystem.size; p++, subsystem++)
{
char s[PATH_MAX_LENGTH];
@@ -2962,7 +2977,7 @@ static int menu_displaylist_parse_horizontal_content_actions(
else
{
const char *ext = NULL;
if (!string_is_empty(entry_path))
ext = path_get_extension(entry_path);
@@ -2980,8 +2995,8 @@ static int menu_displaylist_parse_horizontal_content_actions(
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RUN),
msg_hash_to_str(MENU_ENUM_LABEL_RUN),
MENU_ENUM_LABEL_RUN, FILE_TYPE_PLAYLIST_ENTRY, 0, idx);
if (settings->bools.playlist_entry_remove)
if (settings->bools.playlist_entry_remove)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY),
msg_hash_to_str(MENU_ENUM_LABEL_DELETE_ENTRY),
@@ -3358,6 +3373,24 @@ static int menu_displaylist_parse_options_remappings(
MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME,
MENU_SETTING_ACTION, 0, 0);
if (rarch_ctl(RARCH_CTL_IS_REMAPS_CORE_ACTIVE, NULL))
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE),
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE,
MENU_SETTING_ACTION, 0, 0);
}
if (rarch_ctl(RARCH_CTL_IS_REMAPS_GAME_ACTIVE, NULL))
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_GAME),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME),
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME,
MENU_SETTING_ACTION, 0, 0);
}
system = runloop_get_system_info();
if (system)
@@ -4022,7 +4055,9 @@ static void wifi_scan_callback(void *task_data,
bool menu_displaylist_process(menu_displaylist_info_t *info)
{
size_t idx = 0;
#if defined(HAVE_NETWORKING) && !defined(HAVE_LAKKA)
settings_t *settings = config_get_ptr();
#endif
if (info->need_navigation_clear)
{
@@ -4050,7 +4085,7 @@ bool menu_displaylist_process(menu_displaylist_info_t *info)
MENU_SETTING_ACTION, 0, 0);
}
#endif
if (info->push_builtin_cores)
{
#if defined(HAVE_VIDEO_PROCESSOR)
@@ -4764,7 +4799,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
PARSE_ONLY_UINT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PLAYLIST_ENTRY_REMOVE,
PARSE_ONLY_BOOL, false);
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_playlist_associations(info);
info->need_push = true;
@@ -4866,6 +4901,18 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVESTATE_THUMBNAIL_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVEFILES_IN_CONTENT_DIR_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVESTATES_IN_CONTENT_DIR_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SYSTEMFILES_IN_CONTENT_DIR_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SCREENSHOTS_IN_CONTENT_DIR_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
@@ -4993,12 +5040,14 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
case DISPLAYLIST_MENU_VIEWS_SETTINGS_LIST:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
#if defined(HAVE_NETWORKING) && !defined(HAVE_LAKKA)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_SHOW_CORE_UPDATER,
PARSE_ONLY_BOOL, false);
#endif
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SHOW_SETTINGS,
PARSE_ONLY_BOOL, false);
@@ -5065,6 +5114,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_LINEAR_FILTER,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_HORIZONTAL_ANIMATION,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND,
PARSE_ONLY_BOOL, false);
+11
View File
@@ -166,13 +166,24 @@ enum menu_displaylist_ctl_state
typedef struct menu_displaylist_info
{
/* should the displaylist be sorted by alphabet? */
bool need_sort;
bool need_refresh;
bool need_entries_refresh;
bool need_push;
/* should we clear the displaylist before we push
* entries onto it? */
bool need_clear;
bool push_builtin_cores;
/* Should a 'download core' entry be pushed onto the list?
* This will be set to true in case there are no currently
* installed cores. */
bool download_core;
/* does the navigation index need to be cleared to 0 (first entry) ? */
bool need_navigation_clear;
file_list_t *list;
file_list_t *menu_list;
+98 -1
View File
@@ -60,6 +60,7 @@
#define PARTICLES_COUNT 100
/* Menu drivers */
static const menu_ctx_driver_t *menu_ctx_drivers[] = {
#if defined(HAVE_XUI)
&menu_ctx_xui,
@@ -83,6 +84,7 @@ static const menu_ctx_driver_t *menu_ctx_drivers[] = {
NULL
};
/* Menu display drivers */
static menu_display_ctx_driver_t *menu_display_ctx_drivers[] = {
#ifdef HAVE_D3D
&menu_display_ctx_d3d,
@@ -115,7 +117,6 @@ static menu_display_ctx_driver_t *menu_display_ctx_drivers[] = {
NULL,
};
uintptr_t menu_display_white_texture;
static video_coord_array_t menu_disp_ca;
@@ -123,10 +124,14 @@ static video_coord_array_t menu_disp_ca;
static enum
menu_toggle_reason menu_display_toggle_reason = MENU_TOGGLE_REASON_NONE;
/* Width, height and pitch of the menu framebuffer */
static unsigned menu_display_framebuf_width = 0;
static unsigned menu_display_framebuf_height = 0;
static size_t menu_display_framebuf_pitch = 0;
/* Height of the menu display header */
static unsigned menu_display_header_height = 0;
static bool menu_display_has_windowed = false;
static bool menu_display_msg_force = false;
static bool menu_display_font_alloc_framebuf = false;
@@ -134,15 +139,36 @@ static bool menu_display_framebuf_dirty = false;
static const uint8_t *menu_display_font_framebuf = NULL;
static menu_display_ctx_driver_t *menu_disp = NULL;
/* when enabled, on next iteration the 'Quick Menu' list will
* be pushed onto the stack */
static bool menu_driver_pending_quick_menu = false;
static bool menu_driver_prevent_populate = false;
/* Is the menu driver still running? */
static bool menu_driver_alive = false;
/* A menu toggle has been requested; if the menu was running,
* it will be closed; if the menu was not running, it will be opened */
static bool menu_driver_toggled = false;
/* The menu driver owns the userdata */
static bool menu_driver_data_own = false;
/* The user has requested that the menu be shut down. This will
* be enacted upon the next menu iteration */
static bool menu_driver_pending_quit = false;
/* The user has requested that RetroArch be shut down. This will
* be enacted upon the next menu iteration */
static bool menu_driver_pending_shutdown = false;
/* Are we binding a button inside the menu? */
static bool menu_driver_is_binding = false;
/* The currently active playlist that we are using inside the menu */
static playlist_t *menu_driver_playlist = NULL;
static menu_handle_t *menu_driver_data = NULL;
static const menu_ctx_driver_t *menu_driver_ctx = NULL;
static void *menu_userdata = NULL;
@@ -164,6 +190,8 @@ void menu_display_toggle_set_reason(enum menu_toggle_reason reason)
menu_display_toggle_reason = reason;
}
/* Check if the current menu driver is compatible
* with your video driver. */
static bool menu_display_check_compatibility(
enum menu_display_driver_type type,
bool video_is_threaded)
@@ -220,6 +248,9 @@ static bool menu_display_check_compatibility(
return false;
}
/* Display the date and time - time_mode will influence how
* the time representation will look like.
* */
void menu_display_timedate(menu_display_ctx_datetime_t *datetime)
{
time_t time_;
@@ -254,23 +285,29 @@ void menu_display_timedate(menu_display_ctx_datetime_t *datetime)
}
}
/* Begin blending operation */
void menu_display_blend_begin(void)
{
if (menu_disp && menu_disp->blend_begin)
menu_disp->blend_begin();
}
/* End blending operation */
void menu_display_blend_end(void)
{
if (menu_disp && menu_disp->blend_end)
menu_disp->blend_end();
}
/* Teardown; deinitializes and frees all
* fonts associated to the menu driver */
void menu_display_font_free(font_data_t *font)
{
font_driver_free(font);
}
/* Setup: Initializes the font associated
* to the menu driver */
static font_data_t *menu_display_font_main_init(
menu_display_ctx_font_t *font,
bool is_threaded)
@@ -304,6 +341,8 @@ font_data_t *menu_display_font(enum application_special_type type, float font_si
return menu_display_font_main_init(&font_info, is_threaded);
}
/* Reset the menu's coordinate array vertices.
* NOTE: Not every menu driver uses this. */
void menu_display_coords_array_reset(void)
{
menu_disp_ca.coords.vertices = 0;
@@ -337,6 +376,7 @@ static bool menu_display_libretro_running(
return false;
}
/* Display the libretro core's framebuffer onscreen. */
bool menu_display_libretro(bool is_idle, bool rarch_is_inited, bool rarch_is_dummy_core)
{
video_driver_set_texture_enable(true, false);
@@ -357,6 +397,7 @@ bool menu_display_libretro(bool is_idle, bool rarch_is_inited, bool rarch_is_dum
return video_driver_cached_frame();
}
/* Get the menu framebuffer's size dimensions. */
void menu_display_get_fb_size(unsigned *fb_width,
unsigned *fb_height, size_t *fb_pitch)
{
@@ -365,11 +406,13 @@ void menu_display_get_fb_size(unsigned *fb_width,
*fb_pitch = menu_display_framebuf_pitch;
}
/* Set the menu framebuffer's width. */
void menu_display_set_width(unsigned width)
{
menu_display_framebuf_width = width;
}
/* Set the menu framebuffer's height. */
void menu_display_set_height(unsigned height)
{
menu_display_framebuf_height = height;
@@ -415,6 +458,14 @@ void menu_display_set_font_data_init(bool state)
menu_display_font_alloc_framebuf = state;
}
/* Returns true if an animation is still active or
* when the menu framebuffer still is dirty and
* therefore it still needs to be rendered onscreen.
*
* This function can be used for optimization purposes
* so that we don't have to render the menu graphics per-frame
* unless a change has happened.
* */
bool menu_display_get_update_pending(void)
{
if (menu_animation_is_active() || menu_display_framebuf_dirty)
@@ -432,21 +483,29 @@ void menu_display_unset_viewport(unsigned width, unsigned height)
video_driver_set_viewport(width, height, false, true);
}
/* Checks if the menu framebuffer has its 'dirty flag' set. This
* means that the current contents of the framebuffer has changed
* and that it has to be rendered to the screen. */
bool menu_display_get_framebuffer_dirty_flag(void)
{
return menu_display_framebuf_dirty;
}
/* Set the menu framebuffer's 'dirty flag'. */
void menu_display_set_framebuffer_dirty_flag(void)
{
menu_display_framebuf_dirty = true;
}
/* Unset the menu framebufer's 'dirty flag'. */
void menu_display_unset_framebuffer_dirty_flag(void)
{
menu_display_framebuf_dirty = false;
}
/* Get the preferred DPI at which to render the menu.
* NOTE: Only MaterialUI menu driver so far uses this, neither
* RGUI or XMB use this. */
float menu_display_get_dpi(void)
{
gfx_ctx_metrics_t metrics;
@@ -988,6 +1047,9 @@ void menu_display_handle_savestate_thumbnail_upload(void *task_data,
free(user_data);
}
/* Function that gets called when we want to load in a
* new menu wallpaper.
*/
void menu_display_handle_wallpaper_upload(void *task_data,
void *user_data, const char *err)
{
@@ -1019,6 +1081,9 @@ void menu_display_allocate_white_texture(void)
TEXTURE_FILTER_NEAREST, &menu_display_white_texture);
}
/*
* Draw a hardware cursor on top of the screen for the mouse.
*/
void menu_display_draw_cursor(
float *color, float cursor_size, uintptr_t texture,
float x, float y, unsigned width, unsigned height)
@@ -1177,6 +1242,8 @@ void menu_display_snow(int width, int height)
}
}
/* Draw text on top of the screen.
*/
void menu_display_draw_text(
const font_data_t *font, const char *text,
float x, float y, int width, int height,
@@ -1293,6 +1360,10 @@ const char *config_get_menu_driver_options(void)
}
#ifdef HAVE_COMPRESSION
/* This function gets called at first startup on Android/iOS
* when we need to extract the APK contents/zip file. This
* file contains assets which then get extracted to the
* user's asset directories. */
static void bundle_decompressed(void *task_data,
void *user_data, const char *err)
{
@@ -1376,6 +1447,11 @@ static bool menu_init(menu_handle_t *menu_data)
return true;
}
/* This callback gets triggered by the keyboard whenever
* we press or release a keyboard key. When a keyboard
* key is being pressed down, 'down' will be true. If it
* is being released, 'down' will be false.
*/
static void menu_input_key_event(bool down, unsigned keycode,
uint32_t character, uint16_t mod)
{
@@ -1391,6 +1467,10 @@ static void menu_input_key_event(bool down, unsigned keycode,
menu_event_kb_set(down, (enum retro_key)keycode);
}
/* Gets called when we want to toggle the menu.
* If the menu is already running, it will be turned off.
* If the menu is off, then the menu will be started.
*/
static void menu_driver_toggle(bool on)
{
retro_keyboard_event_t *key_event = NULL;
@@ -1516,11 +1596,15 @@ bool menu_driver_render(bool is_idle, bool rarch_is_inited,
return true;
}
/* Checks if the menu is still running */
bool menu_driver_is_alive(void)
{
return menu_driver_alive;
}
/* Checks if the menu framebuffer is set.
* This would usually only return true
* for framebuffer-based menu drivers, like RGUI. */
bool menu_driver_is_texture_set(void)
{
if (menu_driver_ctx)
@@ -1528,8 +1612,13 @@ bool menu_driver_is_texture_set(void)
return false;
}
/* Iterate the menu driver for one frame. */
bool menu_driver_iterate(menu_ctx_iterate_t *iterate)
{
/* If the user had requested that the Quick Menu
* be spawned during the previous frame, do this now
* and exit the function to go to the next frame.
*/
if (menu_driver_pending_quick_menu)
{
menu_driver_pending_quick_menu = false;
@@ -1548,12 +1637,18 @@ bool menu_driver_iterate(menu_ctx_iterate_t *iterate)
return true;
}
/* If the user had requested that the menu
* be shutdown during the previous frame, do
* this now. */
if (menu_driver_pending_quit)
{
menu_driver_pending_quit = false;
return false;
}
/* if the user had requested that RetroArch
* be shutdown during the previous frame, do
* this now. */
if (menu_driver_pending_shutdown)
{
menu_driver_pending_shutdown = false;
@@ -1572,6 +1667,7 @@ bool menu_driver_iterate(menu_ctx_iterate_t *iterate)
return true;
}
/* Clear all the menu lists. */
bool menu_driver_list_clear(void *data)
{
file_list_t *list = (file_list_t*)data;
@@ -1678,6 +1774,7 @@ void menu_driver_set_thumbnail_content(char *s, size_t len)
menu_driver_ctx->set_thumbnail_content(menu_userdata, s, len);
}
/* Teardown function for the menu driver. */
void menu_driver_destroy(void)
{
menu_driver_pending_quick_menu = false;
+39
View File
@@ -161,6 +161,7 @@ enum menu_settings_type
MENU_SETTING_ACTION_SCREENSHOT,
MENU_SETTING_ACTION_DELETE_ENTRY,
MENU_SETTING_ACTION_RESET,
MENU_SETTING_ACTION_CORE_DELETE,
MENU_SETTING_STRING_OPTIONS,
MENU_SETTING_GROUP,
MENU_SETTING_SUBGROUP,
@@ -303,16 +304,26 @@ typedef struct menu_display_frame_info
typedef struct menu_display_ctx_driver
{
/* Draw graphics to the screen. */
void (*draw)(void *data);
/* Draw one of the menu pipeline shaders. */
void (*draw_pipeline)(void *data);
void (*viewport)(void *data);
/* Start blending operation. */
void (*blend_begin)(void);
/* Finish blending operation. */
void (*blend_end)(void);
/* Set the clear color back to its default values. */
void (*restore_clear_color)(void);
/* Set the color to be used when clearing the screen */
void (*clear_color)(menu_display_ctx_clearcolor_t *clearcolor);
/* Get the default Model-View-Projection matrix */
void *(*get_default_mvp)(void);
/* Get the default vertices matrix */
const float *(*get_default_vertices)(void);
/* Get the default texture coordinates matrix */
const float *(*get_default_tex_coords)(void);
/* Initialize the first compatible font driver for this menu driver. */
bool (*font_init_first)(
void **font_handle, void *video_data,
const char *font_path, float font_size,
@@ -324,16 +335,22 @@ typedef struct menu_display_ctx_driver
typedef struct
{
/* Scratchpad variables. These are used for instance
* by the filebrowser when having to store intermediary
* paths (subdirs/previous dirs/current dir/path, etc).
*/
char deferred_path[PATH_MAX_LENGTH];
char scratch_buf[PATH_MAX_LENGTH];
char scratch2_buf[PATH_MAX_LENGTH];
uint64_t state;
struct
{
char msg[1024];
} menu_state;
/* path to the currently loaded database playlist file. */
char db_playlist_file[PATH_MAX_LENGTH];
} menu_handle_t;
@@ -390,26 +407,45 @@ typedef struct menu_display_ctx_font
typedef struct menu_ctx_driver
{
/* Set a framebuffer texture. This is used for instance by RGUI. */
void (*set_texture)(void);
/* Render a messagebox to the screen. */
void (*render_messagebox)(void *data, const char *msg);
int (*iterate)(void *data, void *userdata, enum menu_action action);
void (*render)(void *data, bool is_idle);
void (*frame)(void *data, video_frame_info_t *video_info);
/* Initializes the menu driver. (setup) */
void* (*init)(void**, bool);
/* Frees the menu driver. (teardown) */
void (*free)(void*);
/* This will be invoked when we are running a hardware context
* and we have just flushed the state. For instance - we have
* just toggled fullscreen, the GL driver did a teardown/setup -
* we now need to rebuild all of our textures and state for the
* menu driver. */
void (*context_reset)(void *data, bool video_is_threaded);
/* This will be invoked when we are running a hardware context
* and the context in question wants to tear itself down. All
* textures and related state on the menu driver will also
* be freed up then. */
void (*context_destroy)(void *data);
void (*populate_entries)(void *data,
const char *path, const char *label,
unsigned k);
void (*toggle)(void *userdata, bool);
/* This will clear the navigation position. */
void (*navigation_clear)(void *, bool);
/* This will decrement the navigation position by one. */
void (*navigation_decrement)(void *data);
/* This will increment the navigation position by one. */
void (*navigation_increment)(void *data);
void (*navigation_set)(void *data, bool);
void (*navigation_set_last)(void *data);
/* This will descend the navigation position by one alphabet letter. */
void (*navigation_descend_alphabet)(void *, size_t *);
/* This will ascend the navigation position by one alphabet letter. */
void (*navigation_ascend_alphabet)(void *, size_t *);
/* Initializes a new menu list. */
bool (*lists_init)(void*);
void (*list_insert)(void *userdata,
file_list_t *list, const char *, const char *, const char *, size_t);
@@ -425,6 +461,7 @@ typedef struct menu_ctx_driver
void (*list_set_selection)(void *data, file_list_t *list);
int (*bind_init)(menu_file_list_cbs_t *cbs,
const char *path, const char *label, unsigned type, size_t idx);
/* Load an image for use by the menu driver */
bool (*load_image)(void *userdata, void *data, enum menu_image_type type);
const char *ident;
int (*environ_cb)(enum menu_environ_cb type, void *data, void *userdata);
@@ -558,6 +595,8 @@ void menu_driver_set_binding_state(bool on);
void menu_driver_frame(video_frame_info_t *video_info);
/* Is a background texture set for the current menu driver? Should
* return true for RGUI, for instance. */
bool menu_driver_is_texture_set(void);
bool menu_driver_is_alive(void);
+31
View File
@@ -38,6 +38,10 @@
static unsigned char menu_keyboard_key_state[RETROK_LAST] = {0};
/* This function gets called for handling pointer events.
*
* Pointer events are touchscreen events that are spawned
* by touchpad/touchscreen. */
static int menu_event_pointer(unsigned *action)
{
rarch_joypad_info_t joypad_info;
@@ -83,16 +87,24 @@ static int menu_event_pointer(unsigned *action)
return 0;
}
/* Check if a specific keyboard key has been pressed. */
unsigned char menu_event_kb_is_set(enum retro_key key)
{
return menu_keyboard_key_state[key];
}
/* Set a specific keyboard key latch. */
static void menu_event_kb_set_internal(unsigned idx, unsigned char key)
{
menu_keyboard_key_state[idx] = key;
}
/* Set a specific keyboard key.
*
* 'down' sets the latch (true would
* mean the key is being pressed down, while 'false' would mean that
* the key has been released).
**/
void menu_event_kb_set(bool down, enum retro_key key)
{
if (key == RETROK_UNKNOWN)
@@ -106,6 +118,25 @@ void menu_event_kb_set(bool down, enum retro_key key)
menu_event_kb_set_internal(key, ((menu_event_kb_is_set(key) & 1) << 1) | down);
}
/*
* This function gets called in order to process all input events
* for the current frame.
*
* Sends input code to menu for one frame.
*
* It uses as input the local variables' input' and 'trigger_input'.
*
* Mouse and touch input events get processed inside this function.
*
* NOTE: 'input' and 'trigger_input' is sourced from the keyboard and/or
* the gamepad. It does not contain input state derived from the mouse
* and/or touch - this gets dealt with separately within this function.
*
* TODO/FIXME - maybe needs to be overhauled so we can send multiple
* events per frame if we want to, and we shouldn't send the
* entire button state either but do a separate event per button
* state.
*/
unsigned menu_event(uint64_t input, uint64_t trigger_input)
{
menu_animation_ctx_delta_t delta;
+21 -2
View File
@@ -25,17 +25,36 @@
RETRO_BEGIN_DECLS
/* Send input code to menu for one frame.
/*
* This function gets called in order to process all input events
* for the current frame.
*
* TODO/FIXME - needs to be overhauled so we can send multiple
* Sends input code to menu for one frame.
*
* It uses as input the local variables' input' and 'trigger_input'.
*
* Mouse and touch input events get processed inside this function.
*
* NOTE: 'input' and 'trigger_input' is sourced from the keyboard and/or
* the gamepad. It does not contain input state derived from the mouse
* and/or touch - this gets dealt with separately within this function.
*
* TODO/FIXME - maybe needs to be overhauled so we can send multiple
* events per frame if we want to, and we shouldn't send the
* entire button state either but do a separate event per button
* state.
*/
unsigned menu_event(uint64_t input, uint64_t trigger_state);
/* Set a specific keyboard key.
*
* 'down' sets the latch (true would
* mean the key is being pressed down, while 'false' would mean that
* the key has been released).
**/
void menu_event_kb_set(bool down, enum retro_key key);
/* Check if a specific keyboard key has been pressed. */
unsigned char menu_event_kb_is_set(enum retro_key key);
RETRO_END_DECLS
+2 -2
View File
@@ -443,7 +443,7 @@ static int menu_input_pointer_post_iterate(
menu_input->pointer.counter++;
/*if (menu_input->pointer.counter == 1 &&
if (menu_input->pointer.counter == 1 &&
!menu_input_ctl(MENU_INPUT_CTL_IS_POINTER_DRAGGED, NULL))
{
menu_ctx_pointer_t point;
@@ -456,7 +456,7 @@ static int menu_input_pointer_post_iterate(
point.action = action;
menu_driver_ctl(RARCH_MENU_CTL_POINTER_DOWN, &point);
}*/
}
if (!pointer_oldpressed[0])
{
+94 -49
View File
@@ -140,10 +140,10 @@ static void setting_get_string_representation_uint_custom_viewport_width(void *d
rarch_setting_t *setting = (rarch_setting_t*)data;
if (!setting)
return;
av_info = video_viewport_get_system_av_info();
geom = (struct retro_game_geometry*)&av_info->geometry;
if (*setting->value.target.unsigned_integer%geom->base_width == 0)
snprintf(s, len, "%u (%ux)",
*setting->value.target.unsigned_integer,
@@ -161,10 +161,10 @@ static void setting_get_string_representation_uint_custom_viewport_height(void *
rarch_setting_t *setting = (rarch_setting_t*)data;
if (!setting)
return;
av_info = video_viewport_get_system_av_info();
geom = (struct retro_game_geometry*)&av_info->geometry;
if (*setting->value.target.unsigned_integer%geom->base_height == 0)
snprintf(s, len, "%u (%ux)",
*setting->value.target.unsigned_integer,
@@ -764,7 +764,7 @@ int menu_action_handle_setting(rarch_setting_t *setting,
return -1;
}
static rarch_setting_t *menu_setting_find_internal(rarch_setting_t *setting,
static rarch_setting_t *menu_setting_find_internal(rarch_setting_t *setting,
const char *label)
{
uint32_t needle = msg_hash_calculate(label);
@@ -794,7 +794,7 @@ static rarch_setting_t *menu_setting_find_internal(rarch_setting_t *setting,
return NULL;
}
static rarch_setting_t *menu_setting_find_internal_enum(rarch_setting_t *setting,
static rarch_setting_t *menu_setting_find_internal_enum(rarch_setting_t *setting,
enum msg_hash_enums enum_idx)
{
rarch_setting_t **list = &setting;
@@ -1051,7 +1051,7 @@ static int setting_action_start_libretro_device_type(void *data)
if (system)
{
/* Only push RETRO_DEVICE_ANALOG as default if we use an
/* Only push RETRO_DEVICE_ANALOG as default if we use an
* older core which doesn't use SET_CONTROLLER_INFO. */
if (!system->ports.size)
devices[types++] = RETRO_DEVICE_ANALOG;
@@ -1155,7 +1155,7 @@ static int setting_action_left_libretro_device_type(
if (system)
{
/* Only push RETRO_DEVICE_ANALOG as default if we use an
/* Only push RETRO_DEVICE_ANALOG as default if we use an
* older core which doesn't use SET_CONTROLLER_INFO. */
if (!system->ports.size)
devices[types++] = RETRO_DEVICE_ANALOG;
@@ -1220,7 +1220,7 @@ static int setting_action_right_libretro_device_type(
if (system)
{
/* Only push RETRO_DEVICE_ANALOG as default if we use an
/* Only push RETRO_DEVICE_ANALOG as default if we use an
* older core which doesn't use SET_CONTROLLER_INFO. */
if (!system->ports.size)
devices[types++] = RETRO_DEVICE_ANALOG;
@@ -1391,7 +1391,7 @@ static int setting_action_ok_bind_defaults(void *data, bool wraparound)
return -1;
target = &input_config_binds[setting->index_offset][0];
def_binds = (setting->index_offset) ?
def_binds = (setting->index_offset) ?
retro_keybinds_rest : retro_keybinds_1;
lim.min = MENU_SETTINGS_BIND_BEGIN;
@@ -1506,7 +1506,7 @@ static void get_string_representation_bind_device(void * data, char *s,
* Get associated label of a setting.
**/
void menu_setting_get_label(void *data, char *s,
size_t len, unsigned *w, unsigned type,
size_t len, unsigned *w, unsigned type,
const char *menu_label, const char *label, unsigned idx)
{
rarch_setting_t *setting = NULL;
@@ -1636,7 +1636,7 @@ void general_write_handler(void *data)
file_list_t *menu_stack = menu_entries_get_menu_stack_ptr(0);
info.list = menu_stack;
info.type = 0;
info.type = 0;
info.directory_ptr = 0;
strlcpy(info.label,
msg_hash_to_str(MENU_ENUM_LABEL_HELP), sizeof(info.label));
@@ -1697,14 +1697,14 @@ void general_write_handler(void *data)
settings->uints.input_joypad_map[4] = *setting->value.target.integer;
break;
case MENU_ENUM_LABEL_LOG_VERBOSITY:
if (setting
&& setting->value.target.boolean
if (setting
&& setting->value.target.boolean
&& *setting->value.target.boolean)
verbosity_enable();
else
verbosity_disable();
if (setting
if (setting
&& setting->value.target.boolean
&& *setting->value.target.boolean)
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_VERBOSITY, NULL);
@@ -1751,7 +1751,7 @@ void general_write_handler(void *data)
{
#if defined(__CELLOS_LV2__) && (CELL_SDK_VERSION > 0x340000)
cellSysutilEnableBgmPlayback();
#endif
#endif
}
else
{
@@ -2031,7 +2031,7 @@ static bool setting_append_list_input_player_options(
(*list)[list_info->index - 1].action_right = &setting_action_right_libretro_device_type;
(*list)[list_info->index - 1].action_select = &setting_action_right_libretro_device_type;
(*list)[list_info->index - 1].action_start = &setting_action_start_libretro_device_type;
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_libretro_device;
menu_settings_list_current_add_enum_idx(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE + user));
@@ -2052,7 +2052,7 @@ static bool setting_append_list_input_player_options(
(*list)[list_info->index - 1].action_right = &setting_action_right_analog_dpad_mode;
(*list)[list_info->index - 1].action_select = &setting_action_right_analog_dpad_mode;
(*list)[list_info->index - 1].action_start = &setting_action_start_analog_dpad_mode;
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_analog_dpad_mode;
menu_settings_list_current_add_enum_idx(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE + user));
@@ -2146,7 +2146,7 @@ static bool setting_append_list_input_player_options(
)
{
if (system->input_desc_btn[user][i])
strlcat(label,
strlcat(label,
system->input_desc_btn[user][i],
sizeof(label));
else
@@ -3016,7 +3016,7 @@ static bool setting_append_list(
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, 0, 3, 1.0, true, true);
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_libretro_log_level;
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
@@ -3048,7 +3048,7 @@ static bool setting_append_list(
case SETTINGS_LIST_SAVING:
{
unsigned i;
struct bool_entry bool_entries[7];
struct bool_entry bool_entries[11];
START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS), parent_group);
parent_group = msg_hash_to_str(MENU_ENUM_LABEL_SAVING_SETTINGS);
@@ -3098,6 +3098,30 @@ static bool setting_append_list(
bool_entries[6].default_value = savestate_thumbnail_enable;
bool_entries[6].flags = SD_FLAG_ADVANCED;
bool_entries[7].target = &settings->bools.savefiles_in_content_dir;
bool_entries[7].name_enum_idx = MENU_ENUM_LABEL_SAVEFILES_IN_CONTENT_DIR_ENABLE;
bool_entries[7].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_SAVEFILES_IN_CONTENT_DIR_ENABLE;
bool_entries[7].default_value = default_savefiles_in_content_dir;
bool_entries[7].flags = SD_FLAG_ADVANCED;
bool_entries[8].target = &settings->bools.savestates_in_content_dir;
bool_entries[8].name_enum_idx = MENU_ENUM_LABEL_SAVESTATES_IN_CONTENT_DIR_ENABLE;
bool_entries[8].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_SAVESTATES_IN_CONTENT_DIR_ENABLE;
bool_entries[8].default_value = default_savestates_in_content_dir;
bool_entries[8].flags = SD_FLAG_ADVANCED;
bool_entries[9].target = &settings->bools.systemfiles_in_content_dir;
bool_entries[9].name_enum_idx = MENU_ENUM_LABEL_SYSTEMFILES_IN_CONTENT_DIR_ENABLE;
bool_entries[9].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_SYSTEMFILES_IN_CONTENT_DIR_ENABLE;
bool_entries[9].default_value = default_systemfiles_in_content_dir;
bool_entries[9].flags = SD_FLAG_ADVANCED;
bool_entries[10].target = &settings->bools.screenshots_in_content_dir;
bool_entries[10].name_enum_idx = MENU_ENUM_LABEL_SCREENSHOTS_IN_CONTENT_DIR_ENABLE;
bool_entries[10].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_SCREENSHOTS_IN_CONTENT_DIR_ENABLE;
bool_entries[10].default_value = default_screenshots_in_content_dir;
bool_entries[10].flags = SD_FLAG_ADVANCED;
for (i = 0; i < ARRAY_SIZE(bool_entries); i++)
{
CONFIG_BOOL(
@@ -3131,7 +3155,7 @@ static bool setting_append_list(
menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_AUTOSAVE_INIT);
menu_settings_list_current_add_range(list, list_info, 0, 0, 1, true, false);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_autosave_interval;
#endif
@@ -3258,7 +3282,7 @@ static bool setting_append_list(
general_read_handler);
menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_REINIT);
menu_settings_list_current_add_range(list, list_info, 0, 1, 1, true, false);
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_video_monitor_index;
if (video_driver_has_windowed())
@@ -3356,7 +3380,7 @@ static bool setting_append_list(
(*list)[list_info->index - 1].action_start = &setting_action_start_video_refresh_rate_auto;
(*list)[list_info->index - 1].action_ok = &setting_action_ok_video_refresh_rate_auto;
(*list)[list_info->index - 1].action_select = &setting_action_ok_video_refresh_rate_auto;
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_st_float_video_refresh_rate_auto;
settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED);
@@ -3406,7 +3430,7 @@ static bool setting_append_list(
true,
true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_aspect_ratio_index;
CONFIG_FLOAT(
@@ -3635,7 +3659,7 @@ static bool setting_append_list(
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, 0, 3, 1, true, true);
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_video_rotation;
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
@@ -3980,7 +4004,7 @@ static bool setting_append_list(
&settings->uints.audio_latency,
MENU_ENUM_LABEL_AUDIO_LATENCY,
MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY,
g_defaults.settings.out_latency ?
g_defaults.settings.out_latency ?
g_defaults.settings.out_latency : out_latency,
&group_info,
&subgroup_info,
@@ -4027,7 +4051,7 @@ static bool setting_append_list(
menu_settings_list_current_add_range(
list,
list_info,
0.01,
0.0,
0.5,
0.01,
true,
@@ -4655,7 +4679,7 @@ static bool setting_append_list(
&retro_keybinds_1[i],
&group_info, &subgroup_info, parent_group);
(*list)[list_info->index - 1].bind_type = i + MENU_SETTINGS_BIND_BEGIN;
menu_settings_list_current_add_enum_idx(list, list_info,
menu_settings_list_current_add_enum_idx(list, list_info,
(enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + i));
}
@@ -5051,6 +5075,22 @@ static bool setting_append_list(
SD_FLAG_ADVANCED
);
CONFIG_BOOL(
list, list_info,
&settings->bools.menu_horizontal_animation,
MENU_ENUM_LABEL_MENU_HORIZONTAL_ANIMATION,
MENU_ENUM_LABEL_VALUE_MENU_HORIZONTAL_ANIMATION,
true,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_ADVANCED
);
#ifdef RARCH_MOBILE
/* We don't want mobile users being able to switch this off. */
(*list)[list_info->index - 1].action_left = NULL;
@@ -5412,7 +5452,7 @@ static bool setting_append_list(
general_read_handler,
SD_FLAG_NONE);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED);
#endif
#endif
}
#endif
@@ -5674,8 +5714,6 @@ static bool setting_append_list(
settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED);
#endif
#if defined(HAVE_NETWORKING)
#ifndef HAVE_LAKKA
CONFIG_BOOL(
list, list_info,
&settings->bools.menu_show_online_updater,
@@ -5705,8 +5743,6 @@ static bool setting_append_list(
general_write_handler,
general_read_handler,
SD_FLAG_NONE);
#endif
#endif
if (string_is_not_equal_fast(ui_companion_driver_get_ident(), "null", 4))
{
@@ -5800,7 +5836,7 @@ static bool setting_append_list(
menu_settings_list_current_add_range(list, list_info, 0, 0, 1.0, true, false);
END_SUB_GROUP(list, list_info, parent_group);
START_SUB_GROUP(list, list_info, "Playlist", &group_info, &subgroup_info, parent_group);
CONFIG_BOOL(
@@ -5817,9 +5853,9 @@ static bool setting_append_list(
general_write_handler,
general_read_handler,
SD_FLAG_NONE);
END_SUB_GROUP(list, list_info, parent_group);
END_GROUP(list, list_info, parent_group);
break;
case SETTINGS_LIST_CHEEVOS:
@@ -5912,7 +5948,7 @@ static bool setting_append_list(
sizeof(settings->paths.network_buildbot_url),
MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL,
MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL,
buildbot_server_url,
buildbot_server_url,
&group_info,
&subgroup_info,
parent_group,
@@ -5926,7 +5962,7 @@ static bool setting_append_list(
sizeof(settings->paths.network_buildbot_assets_url),
MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL,
MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL,
buildbot_assets_server_url,
buildbot_assets_server_url,
&group_info,
&subgroup_info,
parent_group,
@@ -6444,7 +6480,7 @@ static bool setting_append_list(
true,
true);
menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_MENU_REFRESH);
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_user_language;
#endif
@@ -6509,7 +6545,7 @@ static bool setting_append_list(
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].get_string_representation =
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_cheevos_password;
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT);
#endif
@@ -6533,13 +6569,14 @@ static bool setting_append_list(
sizeof(settings->paths.directory_system),
MENU_ENUM_LABEL_SYSTEM_DIRECTORY,
MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY,
"",
g_defaults.dirs[DEFAULT_DIR_SYSTEM],
MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
CONFIG_DIR(
list, list_info,
@@ -6547,7 +6584,7 @@ static bool setting_append_list(
sizeof(settings->paths.directory_core_assets),
MENU_ENUM_LABEL_CORE_ASSETS_DIRECTORY,
MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY,
g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS],
MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT,
&group_info,
&subgroup_info,
@@ -6577,13 +6614,14 @@ static bool setting_append_list(
sizeof(settings->paths.directory_dynamic_wallpapers),
MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY,
MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY,
"",
g_defaults.dirs[DEFAULT_DIR_WALLPAPERS],
MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
CONFIG_DIR(
list, list_info,
@@ -6591,7 +6629,7 @@ static bool setting_append_list(
sizeof(settings->paths.directory_thumbnails),
MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY,
MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY,
g_defaults.dirs[DEFAULT_DIR_THUMBNAILS],
g_defaults.dirs[DEFAULT_DIR_THUMBNAILS],
MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT,
&group_info,
&subgroup_info,
@@ -6644,6 +6682,7 @@ static bool setting_append_list(
general_write_handler,
general_read_handler);
menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_CORE_INFO_INIT);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
CONFIG_DIR(
list, list_info,
@@ -6659,6 +6698,7 @@ static bool setting_append_list(
general_write_handler,
general_read_handler);
menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_CORE_INFO_INIT);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
#ifdef HAVE_LIBRETRODB
CONFIG_DIR(
@@ -6750,6 +6790,7 @@ static bool setting_append_list(
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
if (string_is_not_equal_fast(settings->arrays.record_driver, "null", 4))
{
@@ -6797,6 +6838,7 @@ static bool setting_append_list(
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
#endif
CONFIG_DIR(
@@ -6835,13 +6877,14 @@ static bool setting_append_list(
sizeof(settings->paths.directory_input_remapping),
MENU_ENUM_LABEL_INPUT_REMAPPING_DIRECTORY,
MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY,
"",
g_defaults.dirs[DEFAULT_DIR_REMAP],
MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
CONFIG_DIR(
list, list_info,
@@ -6864,13 +6907,14 @@ static bool setting_append_list(
dir_get_size(RARCH_DIR_SAVEFILE),
MENU_ENUM_LABEL_SAVEFILE_DIRECTORY,
MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY,
"",
g_defaults.dirs[DEFAULT_DIR_SRAM],
MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
CONFIG_DIR(
list, list_info,
@@ -6878,13 +6922,14 @@ static bool setting_append_list(
dir_get_size(RARCH_DIR_SAVESTATE),
MENU_ENUM_LABEL_SAVESTATE_DIRECTORY,
MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY,
"",
g_defaults.dirs[DEFAULT_DIR_SAVESTATE],
MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
CONFIG_DIR(
list, list_info,
@@ -7001,7 +7046,7 @@ static rarch_setting_t *menu_setting_new_internal(rarch_setting_info_t *list_inf
{
unsigned i;
rarch_setting_t* resized_list = NULL;
enum settings_list_type list_types[] =
enum settings_list_type list_types[] =
{
SETTINGS_LIST_MAIN_MENU,
SETTINGS_LIST_DRIVERS,
+11
View File
@@ -169,6 +169,9 @@ uint32_t msg_hash_calculate(const char *s)
#define MENU_VALUE_FILE_MP3 0x0b889135U
#define MENU_VALUE_FILE_FLAC 0x7c96d67bU
#define MENU_VALUE_FILE_OGG 0x0b8898c2U
#define MENU_VALUE_FILE_MOD 0x0b889145U
#define MENU_VALUE_FILE_S3M 0x0b88a318U
#define MENU_VALUE_FILE_XM 0x00597a2aU
#define MENU_VALUE_FILE_FLV 0x0b88732dU
#define MENU_VALUE_FILE_WAV 0x0b88ba13U
#define MENU_VALUE_FILE_MOV 0x0b889157U
@@ -347,6 +350,14 @@ enum msg_file_type msg_hash_to_file_type(uint32_t hash)
case MENU_VALUE_FILE_WMA:
return FILE_TYPE_WMA;
#endif
#ifdef HAVE_IBXM
case MENU_VALUE_FILE_MOD:
return FILE_TYPE_MOD;
case MENU_VALUE_FILE_S3M:
return FILE_TYPE_S3M;
case MENU_VALUE_FILE_XM:
return FILE_TYPE_XM;
#endif
#ifdef HAVE_IMAGEVIEWER
case MENU_VALUE_FILE_JPG:
case MENU_VALUE_FILE_JPG_CAPS:
+14
View File
@@ -127,6 +127,10 @@ enum msg_file_type
FILE_TYPE_TGA,
FILE_TYPE_BMP,
FILE_TYPE_MOD,
FILE_TYPE_S3M,
FILE_TYPE_XM,
FILE_TYPE_CUE,
FILE_TYPE_ISO,
FILE_TYPE_LUTRO,
@@ -283,8 +287,10 @@ enum msg_hash_enums
MSG_INPUT_PRESET_FILENAME,
MSG_INPUT_CHEAT_FILENAME,
MSG_REMAP_FILE_SAVED_SUCCESSFULLY,
MSG_REMAP_FILE_REMOVED_SUCCESSFULLY,
MSG_SHADER_PRESET_SAVED_SUCCESSFULLY,
MSG_ERROR_SAVING_REMAP_FILE,
MSG_ERROR_REMOVING_REMAP_FILE,
MSG_ERROR_SAVING_SHADER_PRESET,
MSG_FAILED_TO_CREATE_THE_DIRECTORY,
MSG_ERROR_SAVING_CORE_OPTIONS_FILE,
@@ -664,6 +670,7 @@ enum msg_hash_enums
MENU_LABEL(MOUSE_ENABLE),
MENU_LABEL(POINTER_ENABLE),
MENU_LABEL(MENU_LINEAR_FILTER),
MENU_LABEL(MENU_HORIZONTAL_ANIMATION),
MENU_LABEL(NAVIGATION_WRAPAROUND),
MENU_LABEL(SHOW_ADVANCED_SETTINGS),
MENU_LABEL(THREADED_DATA_RUNLOOP_ENABLE),
@@ -1063,6 +1070,10 @@ enum msg_hash_enums
MENU_LABEL(NETPLAY_NAT_TRAVERSAL),
MENU_LABEL(SORT_SAVEFILES_ENABLE),
MENU_LABEL(SORT_SAVESTATES_ENABLE),
MENU_LABEL(SAVEFILES_IN_CONTENT_DIR_ENABLE),
MENU_LABEL(SAVESTATES_IN_CONTENT_DIR_ENABLE),
MENU_LABEL(SYSTEMFILES_IN_CONTENT_DIR_ENABLE),
MENU_LABEL(SCREENSHOTS_IN_CONTENT_DIR_ENABLE),
MENU_LABEL(NETPLAY_IP_ADDRESS),
MENU_LABEL(NETPLAY_PASSWORD),
MENU_LABEL(NETPLAY_SPECTATE_PASSWORD),
@@ -1266,6 +1277,7 @@ enum msg_hash_enums
MENU_LABEL(ACHIEVEMENT_LIST),
MENU_LABEL(ACHIEVEMENT_LIST_HARDCORE),
MENU_LABEL(CORE_INFORMATION),
MENU_LABEL(CORE_DELETE),
MENU_LABEL(VIDEO_SHADER_PARAMETERS),
MENU_LABEL(VIDEO_SHADER_PRESET_PARAMETERS),
@@ -1361,6 +1373,8 @@ enum msg_hash_enums
MENU_LABEL(REMAP_FILE_SAVE_CORE),
MENU_LABEL(REMAP_FILE_SAVE_GAME),
MENU_LABEL(REMAP_FILE_REMOVE_CORE),
MENU_LABEL(REMAP_FILE_REMOVE_GAME),
MENU_LABEL(RESTART_CONTENT),
MENU_LABEL(RESUME),
MENU_LABEL(RESUME_CONTENT),
+2 -3
View File
@@ -58,8 +58,6 @@ enum netplay_host_method
NETPLAY_HOST_METHOD_MITM
};
/* data is ordered like this on the server, I left it in this ordered
for reference */
struct netplay_room
{
char nickname [PATH_MAX_LENGTH];
@@ -77,7 +75,8 @@ struct netplay_room
bool has_spectate_password;
bool lan;
bool fixed;
char retroarchversion [PATH_MAX_LENGTH];
char retroarch_version[PATH_MAX_LENGTH];
char country[PATH_MAX_LENGTH];
struct netplay_room *next;
};
+7 -9
View File
@@ -47,7 +47,6 @@ typedef struct tag_Context
enum parse_state state;
char *cur_field;
void *cur_member;
size_t cur_member_size;
} Context;
static struct netplay_rooms *rooms;
@@ -112,7 +111,7 @@ static JSON_Parser_HandlerResult JSON_CALL StringHandler(
{
if (string_is_equal(pCtx->cur_field, "game_crc"))
{
/* CRC comes in as a string but it is stored
/* CRC comes in as a string but it is stored
* as an unsigned casted to int. */
*((int*)pCtx->cur_member) = (int)strtoul(pValue, NULL, 16);
}
@@ -213,25 +212,21 @@ static JSON_Parser_HandlerResult JSON_CALL ObjectMemberHandler(JSON_Parser parse
{
pCtx->cur_field = strdup(pValue);
pCtx->cur_member = &rooms->cur->nickname;
pCtx->cur_member_size = sizeof(rooms->cur->nickname);
}
else if (string_is_equal_fast(pValue, "game_name", 9))
{
pCtx->cur_field = strdup(pValue);
pCtx->cur_member = &rooms->cur->gamename;
pCtx->cur_member_size = sizeof(rooms->cur->gamename);
}
else if (string_is_equal_fast(pValue, "core_name", 9))
{
pCtx->cur_field = strdup(pValue);
pCtx->cur_member = &rooms->cur->corename;
pCtx->cur_member_size = sizeof(rooms->cur->corename);
}
else if (string_is_equal_fast(pValue, "ip", 2))
{
pCtx->cur_field = strdup(pValue);
pCtx->cur_member = &rooms->cur->address;
pCtx->cur_member_size = sizeof(rooms->cur->address);
}
else if (string_is_equal_fast(pValue, "port", 4))
{
@@ -247,7 +242,6 @@ static JSON_Parser_HandlerResult JSON_CALL ObjectMemberHandler(JSON_Parser parse
{
pCtx->cur_field = strdup(pValue);
pCtx->cur_member = &rooms->cur->coreversion;
pCtx->cur_member_size = sizeof(rooms->cur->coreversion);
}
else if (string_is_equal_fast(pValue, "has_password", 12))
{
@@ -282,8 +276,12 @@ static JSON_Parser_HandlerResult JSON_CALL ObjectMemberHandler(JSON_Parser parse
else if (string_is_equal_fast(pValue, "retroarch_version", 17))
{
pCtx->cur_field = strdup(pValue);
pCtx->cur_member = &rooms->cur->retroarchversion;
pCtx->cur_member_size = sizeof(rooms->cur->retroarchversion);
pCtx->cur_member = &rooms->cur->retroarch_version;
}
else if (string_is_equal_fast(pValue, "country", 7))
{
pCtx->cur_field = strdup(pValue);
pCtx->cur_member = &rooms->cur->country;
}
}
}
+18 -4
View File
@@ -67,6 +67,7 @@ void path_set_redirect(void)
const char *old_savefile_dir = dir_get(RARCH_DIR_SAVEFILE);
const char *old_savestate_dir = dir_get(RARCH_DIR_SAVESTATE);
rarch_system_info_t *info = runloop_get_system_info();
settings_t *settings = config_get_ptr();
new_savefile_dir[0] = new_savestate_dir[0] = '\0';
@@ -93,10 +94,8 @@ void path_set_redirect(void)
if (check_library_name_hash)
{
settings_t *settings = config_get_ptr();
/* per-core saves: append the library_name to the save location */
if ( settings->bools.sort_savefiles_enable
if (settings->bools.sort_savefiles_enable
&& !string_is_empty(old_savefile_dir))
{
fill_pathname_join(
@@ -154,13 +153,21 @@ void path_set_redirect(void)
}
/* Set savefile directory if empty based on content directory */
if (string_is_empty(new_savefile_dir))
if (string_is_empty(new_savefile_dir) || settings->bools.savefiles_in_content_dir)
{
strlcpy(new_savefile_dir, path_main_basename,
sizeof(new_savefile_dir));
path_basedir(new_savefile_dir);
}
/* Set savestate directory if empty based on content directory */
if (string_is_empty(new_savestate_dir) || settings->bools.savestates_in_content_dir)
{
strlcpy(new_savestate_dir, path_main_basename,
sizeof(new_savestate_dir));
path_basedir(new_savestate_dir);
}
if (global)
{
if(path_is_directory(new_savefile_dir))
@@ -744,6 +751,13 @@ enum rarch_content_type path_is_media_type(const char *path)
case FILE_TYPE_BMP:
return RARCH_CONTENT_IMAGE;
#endif
#ifdef HAVE_IBXM
case FILE_TYPE_MOD:
case FILE_TYPE_S3M:
case FILE_TYPE_XM:
return RARCH_CONTENT_MUSIC;
#endif
case FILE_TYPE_NONE:
default:
break;
+2 -2
View File
@@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.retroarch"
android:versionCode="56"
android:versionName="1.6.3"
android:versionCode="58"
android:versionName="1.6.4"
android:installLocation="internalOnly">
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+3 -3
View File
@@ -62,7 +62,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="msimg32.lib"
AdditionalDependencies="msimg32.lib winmm.lib"
OutputFile="$(OutDir)/RetroArch-msvc2005.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="$(INETSDK)\Lib;$(DXSDK_DIR)\Lib\x86"
@@ -219,7 +219,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="msimg32.lib"
AdditionalDependencies="msimg32.lib winmm.lib"
OutputFile="$(OutDir)/RetroArch-msvc2005.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="$(INETSDK)\Lib;$(DXSDK_DIR)\Lib\x86"
@@ -301,7 +301,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="msimg32.lib"
AdditionalDependencies="msimg32.lib winmm.lib"
OutputFile="$(OutDir)/RetroArch-msvc2005.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="$(INETSDK)\Lib;$(DXSDK_DIR)\Lib\x86"
+1 -1
View File
@@ -2,7 +2,7 @@
<qnx xmlns="http://www.qnx.com/schemas/application/1.0">
<id>com.RetroArch</id>
<versionNumber>1.3.6</versionNumber>
<versionNumber>1.6.4</versionNumber>
<buildId>3</buildId>
<description>Cross-platform entertainment system</description>
<author>Team Libretro</author>
+1 -1
View File
@@ -2,7 +2,7 @@
<app version="1">
<name>RetroArch</name>
<coder>Libretro</coder>
<version>1.6.3</version>
<version>1.6.4</version>
<release_date>2012-2017</release_date>
<short_description>The cross-platform entertainment system</short_description>
<long_description>A port of RetroArch to the GameCube/Wii.</long_description>
+2 -2
View File
@@ -2,8 +2,8 @@
<app version="1">
<name>Retroarch</name>
<coder>Libretro</coder>
<version>1.63</version>
<release_date>20170107283000</release_date>
<version>1.64</version>
<release_date>20170108073000</release_date>
<short_description></short_description>
<long_description>RetroArch
</long_description>
+1
View File
@@ -71,6 +71,7 @@ HAVE_FREETYPE=auto # FreeType support
HAVE_STB_FONT=yes # stb_truetype font support
HAVE_STB_IMAGE=yes # stb image loading support
HAVE_STB_VORBIS=yes # stb vorbis support
HAVE_IBXM=yes # IBXM support
HAVE_XVIDEO=auto # XVideo support
HAVE_PYTHON=no # Python 3 support for shaders
C89_PYTHON=no
+22
View File
@@ -2,6 +2,7 @@
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
* Copyright (C) 2011-2017 - Daniel De Matteis
* Copyright (C) 2012-2015 - Michael Lelli
* Copyright (C) 2015-2017 - Andrés Suárez
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
@@ -236,6 +237,8 @@ static bool runloop_shutdown_initiated = false;
static bool runloop_core_shutdown_initiated = false;
static bool runloop_perfcnt_enable = false;
static bool runloop_overrides_active = false;
static bool runloop_remaps_core_active = false;
static bool runloop_remaps_game_active = false;
static bool runloop_game_options_active = false;
static bool runloop_missing_bios = false;
static bool runloop_autosave = false;
@@ -310,6 +313,8 @@ static void global_free(void)
rarch_ups_pref = false;
rarch_patch_blocked = false;
runloop_overrides_active = false;
runloop_remaps_core_active = false;
runloop_remaps_game_active = false;
core_unset_input_descriptors();
@@ -1587,6 +1592,22 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data)
break;
case RARCH_CTL_IS_OVERRIDES_ACTIVE:
return runloop_overrides_active;
case RARCH_CTL_SET_REMAPS_CORE_ACTIVE:
runloop_remaps_core_active = true;
break;
case RARCH_CTL_UNSET_REMAPS_CORE_ACTIVE:
runloop_remaps_core_active = false;
break;
case RARCH_CTL_IS_REMAPS_CORE_ACTIVE:
return runloop_remaps_core_active;
case RARCH_CTL_SET_REMAPS_GAME_ACTIVE:
runloop_remaps_game_active = true;
break;
case RARCH_CTL_UNSET_REMAPS_GAME_ACTIVE:
runloop_remaps_game_active = false;
break;
case RARCH_CTL_IS_REMAPS_GAME_ACTIVE:
return runloop_remaps_game_active;
case RARCH_CTL_SET_MISSING_BIOS:
runloop_missing_bios = true;
break;
@@ -2161,6 +2182,7 @@ bool retroarch_main_quit(void)
command_event(CMD_EVENT_AUTOSAVE_STATE, NULL);
command_event(CMD_EVENT_DISABLE_OVERRIDES, NULL);
command_event(CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET, NULL);
command_event(CMD_EVENT_RESTORE_REMAPS, NULL);
}
runloop_shutdown_initiated = true;
+8
View File
@@ -98,6 +98,14 @@ enum rarch_ctl_state
RARCH_CTL_SET_OVERRIDES_ACTIVE,
RARCH_CTL_UNSET_OVERRIDES_ACTIVE,
RARCH_CTL_IS_REMAPS_CORE_ACTIVE,
RARCH_CTL_SET_REMAPS_CORE_ACTIVE,
RARCH_CTL_UNSET_REMAPS_CORE_ACTIVE,
RARCH_CTL_IS_REMAPS_GAME_ACTIVE,
RARCH_CTL_SET_REMAPS_GAME_ACTIVE,
RARCH_CTL_UNSET_REMAPS_GAME_ACTIVE,
RARCH_CTL_IS_MISSING_BIOS,
RARCH_CTL_SET_MISSING_BIOS,
RARCH_CTL_UNSET_MISSING_BIOS,
+30
View File
@@ -99,6 +99,28 @@ static void task_audio_mixer_handle_upload_ogg(void *task_data,
free(user_data);
}
static void task_audio_mixer_handle_upload_mod(void *task_data,
void *user_data, const char *err)
{
audio_mixer_stream_params_t params;
nbio_buf_t *img = (nbio_buf_t*)task_data;
if (!img)
return;
params.volume = 1.0f;
params.type = AUDIO_MIXER_TYPE_MOD;
params.state = AUDIO_STREAM_STATE_PLAYING;
params.buf = img->buf;
params.bufsize = img->bufsize;
params.cb = NULL;
audio_driver_mixer_add_stream(&params);
free(img);
free(user_data);
}
static void task_audio_mixer_handle_upload_wav(void *task_data,
void *user_data, const char *err)
{
@@ -191,6 +213,14 @@ bool task_push_audio_mixer_load(const char *fullpath, retro_task_callback_t cb,
nbio->type = NBIO_TYPE_OGG;
t->callback = task_audio_mixer_handle_upload_ogg;
}
else if ( strstr(fullpath, file_path_str(FILE_PATH_MOD_EXTENSION)) ||
strstr(fullpath, file_path_str(FILE_PATH_S3M_EXTENSION)) ||
strstr(fullpath, file_path_str(FILE_PATH_XM_EXTENSION)))
{
image->type = AUDIO_MIXER_TYPE_MOD;
nbio->type = NBIO_TYPE_MOD;
t->callback = task_audio_mixer_handle_upload_mod;
}
nbio->data = (struct audio_mixer_handle*)image;
nbio->is_finished = false;
+2
View File
@@ -189,6 +189,8 @@ static void input_autoconfigure_joypad_add(config_file_t *conf,
{
if (config_get_bool(conf, "input_swap_override", &tmp))
input_autoconfigure_swap_override = tmp;
else
input_autoconfigure_swap_override = false;
}
if (!block_osd_spam)
+16 -3
View File
@@ -75,6 +75,8 @@ int detect_ps1_game(const char *track_path, char *game_id);
int detect_psp_game(const char *track_path, char *game_id);
int detect_serial_ascii_game(const char *track_path, char *game_id);
static void database_info_set_type(database_info_handle_t *handle, enum database_type type)
{
if (!handle)
@@ -139,10 +141,21 @@ static int iso_get_serial(database_state_handle_t *db_state,
database_info_handle_t *db, const char *name, char* serial)
{
const char* system_name = NULL;
int rv = detect_system(name, &system_name);
if (rv < 0)
return rv;
/* Check if the system was not auto-detected. */
if (detect_system(name, &system_name) < 0)
{
/* Attempt to read an ASCII serial, like Wii. */
if (detect_serial_ascii_game(name, serial))
{
/* ASCII serial (Wii) was detected. */
RARCH_LOG("%s '%s'\n", msg_hash_to_str(MSG_FOUND_DISK_LABEL), serial);
return 0;
}
/* Any other non-system specific detection methods? */
return 0;
}
if (string_is_equal_fast(system_name, "psp", 3))
{
+56 -3
View File
@@ -153,7 +153,7 @@ static int detect_ps1_game_sub(const char *track_path,
uint8_t* boot_file;
int skip, frame_size, is_mode1, cd_sector;
uint8_t buffer[2048 * 2];
RFILE *fp =
RFILE *fp =
filestream_open(track_path, RFILE_MODE_READ, -1);
if (!fp)
return 0;
@@ -328,13 +328,66 @@ int detect_psp_game(const char *track_path, char *game_id)
return rv;
}
/**
* Check for an ASCII serial in the first few bits of the ISO (Wii).
*/
int detect_serial_ascii_game(const char *track_path, char *game_id)
{
unsigned pos;
int numberOfAscii = 0;
bool rv = false;
RFILE *fd = filestream_open(track_path, RFILE_MODE_READ, -1);
/* Attempt to load the file. */
if (!fd)
{
RARCH_LOG("%s: %s\n",
msg_hash_to_str(MSG_COULD_NOT_OPEN_DATA_TRACK),
strerror(errno));
return -errno;
}
for (pos = 0; pos < 10000; pos++)
{
filestream_seek(fd, pos, SEEK_SET);
if (filestream_read(fd, game_id, 10000) > 0)
{
unsigned i;
game_id[15] = '\0';
numberOfAscii = 0;
/* Loop through until we run out of ASCII characters. */
for (i = 0; i < 15; i++)
{
/* Is the given character ASCII? A-Z, 0-9, - */
if (game_id[i] == 45 || (game_id[i] >= 48 && game_id[i] <= 57) || (game_id[i] >= 65 && game_id[i] <= 90))
numberOfAscii++;
else
break;
}
/* If the length of the text is between 3 and 9 characters, it could be a serial. */
if (numberOfAscii > 3 && numberOfAscii < 9)
{
/* Cut the string off, and return it as a valid serial. */
game_id[numberOfAscii] = '\0';
rv = true;
break;
}
}
}
filestream_close(fd);
return rv;
}
int detect_system(const char *track_path, const char **system_name)
{
int rv;
char magic[MAGIC_LEN];
int i;
RFILE *fd = filestream_open(track_path, RFILE_MODE_READ, -1);
if (!fd)
{
RARCH_LOG("Could not open data track of file '%s': %s\n",
@@ -390,7 +443,7 @@ int find_first_data_track(const char *cue_path,
{
int rv;
char tmp_token[MAX_TOKEN_LEN];
RFILE *fd =
RFILE *fd =
filestream_open(cue_path, RFILE_MODE_READ, -1);
if (!fd)
+1
View File
@@ -104,6 +104,7 @@ void task_file_load_handler(retro_task_t *task)
task_set_finished(task, true);
break;
case NBIO_TYPE_OGG:
case NBIO_TYPE_MOD:
case NBIO_TYPE_WAV:
if (!task_audio_mixer_load_handler(task))
task_set_finished(task, true);
+4 -2
View File
@@ -236,12 +236,14 @@ filename_matching:
for (j = 0; j < playlist_size; j++)
{
char entry[PATH_MAX_LENGTH];
const char *playlist_path = NULL;
const char *buf = NULL;
playlist_get_index(playlist,
j, &playlist_path, NULL, NULL, NULL, NULL, NULL);
char entry[PATH_MAX_LENGTH];
const char* buf = path_basename(playlist_path);
buf = path_basename(playlist_path);
entry[0] = '\0';
strlcpy(entry, buf, sizeof(entry));
+1 -1
View File
@@ -211,7 +211,7 @@ static bool screenshot_dump(
screenshot_path[0] = '\0';
if (string_is_empty(screenshot_dir))
if (string_is_empty(screenshot_dir) || settings->bools.screenshots_in_content_dir)
{
fill_pathname_basedir(screenshot_path, name_base,
sizeof(screenshot_path));
+1
View File
@@ -74,6 +74,7 @@ enum nbio_type
NBIO_TYPE_TGA,
NBIO_TYPE_BMP,
NBIO_TYPE_OGG,
NBIO_TYPE_MOD,
NBIO_TYPE_WAV
};
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python2
from __future__ import with_statement
import struct, sys
+1 -1
View File
@@ -18,7 +18,7 @@
#define RARCH_VERSION_H__
#ifndef PACKAGE_VERSION
#define PACKAGE_VERSION "1.6.3"
#define PACKAGE_VERSION "1.6.4"
#endif
#endif
Loaded 100 of 105 files, more files were not shown because too many files have changed in this diff. Show more