mirror of
https://github.com/libretro/RetroArch.git
synced 2026-11-08 17:28:49 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08118cb445 | ||
|
|
7649164f51 | ||
|
|
c7615fdf00 | ||
|
|
6359fe44af | ||
|
|
2e1ad9684a | ||
|
|
09922f5ee7 | ||
|
|
46552de0f6 | ||
|
|
cfa0d74df9 | ||
|
|
b521236c3e | ||
|
|
7b09cd34db | ||
|
|
5d2ab5bf82 | ||
|
|
bf72dafe5c | ||
|
|
2e7b4242f7 | ||
|
|
56733c6f18 | ||
|
|
0afb629c81 | ||
|
|
af477ff317 | ||
|
|
86dbcaf563 | ||
|
|
ab936adf1c | ||
|
|
7c1d3991f8 | ||
|
|
a550f83452 | ||
|
|
02db71f529 | ||
|
|
c426f68379 | ||
|
|
8f616c13e4 | ||
|
|
0bc4254ab1 | ||
|
|
2cd38297c2 | ||
|
|
5caabab2eb | ||
|
|
ceed309b19 | ||
|
|
ba31285160 | ||
|
|
b345a4b860 | ||
|
|
999fd0f120 | ||
|
|
38b2f32dc0 | ||
|
|
c6379a7c62 | ||
|
|
c0e5f28498 | ||
|
|
c7e6f19920 | ||
|
|
7382a38485 | ||
|
|
6d4d9aa1fb | ||
|
|
912c7265e6 | ||
|
|
e52e70aa5a | ||
|
|
e3192ad3c5 | ||
|
|
ba36055632 | ||
|
|
1a7247c1bb | ||
|
|
8c8334e5a5 | ||
|
|
5a4b5da68e | ||
|
|
ace3401042 | ||
|
|
50ba42aa57 | ||
|
|
6b369775cf | ||
|
|
54ef8f1399 | ||
|
|
99a8d2ec86 | ||
|
|
169aea5ae1 | ||
|
|
740ad823ab | ||
|
|
c150b4f6dc | ||
|
|
4387dd7c15 | ||
|
|
86f7972aa8 | ||
|
|
e259a8c63b | ||
|
|
944eb01fb4 | ||
|
|
a8d3b205ca | ||
|
|
27d9b04080 | ||
|
|
8bb3852944 | ||
|
|
a17e23dc6c | ||
|
|
2cd552b760 | ||
|
|
cf8783644d | ||
|
|
a4192bf99b | ||
|
|
9858b94e87 | ||
|
|
7af556e200 | ||
|
|
70956dca6f | ||
|
|
2db79242c9 | ||
|
|
a973d5dc8a | ||
|
|
9862b75b4b | ||
|
|
32234b44d3 | ||
|
|
2aa095aa4b | ||
|
|
449a33cf17 | ||
|
|
b671f68e00 | ||
|
|
05c7bdedbe | ||
|
|
b1904bcfa6 | ||
|
|
c8e6a98651 | ||
|
|
24b3705fa1 | ||
|
|
aa4d68760b | ||
|
|
34af7f301d | ||
|
|
33f80371fc | ||
|
|
7ea86f2b16 | ||
|
|
93eb7b349a | ||
|
|
3de9bb9fe1 | ||
|
|
70e741a70b | ||
|
|
d11b9e80b4 | ||
|
|
d865c4cdcf | ||
|
|
e668d10a23 | ||
|
|
cbe2d9a941 | ||
|
|
fb303a4d40 | ||
|
|
6f5220d774 | ||
|
|
eff03a1fd5 | ||
|
|
40a4a5a733 | ||
|
|
ceaeee33e0 | ||
|
|
3a3d9cd41e | ||
|
|
f5360d0d82 | ||
|
|
2ef75cb300 | ||
|
|
a6b24b4d42 | ||
|
|
cacb69542c | ||
|
|
15b05fb057 | ||
|
|
150bc81ee1 | ||
|
|
2c092a882e | ||
|
|
38b9ecb1b1 | ||
|
|
3256af4ffe | ||
|
|
d78ea9cffc | ||
|
|
12c8a5d6a4 | ||
|
|
572f7bea2b | ||
|
|
14d66749cc | ||
|
|
3687a706b9 | ||
|
|
e7eac6004b | ||
|
|
7a20875668 | ||
|
|
3566c41b9c | ||
|
|
b8853b76a5 | ||
|
|
aed8ec7741 | ||
|
|
387d087fcd | ||
|
|
d05dfcce78 | ||
|
|
8ed147e1f3 | ||
|
|
d5d0f580b0 | ||
|
|
b5323b65b1 | ||
|
|
1b9ae701f5 | ||
|
|
fad37a3bd1 | ||
|
|
50b838d8ed | ||
|
|
a3b1b9f690 | ||
|
|
bbb2a7d6f4 | ||
|
|
c13c7d0df2 | ||
|
|
a60049de90 | ||
|
|
6506b71776 | ||
|
|
c072894a93 | ||
|
|
29d26f29a6 | ||
|
|
2a92b22128 | ||
|
|
252dc1b130 | ||
|
|
aa455a7239 | ||
|
|
9c6b6ee4f0 | ||
|
|
24ae754901 | ||
|
|
7d71746b21 | ||
|
|
24107229fc |
No files matched your search
+32
-2
@@ -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
@@ -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 \
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -1,4 +1,4 @@
|
||||
RARCH_VERSION = "0.9.9.3"
|
||||
RARCH_VERSION = "1.6.4.0"
|
||||
|
||||
DEBUG = 0
|
||||
HAVE_LOGGER = 0
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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]);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Vendored
+21
@@ -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
|
||||
Vendored
+1922
File diff suppressed because it is too large.
Load diff
Vendored
+71
@@ -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
|
||||
Vendored
+37
@@ -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.
|
||||
---
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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]));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
============================================================ */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -324,6 +324,7 @@ static void gx_joypad_poll(void)
|
||||
if (g_quit)
|
||||
{
|
||||
rarch_ctl(RARCH_CTL_SET_SHUTDOWN, NULL);
|
||||
g_quit = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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
File diff suppressed because it is too large.
Load diff
@@ -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
@@ -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")
|
||||
@@ -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
@@ -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
@@ -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...")
|
||||
@@ -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.")
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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
@@ -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>
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(¶ms);
|
||||
|
||||
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;
|
||||
|
||||
@@ -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
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -74,6 +74,7 @@ enum nbio_type
|
||||
NBIO_TYPE_TGA,
|
||||
NBIO_TYPE_BMP,
|
||||
NBIO_TYPE_OGG,
|
||||
NBIO_TYPE_MOD,
|
||||
NBIO_TYPE_WAV
|
||||
};
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python2
|
||||
from __future__ import with_statement
|
||||
import struct, sys
|
||||
|
||||
|
||||
@@ -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
Reference in new issue
Block a user