Merge remote-tracking branch 'origin/master' into dev
This commit is contained in:
commit
a156edbd73
|
@ -73,7 +73,7 @@ if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
|
|||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(WINDOWS_STORE)
|
||||
string(REPLACE "v" "" MS_VERSION ${GIT_VERSION})
|
||||
string(REGEX REPLACE "[Vv]" "" MS_VERSION ${GIT_VERSION})
|
||||
string(REPLACE "-" "." MS_VERSION ${MS_VERSION})
|
||||
string(REGEX REPLACE "\.g[0-9a-f]+" "" MS_VERSION ${MS_VERSION})
|
||||
string(REGEX MATCH "[0-9]+\.[0-9]+\.[0-9]+" VERSION_3PARTS ${MS_VERSION})
|
||||
|
@ -176,10 +176,6 @@ else()
|
|||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-fno-strict-aliasing>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-Wall>)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-Wno-nullability-completeness>)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
|
@ -1184,6 +1180,7 @@ if(USE_VULKAN)
|
|||
endif()
|
||||
|
||||
add_library(VulkanMemoryAllocator INTERFACE)
|
||||
target_compile_options(VulkanMemoryAllocator INTERFACE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CXX_COMPILER_ID:AppleClang,Clang>>:-Wno-nullability-completeness>)
|
||||
target_include_directories(VulkanMemoryAllocator INTERFACE core/deps/VulkanMemoryAllocator/include)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator)
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Join us on our [**Discord server**](https://discord.gg/X8YWP8w) for a chat.
|
|||
|
||||
## Install
|
||||
|
||||
### Flatpak (Linux)
|
||||
### Flatpak (Linux )
|
||||
|
||||
1. [Set up Flatpak](https://www.flatpak.org/setup/).
|
||||
|
||||
|
@ -27,7 +27,7 @@ Join us on our [**Discord server**](https://discord.gg/X8YWP8w) for a chat.
|
|||
|
||||
`flatpak run org.flycast.Flycast`
|
||||
|
||||
### Homebrew (MacOS)
|
||||
### Homebrew (MacOS )
|
||||
|
||||
1. [Set up Homebrew](https://brew.sh).
|
||||
|
||||
|
@ -35,7 +35,7 @@ Join us on our [**Discord server**](https://discord.gg/X8YWP8w) for a chat.
|
|||
|
||||
`brew install --cask flycast`
|
||||
|
||||
### Xbox One/Series
|
||||
### Xbox One/Series 
|
||||
|
||||
#### Retail:
|
||||
Open [**gamr13's github page**](https://gamr13.github.io/) from your Xbox console.
|
||||
|
@ -43,7 +43,7 @@ Open [**gamr13's github page**](https://gamr13.github.io/) from your Xbox consol
|
|||
#### Dev Mode:
|
||||
Grab the latest build from [**the builds page**](https://flyinghead.github.io/flycast-builds/), or the [**GitHub Actions**](https://github.com/flyinghead/flycast/actions/workflows/uwp.yml). Then install it using the **Xbox Device Portal**.
|
||||
|
||||
### Binaries
|
||||
### Binaries      
|
||||
|
||||
Get fresh builds for your system [**on the builds page**](https://flyinghead.github.io/flycast-builds/).
|
||||
|
||||
|
|
|
@ -150,7 +150,8 @@ const WidescreenCheat CheatManager::widescreen_cheats[] =
|
|||
{ "MK-5102250", "V1.001", { 0x107FDC, 0x11253C }, { 0x3F99999A, 0x3F900000 } }, // Metropolis Street Racer (v1.001) (PAL)
|
||||
{ "MK-5102250", "V1.009", { 0x106B5C, 0x1111F4 }, { 0x3F99999A, 0x3F900000 } }, // Metropolis Street Racer (v1.009) (PAL)
|
||||
{ "MK-51012", nullptr, { 0x10A01C, 0x1146FC }, { 0x3F99999A, 0x3F900000 } }, // Metropolis Street Racer (USA)
|
||||
{ "T0000M", nullptr, { 0x1CAEAC, 0x1CAEDC }, { 0x43F00000, 0x3F400000 } }, // Millenium Racer Y2K Fighters
|
||||
{ "T0000M", "MILLENNIUM RACER - Y2K FIGHTERS ",
|
||||
{ 0x1CAEAC, 0x1CAEDC }, { 0x43F00000, 0x3F400000 } }, // Millenium Racer Y2K Fighters
|
||||
{ "T1221M", nullptr, { 0x426B74 }, { 0x43F00000 } }, // Moero! Justice Gauken (JP)
|
||||
{ "T9701D", nullptr, { 0x31290C }, { 0x3F400000 } }, // Mortal Kombat Gold (PAL)
|
||||
{ "T-9701N", nullptr, { 0x337B8C }, { 0x3FA66666 } }, // Mortal Kombat Gold (USA)
|
||||
|
@ -434,6 +435,21 @@ void CheatManager::reset(const std::string& gameId)
|
|||
cheats.emplace_back(Cheat::Type::setValue, "Skip DIMM version check", true, 16, 0x0007f486, 0xe001); // mov #1, r0
|
||||
cheats.back().builtIn = true;
|
||||
}
|
||||
else if (gameId == "Fixed BOOT strapper") // Extreme Hunting 2
|
||||
{
|
||||
setActive(true);
|
||||
cheats.emplace_back(Cheat::Type::runNextIfEq, "skip netbd check ifeq", true, 32, 0x00067b04, 0);
|
||||
cheats.back().builtIn = true;
|
||||
cheats.emplace_back(Cheat::Type::setValue, "skip netbd check", true, 32, 0x00067b04, 1); // 1 skips initNetwork()
|
||||
cheats.back().builtIn = true;
|
||||
cheats.emplace_back(Cheat::Type::setValue, "skip netbd check 2", true, 16, 0x0009acc8, 0x0009); // not acceptable by main board
|
||||
cheats.back().builtIn = true;
|
||||
// ac010000 should be d202 9302, but is changed to 78c0 8c93
|
||||
cheats.emplace_back(Cheat::Type::runNextIfEq, "fix boot ifeq", true, 32, 0x00010000, 0x8c9378c0);
|
||||
cheats.back().builtIn = true;
|
||||
cheats.emplace_back(Cheat::Type::setValue, "fix boot", true, 32, 0x00010000, 0x9302d202);
|
||||
cheats.back().builtIn = true;
|
||||
}
|
||||
}
|
||||
if (config::WidescreenGameHacks)
|
||||
{
|
||||
|
|
|
@ -196,16 +196,13 @@ static void loadSpecialSettings()
|
|||
NOTICE_LOG(BOOT, "Game doesn't support RGB. Using TV Composite instead");
|
||||
config::Cable.override(3);
|
||||
}
|
||||
if (prod_id == "T9512N" // The Grinch (US)
|
||||
|| prod_id == "T9503D" // The Grinch (EU)
|
||||
|| prod_id == "T-9707N" // San Francisco Rush 2049 (US)
|
||||
|| prod_id == "T-9709D-50" // San Francisco Rush 2049 (EU)
|
||||
|| prod_id == "T7001D 50" // Jimmy White's 2 Cueball
|
||||
if (prod_id == "T7001D 50" // Jimmy White's 2 Cueball
|
||||
|| prod_id == "T40505D 50" // Railroad Tycoon 2 (EU)
|
||||
|| prod_id == "T18702M" // Miss Moonlight
|
||||
|| prod_id == "T0019M" // KenJu Atomiswave DC Conversion
|
||||
|| prod_id == "T0020M" // Force Five Atomiswave DC Conversion
|
||||
|| prod_id == "HDR-0187") // Fushigi no Dungeon - Fuurai no Shiren Gaiden - Onna Kenshi Asuka Kenzan!
|
||||
|| prod_id == "HDR-0187" // Fushigi no Dungeon - Fuurai no Shiren Gaiden - Onna Kenshi Asuka Kenzan!
|
||||
|| prod_id == "T15104D 50") // Slave Zero (PAL)
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Forcing real BIOS");
|
||||
config::UseReios.override(false);
|
||||
|
@ -224,7 +221,8 @@ static void loadSpecialSettings()
|
|||
config::Broadcast.override(1);
|
||||
}
|
||||
if (prod_id == "T1102M" // Densha de Go! 2
|
||||
|| prod_id == "T00000A") // The Ring of the Nibelungen (demo, hack)
|
||||
|| prod_id == "T00000A" // The Ring of the Nibelungen (demo, hack)
|
||||
|| prod_id == "T15124N 00") // Worms Pinball (prototype)
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Forcing Full Framebuffer Emulation");
|
||||
config::EmulateFramebuffer.override(true);
|
||||
|
@ -286,8 +284,9 @@ static void loadSpecialSettings()
|
|||
else if (prod_id == "NINJA ASSAULT"
|
||||
|| prod_id == "Sports Shooting USA" // AW
|
||||
|| prod_id == "SEGA CLAY CHALLENGE" // AW
|
||||
|| prod_id == "RANGER MISSION" // AW
|
||||
|| prod_id == "EXTREME HUNTING") // AW
|
||||
|| prod_id == "RANGER MISSION" // AW
|
||||
|| prod_id == "EXTREME HUNTING" // AW
|
||||
|| prod_id == "Fixed BOOT strapper")// Extreme hunting 2 (AW)
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling lightgun setup for game %s", prod_id.c_str());
|
||||
settings.input.JammaSetup = JVS::LightGun;
|
||||
|
|
|
@ -261,7 +261,7 @@ static void maple_DoDma()
|
|||
// Maple bus max speed: 2 Mb/s, actual speed: 1 Mb/s
|
||||
//printf("Maple XFER size %d bytes - %.2f ms\n", xfer_count, xfer_count * 1000.0f / (128 * 1024));
|
||||
if (!occupy)
|
||||
sh4_sched_request(maple_schid, std::min((u64)xfer_count * (SH4_MAIN_CLOCK / (128 * 1024)), (u64)SH4_MAIN_CLOCK));
|
||||
sh4_sched_request(maple_schid, std::min((u64)xfer_count * (SH4_MAIN_CLOCK / (256 * 1024)), (u64)SH4_MAIN_CLOCK));
|
||||
}
|
||||
|
||||
static int maple_schd(int tag, int c, int j)
|
||||
|
|
|
@ -144,7 +144,6 @@ void sortTriangles(rend_context& ctx, RenderPass& pass, const RenderPass& previo
|
|||
|
||||
//re-assemble them into drawing commands
|
||||
|
||||
size_t initialSize = ctx.sortedTriangles.size();
|
||||
int idx = -1;
|
||||
int idxSize = ctx.idx.size();
|
||||
|
||||
|
@ -182,7 +181,7 @@ void sortTriangles(rend_context& ctx, RenderPass& pass, const RenderPass& previo
|
|||
// Add a dummy one to signal we're using sorted triangles
|
||||
ctx.sortedTriangles.push_back({ pp_base, 0, 0});
|
||||
}
|
||||
pass.sorted_tr_count = ctx.sortedTriangles.size() - initialSize;
|
||||
pass.sorted_tr_count = ctx.sortedTriangles.size();
|
||||
|
||||
#if PRINT_SORT_STATS
|
||||
printf("Reassembled into %d from %d\n", (int)ctx.sortedTriangles.size(), pp_end - pp_base);
|
||||
|
|
|
@ -1171,6 +1171,7 @@ static void parseRenderPass(RenderPass& pass, const RenderPass& previousPass, re
|
|||
makeIndex(ctx.global_param_op, previousPass.op_count, pass.op_count, true, ctx);
|
||||
makeIndex(ctx.global_param_pt, previousPass.pt_count, pass.pt_count, true, ctx);
|
||||
}
|
||||
pass.sorted_tr_count = previousPass.sorted_tr_count;
|
||||
if (pass.autosort && !perPixel)
|
||||
{
|
||||
if (config::PerStripSorting)
|
||||
|
|
|
@ -12,7 +12,7 @@ Disc* cdi_parse(const char* file, std::vector<u8> *digest)
|
|||
|
||||
if (fsource == nullptr)
|
||||
{
|
||||
WARN_LOG(COMMON, "Cannot open file '%s' errno %d", file, errno);
|
||||
WARN_LOG(GDROM, "Cannot open file '%s' errno %d", file, errno);
|
||||
throw FlycastException(std::string("Cannot open CDI file ") + file);
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,15 @@ Disc* cdi_parse(const char* file, std::vector<u8> *digest)
|
|||
t.CTRL=track.mode==0?0:4;
|
||||
t.StartFAD=track.start_lba+track.pregap_length;
|
||||
t.EndFAD=t.StartFAD+track.length-1;
|
||||
t.file = new RawTrackFile(nowide::fopen(file, "rb"), track.position + track.pregap_length * track.sector_size, t.StartFAD, track.sector_size);
|
||||
FILE *trackFile = nowide::fopen(file, "rb");
|
||||
if (trackFile == nullptr)
|
||||
{
|
||||
delete rv;
|
||||
std::fclose(fsource);
|
||||
WARN_LOG(GDROM, "Cannot re-open file '%s' errno %d", file, errno);
|
||||
throw FlycastException("Cannot re-open CDI file");
|
||||
}
|
||||
t.file = new RawTrackFile(trackFile, track.position + track.pregap_length * track.sector_size, t.StartFAD, track.sector_size);
|
||||
|
||||
rv->tracks.push_back(t);
|
||||
|
||||
|
|
|
@ -58,12 +58,17 @@ class OboeBackend : AudioBackend
|
|||
public:
|
||||
AudioErrorCallback(OboeBackend *backend) : backend(backend) {}
|
||||
|
||||
void onErrorAfterClose(oboe::AudioStream *stream, oboe::Result error) override {
|
||||
WARN_LOG(AUDIO, "Audio device lost. Attempting to reopen the audio stream");
|
||||
// the oboe stream is already closed so make sure we don't close it twice
|
||||
backend->stream.reset();
|
||||
backend->term();
|
||||
backend->init();
|
||||
void onErrorAfterClose(oboe::AudioStream *stream, oboe::Result error) override
|
||||
{
|
||||
// Only attempt to recover if init was successful
|
||||
if (backend->stream != nullptr)
|
||||
{
|
||||
WARN_LOG(AUDIO, "Audio device lost. Attempting to reopen the audio stream");
|
||||
// the oboe stream is already closed so make sure we don't close it twice
|
||||
backend->stream.reset();
|
||||
backend->term();
|
||||
backend->init();
|
||||
}
|
||||
}
|
||||
|
||||
OboeBackend *backend;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "stdclass.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "cfg/option.h"
|
||||
#include "nowide/fstream.hpp"
|
||||
#ifndef _WIN32
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
@ -218,9 +219,24 @@ void uploadCrashes(const std::string& directory)
|
|||
if (config::UploadCrashLogs)
|
||||
{
|
||||
NOTICE_LOG(COMMON, "Uploading minidump %s", line);
|
||||
std::string version = std::string(GIT_VERSION);
|
||||
if (file_exists(logfile))
|
||||
{
|
||||
nowide::ifstream ifs(logfile);
|
||||
if (ifs.is_open())
|
||||
{
|
||||
std::string line;
|
||||
while (std::getline(ifs, line))
|
||||
if (line.substr(0, 9) == "Version: ")
|
||||
{
|
||||
version = line.substr(9);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
std::vector<http::PostField> fields;
|
||||
fields.emplace_back("upload_file_minidump", dmpfile, "application/octet-stream");
|
||||
fields.emplace_back("sentry[release]", std::string(GIT_VERSION));
|
||||
fields.emplace_back("sentry[release]", version);
|
||||
if (file_exists(logfile))
|
||||
fields.emplace_back("flycast_log", logfile, "text/plain");
|
||||
// TODO config, gpu/driver, ...
|
||||
|
|
|
@ -373,7 +373,8 @@ static void reios_sys_misc()
|
|||
|
||||
typedef void hook_fp();
|
||||
|
||||
static void setup_syscall(u32 hook_addr, u32 syscall_addr) {
|
||||
static void setup_syscall(u32 hook_addr, u32 syscall_addr)
|
||||
{
|
||||
WriteMem32(syscall_addr, hook_addr);
|
||||
WriteMem16(hook_addr, REIOS_OPCODE);
|
||||
|
||||
|
@ -383,6 +384,25 @@ static void setup_syscall(u32 hook_addr, u32 syscall_addr) {
|
|||
|
||||
static void reios_setup_state(u32 boot_addr)
|
||||
{
|
||||
// San Francisco Rush checksum
|
||||
short *p = (short *)GetMemPtr(0x8c0010f0, 2);
|
||||
int chksum = (int)0xFFF937D1;
|
||||
for (int i = 0; i < 10; i++)
|
||||
chksum -= *p++;
|
||||
p += 0xee - 1;
|
||||
for (int i = 0; i < 3; i++)
|
||||
chksum += *p++;
|
||||
p += 0x347 - 1;
|
||||
for (int i = 0; i < 11; i++)
|
||||
chksum -= *p++;
|
||||
p += 0xbf8 - 1;
|
||||
for (int i = 0; i < 98; i++)
|
||||
{
|
||||
short v = chksum < 0 ? std::min(-chksum, 32767) : std::max(-chksum, -32768);
|
||||
*p = v;
|
||||
chksum += *p++;
|
||||
}
|
||||
|
||||
// Set up AICA interrupt masks
|
||||
aica::writeAicaReg(SCIEB_addr, (u16)0x48);
|
||||
aica::writeAicaReg(SCILV0_addr, (u8)0x18);
|
||||
|
@ -711,6 +731,11 @@ void reios_reset(u8* rom)
|
|||
|
||||
rom16[0] = REIOS_OPCODE;
|
||||
|
||||
// The Grinch game bug
|
||||
*(u32 *)&rom[0x44c] = 0xe303d463;
|
||||
// Jeremy McGrath game bug
|
||||
*(u32 *)&rom[0x1c] = 0x71294118;
|
||||
|
||||
u8 *pFont = rom + (FONT_TABLE_ADDR % BIOS_SIZE);
|
||||
|
||||
// 288 12 × 24 pixels (36 bytes) characters
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -74,17 +74,21 @@ in vec4 in_pos;
|
|||
in vec4 in_base;
|
||||
in vec4 in_offs;
|
||||
in vec2 in_uv;
|
||||
#if pp_TwoVolumes == 1
|
||||
in vec4 in_base1;
|
||||
in vec4 in_offs1;
|
||||
in vec2 in_uv1;
|
||||
#endif
|
||||
|
||||
// Output
|
||||
INTERPOLATION out vec4 vtx_base;
|
||||
INTERPOLATION out vec4 vtx_offs;
|
||||
out vec3 vtx_uv;
|
||||
#if pp_TwoVolumes == 1
|
||||
INTERPOLATION out vec4 vtx_base1;
|
||||
INTERPOLATION out vec4 vtx_offs1;
|
||||
out vec2 vtx_uv1;
|
||||
#endif
|
||||
flat out uint vtx_index;
|
||||
|
||||
void main()
|
||||
|
@ -97,20 +101,26 @@ void main()
|
|||
vtx_base = in_base;
|
||||
vtx_offs = in_offs;
|
||||
vtx_uv = vec3(in_uv, vpos.z);
|
||||
vtx_base1 = in_base1;
|
||||
vtx_offs1 = in_offs1;
|
||||
vtx_uv1 = in_uv1;
|
||||
#if pp_TwoVolumes == 1
|
||||
vtx_base1 = in_base1;
|
||||
vtx_offs1 = in_offs1;
|
||||
vtx_uv1 = in_uv1;
|
||||
#endif
|
||||
vtx_index = uint(pp_Number) + uint(gl_VertexID);
|
||||
#if pp_Gouraud == 1 && DIV_POS_Z != 1
|
||||
vtx_base *= vpos.z;
|
||||
vtx_offs *= vpos.z;
|
||||
vtx_base1 *= vpos.z;
|
||||
vtx_offs1 *= vpos.z;
|
||||
#if pp_TwoVolumes == 1
|
||||
vtx_base1 *= vpos.z;
|
||||
vtx_offs1 *= vpos.z;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if DIV_POS_Z != 1
|
||||
vtx_uv.xy *= vpos.z;
|
||||
vtx_uv1 *= vpos.z;
|
||||
#if pp_TwoVolumes == 1
|
||||
vtx_uv1 *= vpos.z;
|
||||
#endif
|
||||
vpos.w = 1.0;
|
||||
vpos.z = 0.0;
|
||||
#endif
|
||||
|
@ -171,9 +181,11 @@ uniform int fog_control[2];
|
|||
INTERPOLATION in vec4 vtx_base;
|
||||
INTERPOLATION in vec4 vtx_offs;
|
||||
in vec3 vtx_uv;
|
||||
#if pp_TwoVolumes == 1
|
||||
INTERPOLATION in vec4 vtx_base1;
|
||||
INTERPOLATION in vec4 vtx_offs1;
|
||||
in vec2 vtx_uv1;
|
||||
#endif
|
||||
flat in uint vtx_index;
|
||||
|
||||
float fog_mode2(float w)
|
||||
|
@ -277,21 +289,27 @@ void main()
|
|||
vec4 texcol;
|
||||
#if pp_Palette == 0
|
||||
#if DIV_POS_Z == 1
|
||||
if (area1)
|
||||
texcol = texture(tex1, vtx_uv1);
|
||||
else
|
||||
texcol = texture(tex0, vtx_uv.xy);
|
||||
#if pp_TwoVolumes == 1
|
||||
if (area1)
|
||||
texcol = texture(tex1, vtx_uv1);
|
||||
else
|
||||
#endif
|
||||
texcol = texture(tex0, vtx_uv.xy);
|
||||
#else
|
||||
if (area1)
|
||||
texcol = textureProj(tex1, vec3(vtx_uv1.xy, vtx_uv.z));
|
||||
else
|
||||
texcol = textureProj(tex0, vtx_uv);
|
||||
#if pp_TwoVolumes == 1
|
||||
if (area1)
|
||||
texcol = textureProj(tex1, vec3(vtx_uv1.xy, vtx_uv.z));
|
||||
else
|
||||
#endif
|
||||
texcol = textureProj(tex0, vtx_uv);
|
||||
#endif
|
||||
#else
|
||||
if (area1)
|
||||
texcol = palettePixel(tex1, vec3(vtx_uv1.xy, vtx_uv.z));
|
||||
else
|
||||
texcol = palettePixel(tex0, vtx_uv);
|
||||
#if pp_TwoVolumes == 1
|
||||
if (area1)
|
||||
texcol = palettePixel(tex1, vec3(vtx_uv1.xy, vtx_uv.z));
|
||||
else
|
||||
#endif
|
||||
texcol = palettePixel(tex0, vtx_uv);
|
||||
#endif
|
||||
|
||||
#if pp_BumpMap == 1
|
||||
|
@ -459,7 +477,9 @@ void main()
|
|||
class Vertex4Source : public OpenGl4Source
|
||||
{
|
||||
public:
|
||||
Vertex4Source(bool gouraud, bool divPosZ) : OpenGl4Source() {
|
||||
Vertex4Source(bool gouraud, bool divPosZ, bool twoVolumes) : OpenGl4Source()
|
||||
{
|
||||
addConstant("pp_TwoVolumes", twoVolumes);
|
||||
addConstant("pp_Gouraud", gouraud);
|
||||
addConstant("DIV_POS_Z", divPosZ);
|
||||
|
||||
|
@ -507,7 +527,7 @@ bool gl4CompilePipelineShader(gl4PipelineShader* s, const char *fragment_source
|
|||
if (s->naomi2)
|
||||
vertexSource = N2Vertex4Source(s).generate();
|
||||
else
|
||||
vertexSource = Vertex4Source(s->pp_Gouraud, s->divPosZ).generate();
|
||||
vertexSource = Vertex4Source(s->pp_Gouraud, s->divPosZ, s->pp_TwoVolumes).generate();
|
||||
Fragment4ShaderSource fragmentSource(s);
|
||||
|
||||
s->program = gl_CompileAndLink(vertex_source != nullptr ? vertex_source : vertexSource.c_str(),
|
||||
|
@ -623,7 +643,7 @@ static void create_modvol_shader()
|
|||
{
|
||||
if (gl4.modvol_shader.program != 0)
|
||||
return;
|
||||
Vertex4Source vertexShader(false, config::NativeDepthInterpolation);
|
||||
Vertex4Source vertexShader(false, config::NativeDepthInterpolation, false);
|
||||
OpenGl4Source fragmentShader;
|
||||
fragmentShader.addConstant("DIV_POS_Z", config::NativeDepthInterpolation)
|
||||
.addSource(ShaderHeader)
|
||||
|
|
|
@ -89,7 +89,7 @@ static const char GouraudSource[] = R"(
|
|||
class VulkanSource : public ShaderSource
|
||||
{
|
||||
public:
|
||||
VulkanSource() : ShaderSource("#version 450") {}
|
||||
VulkanSource() : ShaderSource("#version 430") {}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
#pragma once
|
||||
#include <cinttypes>
|
||||
#include "vulkan.h"
|
||||
#define VMA_NOT_NULL
|
||||
#define VMA_NULLABLE
|
||||
#include "vk_mem_alloc.h"
|
||||
|
||||
#if !defined(PRIu64) && defined(_WIN32)
|
||||
|
|
|
@ -166,7 +166,16 @@ public:
|
|||
SDLGamepad(int maple_port, int joystick_idx, SDL_Joystick* sdl_joystick)
|
||||
: GamepadDevice(maple_port, "SDL"), sdl_joystick(sdl_joystick)
|
||||
{
|
||||
_name = SDL_JoystickName(sdl_joystick);
|
||||
const char *joyName = SDL_JoystickName(sdl_joystick);
|
||||
if (joyName == nullptr)
|
||||
{
|
||||
WARN_LOG(INPUT, "Can't get joystick %d name: %s", joystick_idx, SDL_GetError());
|
||||
_name = "Joystick " + std::to_string(joystick_idx);
|
||||
}
|
||||
else
|
||||
{
|
||||
_name = joyName;
|
||||
}
|
||||
sdl_joystick_instance = SDL_JoystickInstanceID(sdl_joystick);
|
||||
_unique_id = "sdl_joystick_" + std::to_string(sdl_joystick_instance);
|
||||
INFO_LOG(INPUT, "SDL: Opened joystick %d on port %d: '%s' unique_id=%s", sdl_joystick_instance, maple_port, _name.c_str(), _unique_id.c_str());
|
||||
|
@ -174,12 +183,19 @@ public:
|
|||
if (SDL_IsGameController(joystick_idx))
|
||||
{
|
||||
sdl_controller = SDL_GameControllerOpen(joystick_idx);
|
||||
SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForAxis(sdl_controller, SDL_CONTROLLER_AXIS_TRIGGERLEFT);
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS)
|
||||
leftTrigger = bind.value.axis;
|
||||
bind = SDL_GameControllerGetBindForAxis(sdl_controller, SDL_CONTROLLER_AXIS_TRIGGERRIGHT);
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS)
|
||||
rightTrigger = bind.value.axis;
|
||||
if (sdl_controller == nullptr)
|
||||
{
|
||||
WARN_LOG(INPUT, "Can't open game controller %d: %s", joystick_idx, SDL_GetError());
|
||||
}
|
||||
else
|
||||
{
|
||||
SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForAxis(sdl_controller, SDL_CONTROLLER_AXIS_TRIGGERLEFT);
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS)
|
||||
leftTrigger = bind.value.axis;
|
||||
bind = SDL_GameControllerGetBindForAxis(sdl_controller, SDL_CONTROLLER_AXIS_TRIGGERRIGHT);
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS)
|
||||
rightTrigger = bind.value.axis;
|
||||
}
|
||||
}
|
||||
|
||||
if (!find_mapping())
|
||||
|
@ -273,50 +289,51 @@ public:
|
|||
{ "paddle4", "Paddle 4" },
|
||||
{ "touchpad", "Touchpad" },
|
||||
};
|
||||
for (SDL_GameControllerButton button = SDL_CONTROLLER_BUTTON_A; button < SDL_CONTROLLER_BUTTON_MAX; button = (SDL_GameControllerButton)(button + 1))
|
||||
{
|
||||
SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForButton(sdl_controller, button);
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON && bind.value.button == (int)code)
|
||||
if (sdl_controller != nullptr)
|
||||
for (SDL_GameControllerButton button = SDL_CONTROLLER_BUTTON_A; button < SDL_CONTROLLER_BUTTON_MAX; button = (SDL_GameControllerButton)(button + 1))
|
||||
{
|
||||
const char *sdlButton = SDL_GameControllerGetStringForButton(button);
|
||||
if (sdlButton == nullptr)
|
||||
return nullptr;
|
||||
for (const auto& button : buttonsTable)
|
||||
if (!strcmp(button.sdlButton, sdlButton))
|
||||
return button.label;
|
||||
return sdlButton;
|
||||
}
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_HAT && (code >> 8) - 1 == (u32)bind.value.hat.hat)
|
||||
{
|
||||
int hat;
|
||||
const char *name;
|
||||
switch (code & 0xff)
|
||||
SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForButton(sdl_controller, button);
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_BUTTON && bind.value.button == (int)code)
|
||||
{
|
||||
case 0:
|
||||
hat = SDL_HAT_UP;
|
||||
name = "DPad Up";
|
||||
break;
|
||||
case 1:
|
||||
hat = SDL_HAT_DOWN;
|
||||
name = "DPad Down";
|
||||
break;
|
||||
case 2:
|
||||
hat = SDL_HAT_LEFT;
|
||||
name = "DPad Left";
|
||||
break;
|
||||
case 3:
|
||||
hat = SDL_HAT_RIGHT;
|
||||
name = "DPad Right";
|
||||
break;
|
||||
default:
|
||||
hat = 0;
|
||||
name = nullptr;
|
||||
break;
|
||||
const char *sdlButton = SDL_GameControllerGetStringForButton(button);
|
||||
if (sdlButton == nullptr)
|
||||
return nullptr;
|
||||
for (const auto& button : buttonsTable)
|
||||
if (!strcmp(button.sdlButton, sdlButton))
|
||||
return button.label;
|
||||
return sdlButton;
|
||||
}
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_HAT && (code >> 8) - 1 == (u32)bind.value.hat.hat)
|
||||
{
|
||||
int hat;
|
||||
const char *name;
|
||||
switch (code & 0xff)
|
||||
{
|
||||
case 0:
|
||||
hat = SDL_HAT_UP;
|
||||
name = "DPad Up";
|
||||
break;
|
||||
case 1:
|
||||
hat = SDL_HAT_DOWN;
|
||||
name = "DPad Down";
|
||||
break;
|
||||
case 2:
|
||||
hat = SDL_HAT_LEFT;
|
||||
name = "DPad Left";
|
||||
break;
|
||||
case 3:
|
||||
hat = SDL_HAT_RIGHT;
|
||||
name = "DPad Right";
|
||||
break;
|
||||
default:
|
||||
hat = 0;
|
||||
name = nullptr;
|
||||
break;
|
||||
}
|
||||
if (hat == bind.value.hat.hat_mask)
|
||||
return name;
|
||||
}
|
||||
if (hat == bind.value.hat.hat_mask)
|
||||
return name;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -336,20 +353,21 @@ public:
|
|||
{ "righttrigger", "R2" },
|
||||
};
|
||||
|
||||
for (SDL_GameControllerAxis axis = SDL_CONTROLLER_AXIS_LEFTX; axis < SDL_CONTROLLER_AXIS_MAX; axis = (SDL_GameControllerAxis)(axis + 1))
|
||||
{
|
||||
SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForAxis(sdl_controller, axis);
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS && bind.value.axis == (int)code)
|
||||
if (sdl_controller != nullptr)
|
||||
for (SDL_GameControllerAxis axis = SDL_CONTROLLER_AXIS_LEFTX; axis < SDL_CONTROLLER_AXIS_MAX; axis = (SDL_GameControllerAxis)(axis + 1))
|
||||
{
|
||||
const char *sdlAxis = SDL_GameControllerGetStringForAxis(axis);
|
||||
if (sdlAxis == nullptr)
|
||||
return nullptr;
|
||||
for (const auto& axis : axesTable)
|
||||
if (!strcmp(axis.sdlAxis, sdlAxis))
|
||||
return axis.label;
|
||||
return sdlAxis;
|
||||
SDL_GameControllerButtonBind bind = SDL_GameControllerGetBindForAxis(sdl_controller, axis);
|
||||
if (bind.bindType == SDL_CONTROLLER_BINDTYPE_AXIS && bind.value.axis == (int)code)
|
||||
{
|
||||
const char *sdlAxis = SDL_GameControllerGetStringForAxis(axis);
|
||||
if (sdlAxis == nullptr)
|
||||
return nullptr;
|
||||
for (const auto& axis : axesTable)
|
||||
if (!strcmp(axis.sdlAxis, sdlAxis))
|
||||
return axis.label;
|
||||
return sdlAxis;
|
||||
}
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -340,6 +340,12 @@ static void updateAudioSession(Event event, void *)
|
|||
return UIRectEdgeAll;
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated;
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
mainui_term();
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[self deinitKeyboard];
|
||||
|
|
|
@ -51,13 +51,13 @@
|
|||
<constraint firstAttribute="height" constant="140" id="fly-c3-Ajo"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="10" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bc4-Lc-Ghm" userLabel="UR-Button">
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="24" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bc4-Lc-Ghm" userLabel="UR-Button">
|
||||
<rect key="frame" x="134" y="85" width="50" height="50"/>
|
||||
</view>
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="11" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7rQ-cq-4t8" userLabel="UL-Button">
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="25" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7rQ-cq-4t8" userLabel="UL-Button">
|
||||
<rect key="frame" x="44" y="85" width="50" height="50"/>
|
||||
</view>
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="12" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="f6y-OJ-0oT" userLabel="DL-Button">
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="26" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="f6y-OJ-0oT" userLabel="DL-Button">
|
||||
<rect key="frame" x="44" y="175" width="50" height="50"/>
|
||||
</view>
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="7" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rp6-Nd-1qa" userLabel="L-Button">
|
||||
|
@ -144,7 +144,7 @@
|
|||
<constraint firstAttribute="width" constant="80" id="Pj7-YU-3Ze"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="13" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ccY-OZ-Jlp" userLabel="DR-Button">
|
||||
<view opaque="NO" multipleTouchEnabled="YES" tag="27" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ccY-OZ-Jlp" userLabel="DR-Button">
|
||||
<rect key="frame" x="134" y="175" width="50" height="50"/>
|
||||
</view>
|
||||
</subviews>
|
||||
|
|
|
@ -50,14 +50,12 @@ enum IOSButton {
|
|||
IOS_BTN_PADDLE4,
|
||||
IOS_BTN_TOUCHPAD,
|
||||
|
||||
IOS_BTN_MAX,
|
||||
|
||||
IOS_BTN_UP_RIGHT = 10,
|
||||
IOS_BTN_UP_RIGHT,
|
||||
IOS_BTN_UP_LEFT,
|
||||
IOS_BTN_DOWN_LEFT,
|
||||
IOS_BTN_DOWN_RIGHT,
|
||||
|
||||
};
|
||||
|
||||
enum IOSAxis {
|
||||
IOS_AXIS_L1 = 1,
|
||||
IOS_AXIS_R1,
|
||||
|
|
|
@ -13558,7 +13558,7 @@ struct retro_core_options_v2 options_da = {
|
|||
#define CATEGORY_VIDEO_LABEL_DE NULL
|
||||
#define CATEGORY_VIDEO_INFO_0_DE "Auflösung, sortierungsunabhängige Transparenz und visuelle Effekt-Einstellungen konfigurieren."
|
||||
#define CATEGORY_PERFORMANCE_LABEL_DE "Leistung"
|
||||
#define CATEGORY_PERFORMANCE_INFO_0_DE "Einstellungen für Mehrgängiges Rendern und Frameskip ändern."
|
||||
#define CATEGORY_PERFORMANCE_INFO_0_DE "Einstellungen für Mehrgängiges Rendern und Bilder überspringen ändern."
|
||||
#define CATEGORY_HACKS_LABEL_DE "Emulations-Hacks"
|
||||
#define CATEGORY_HACKS_INFO_0_DE "Breitbild-Überschreibungen, GD-ROM Ladegeschwindigkeit und Textur-Austausch-Einstellungen konfigurieren."
|
||||
#define CATEGORY_INPUT_LABEL_DE "Eingabe"
|
||||
|
@ -32135,7 +32135,7 @@ struct retro_core_options_v2 options_hr = {
|
|||
#define OPTION_VAL_FRENCH_HU "francia"
|
||||
#define OPTION_VAL_SPANISH_HU "spanyol"
|
||||
#define OPTION_VAL_ITALIAN_HU "olasz"
|
||||
#define CORE_OPTION_NAME_HLE_BIOS_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_HLE_BIOS_LABEL_HU "HLE BIOS (újraindítás szükséges)"
|
||||
#define CORE_OPTION_NAME_HLE_BIOS_INFO_0_HU "Mindenképp a magas szinten emulált BIOS használata."
|
||||
#define CORE_OPTION_NAME_BOOT_TO_BIOS_LABEL_HU "Indítás BIOS-ban (újraindítás szükséges)"
|
||||
#define CORE_OPTION_NAME_BOOT_TO_BIOS_INFO_0_HU "Belépés a Dreamcast BIOS menüjébe rögtön Indításkor."
|
||||
|
@ -32147,10 +32147,10 @@ struct retro_core_options_v2 options_hr = {
|
|||
#define CORE_OPTION_NAME_ALLOW_SERVICE_BUTTONS_INFO_0_HU "A NAOMI szervizgombjának engedélyezése, a kabinet beállításaihoz."
|
||||
#define CORE_OPTION_NAME_FORCE_FREEPLAY_LABEL_HU "Ingyen játék a NAOMI játékokhoz"
|
||||
#define CORE_OPTION_NAME_FORCE_FREEPLAY_INFO_0_HU "Az érmebeállítások ingyen játékra állítása."
|
||||
#define CORE_OPTION_NAME_EMULATE_BBA_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_EMULATE_BBA_INFO_0_HU NULL
|
||||
#define CORE_OPTION_NAME_UPNP_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_UPNP_INFO_0_HU NULL
|
||||
#define CORE_OPTION_NAME_EMULATE_BBA_LABEL_HU "Szélessávú adapter emulálása"
|
||||
#define CORE_OPTION_NAME_EMULATE_BBA_INFO_0_HU "Modem helyett a szélessávú Ethernet adapter emulálása. (Újraindítás szükséges.)"
|
||||
#define CORE_OPTION_NAME_UPNP_LABEL_HU "UPnP engedélyezése"
|
||||
#define CORE_OPTION_NAME_UPNP_INFO_0_HU "Az internetre csatlakozó router automatikus konfigurálása az online játékokhoz UPnP-n keresztül."
|
||||
#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_LABEL_HU "Belső felbontás"
|
||||
#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_INFO_0_HU "A képelőállítás felbontása."
|
||||
#define OPTION_VAL_320X240_HU NULL
|
||||
|
@ -32208,7 +32208,7 @@ struct retro_core_options_v2 options_hr = {
|
|||
#define CORE_OPTION_NAME_EMULATE_FRAMEBUFFER_LABEL_HU "Teljes framebuffer emuláció"
|
||||
#define CORE_OPTION_NAME_EMULATE_FRAMEBUFFER_INFO_0_HU "A VRAM framebuffer teljes emulálásának engedélyezése. Olyan játékokhoz hasznos, amelyek közvetlenül a VRAM-ban írják vagy olvassák a framebuffert. Bekapcsolva a belső felbontás mindenképpen 640x480 lesz és a teljesítmény erősen visszaeshet."
|
||||
#define CORE_OPTION_NAME_ENABLE_RTTB_LABEL_HU "RTT (Render to texture) puffer engedélyezése"
|
||||
#define CORE_OPTION_NAME_ENABLE_RTTB_INFO_0_HU NULL
|
||||
#define CORE_OPTION_NAME_ENABLE_RTTB_INFO_0_HU "Az előállított textúrák visszamásolása a GPU-ból a VRAM-ba. Ez a lehetőség rendszerint be van kapcsolva azoknál a játékoknál, amelyek igénylik. Bekapcsolt állapotban a textúra előállítás felméretezése kikapcsol, és hatással lehet a teljesítményre."
|
||||
#define CORE_OPTION_NAME_MIPMAPPING_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_FOG_LABEL_HU "Köd effekt"
|
||||
#define CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_LABEL_HU "Térfogatmódosító"
|
||||
|
@ -32263,37 +32263,37 @@ struct retro_core_options_v2 options_hr = {
|
|||
#define CORE_OPTION_NAME_ENABLE_PURUPURU_INFO_0_HU "A kontroller erővisszacsatolásának engedélyezése."
|
||||
#define CORE_OPTION_NAME_NETWORK_OUTPUT_LABEL_HU "Digitális kimenetek sugárzása"
|
||||
#define CORE_OPTION_NAME_NETWORK_OUTPUT_INFO_0_HU "A digitális kimenetek és az erővisszacsatolás állapotának közzététele a 8000-es TCP porton. Kompatibilis a MAME \"-output network\" opciójával."
|
||||
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_INFO_0_HU NULL
|
||||
#define CORE_OPTION_NAME_LIGHTGUN1_CROSSHAIR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_LABEL_HU "Fénypisztoly beállítások megjelenítése"
|
||||
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_INFO_0_HU "A fénypisztoly célkereszt megjelenítés beállításai. Figyelem: a változtatás életbelépéséhez újra be kell lépni a gyorsmenübe."
|
||||
#define CORE_OPTION_NAME_LIGHTGUN1_CROSSHAIR_LABEL_HU "1. fénypisztoly célkeresztjének megjelenítése"
|
||||
#define OPTION_VAL_WHITE_HU "Fehér"
|
||||
#define OPTION_VAL_RED_HU "Vörös"
|
||||
#define OPTION_VAL_GREEN_HU "Zöld"
|
||||
#define OPTION_VAL_BLUE_HU "Kék"
|
||||
#define CORE_OPTION_NAME_LIGHTGUN2_CROSSHAIR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_LIGHTGUN3_CROSSHAIR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_LIGHTGUN4_CROSSHAIR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_PER_CONTENT_VMUS_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_PER_CONTENT_VMUS_LABEL_CAT_HU NULL
|
||||
#define CORE_OPTION_NAME_PER_CONTENT_VMUS_INFO_0_HU NULL
|
||||
#define CORE_OPTION_NAME_LIGHTGUN2_CROSSHAIR_LABEL_HU "2. fénypisztoly célkeresztjének megjelenítése"
|
||||
#define CORE_OPTION_NAME_LIGHTGUN3_CROSSHAIR_LABEL_HU "3. fénypisztoly célkeresztjének megjelenítése"
|
||||
#define CORE_OPTION_NAME_LIGHTGUN4_CROSSHAIR_LABEL_HU "4. fénypisztoly célkeresztjének megjelenítése"
|
||||
#define CORE_OPTION_NAME_PER_CONTENT_VMUS_LABEL_HU "Játékonként külön Visual Memory Unit/System (VMU)"
|
||||
#define CORE_OPTION_NAME_PER_CONTENT_VMUS_LABEL_CAT_HU "Játékonként külön VMU"
|
||||
#define CORE_OPTION_NAME_PER_CONTENT_VMUS_INFO_0_HU "Kikapcsolva minden játék ugyanazt a 4 VMU mentés fájlt (A1, B1, C1, D1) használja a RetroArch rendszerkönyvtárban. \"VMU A1\" beállításnál minden elindított játéknak külön VMU \"A1\" fájlt hoz létre. \"Minden VMU\" beállításnál minden elindított játéknak négy külön VMU fájlt (A1, B1, C1, D1) hoz létre."
|
||||
#define OPTION_VAL_VMU_A1_HU NULL
|
||||
#define OPTION_VAL_ALL_VMUS_HU NULL
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_CAT_HU NULL
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_INFO_0_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_DISPLAY_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_POSITION_LABEL_HU NULL
|
||||
#define OPTION_VAL_UPPER_LEFT_HU NULL
|
||||
#define OPTION_VAL_UPPER_RIGHT_HU NULL
|
||||
#define OPTION_VAL_LOWER_LEFT_HU NULL
|
||||
#define OPTION_VAL_LOWER_RIGHT_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_SIZE_MULT_LABEL_HU NULL
|
||||
#define OPTION_VAL_ALL_VMUS_HU "Minden VMU"
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_HU "Visual Memory Unit/System (VMU) megjelenítési beállítások jelenjenek meg"
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_CAT_HU "VMU megjelenítési beállítások jelenjenek meg"
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_INFO_0_HU "Az emulált VMU LCD képernyő láthatósági, méret, helyzet, és szín beállításainak engedélyezése. Figyelem: a gyorsmenüt ki-be kell kapcsolni, hogy ez a beállítás érvényre jusson."
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_DISPLAY_LABEL_HU "VMU 1 képernyő megjelenítése"
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_POSITION_LABEL_HU "VMU 1 képernyő helyzete"
|
||||
#define OPTION_VAL_UPPER_LEFT_HU "Bal felső"
|
||||
#define OPTION_VAL_UPPER_RIGHT_HU "Jobb felső"
|
||||
#define OPTION_VAL_LOWER_LEFT_HU "Bal alsó"
|
||||
#define OPTION_VAL_LOWER_RIGHT_HU "Jobb alsó"
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_SIZE_MULT_LABEL_HU "VMU 1 képernyő mérete"
|
||||
#define OPTION_VAL_1X_HU NULL
|
||||
#define OPTION_VAL_3X_HU NULL
|
||||
#define OPTION_VAL_5X_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU1_PIXEL_ON_COLOR_LABEL_HU NULL
|
||||
#define OPTION_VAL_DEFAULT_ON_00_HU NULL
|
||||
#define OPTION_VAL_DEFAULT_OFF_01_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU1_PIXEL_ON_COLOR_LABEL_HU "VMU 1 képernyő bekapcsolt pixel színe"
|
||||
#define OPTION_VAL_DEFAULT_ON_00_HU "Alapértelmezésben bekapcsolva"
|
||||
#define OPTION_VAL_DEFAULT_OFF_01_HU "Alapértelmezésben kikapcsolva"
|
||||
#define OPTION_VAL_BLACK_02_HU "Fekete"
|
||||
#define OPTION_VAL_LIGHT_BLUE_04_HU "Világoskék"
|
||||
#define OPTION_VAL_CYAN_06_HU "Ciánkék"
|
||||
|
@ -32317,8 +32317,8 @@ struct retro_core_options_v2 options_hr = {
|
|||
#define OPTION_VAL_LIGHT_PURPLE_4_25_HU "Világoslila (4)"
|
||||
#define OPTION_VAL_LIGHT_YELLOW_26_HU "Halványsárga"
|
||||
#define OPTION_VAL_LIGHT_YELLOW_2_27_HU "Halványsárga (2)"
|
||||
#define CORE_OPTION_NAME_VMU1_PIXEL_OFF_COLOR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_OPACITY_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU1_PIXEL_OFF_COLOR_LABEL_HU "VMU 1 képernyő kikapcsolt pixel színe"
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_OPACITY_LABEL_HU "VMU 1 képernyő átlátszatlansága"
|
||||
#define OPTION_VAL_40_HU NULL
|
||||
#define OPTION_VAL_50_HU NULL
|
||||
#define OPTION_VAL_60_HU NULL
|
||||
|
@ -32326,24 +32326,24 @@ struct retro_core_options_v2 options_hr = {
|
|||
#define OPTION_VAL_80_HU NULL
|
||||
#define OPTION_VAL_90_HU NULL
|
||||
#define OPTION_VAL_100_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU2_SCREEN_DISPLAY_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU2_SCREEN_POSITION_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU2_SCREEN_SIZE_MULT_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU2_PIXEL_ON_COLOR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU2_PIXEL_OFF_COLOR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU2_SCREEN_OPACITY_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU3_SCREEN_DISPLAY_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU3_SCREEN_POSITION_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU3_SCREEN_SIZE_MULT_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU3_PIXEL_ON_COLOR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU3_PIXEL_OFF_COLOR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU3_SCREEN_OPACITY_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU4_SCREEN_DISPLAY_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU4_SCREEN_POSITION_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU4_SCREEN_SIZE_MULT_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU4_PIXEL_ON_COLOR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU4_PIXEL_OFF_COLOR_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU4_SCREEN_OPACITY_LABEL_HU NULL
|
||||
#define CORE_OPTION_NAME_VMU2_SCREEN_DISPLAY_LABEL_HU "VMU 2 képernyő megjelenítése"
|
||||
#define CORE_OPTION_NAME_VMU2_SCREEN_POSITION_LABEL_HU "VMU 2 képernyő helyzete"
|
||||
#define CORE_OPTION_NAME_VMU2_SCREEN_SIZE_MULT_LABEL_HU "VMU 2 képernyő mérete"
|
||||
#define CORE_OPTION_NAME_VMU2_PIXEL_ON_COLOR_LABEL_HU "VMU 2 képernyő bekapcsolt pixel színe"
|
||||
#define CORE_OPTION_NAME_VMU2_PIXEL_OFF_COLOR_LABEL_HU "VMU 2 képernyő kikapcsolt pixel színe"
|
||||
#define CORE_OPTION_NAME_VMU2_SCREEN_OPACITY_LABEL_HU "VMU 2 képernyő átlátszatlansága"
|
||||
#define CORE_OPTION_NAME_VMU3_SCREEN_DISPLAY_LABEL_HU "VMU 3 képernyő megjelenítése"
|
||||
#define CORE_OPTION_NAME_VMU3_SCREEN_POSITION_LABEL_HU "VMU 3 képernyő helyzete"
|
||||
#define CORE_OPTION_NAME_VMU3_SCREEN_SIZE_MULT_LABEL_HU "VMU 3 képernyő mérete"
|
||||
#define CORE_OPTION_NAME_VMU3_PIXEL_ON_COLOR_LABEL_HU "VMU 3 képernyő bekapcsolt pixel színe"
|
||||
#define CORE_OPTION_NAME_VMU3_PIXEL_OFF_COLOR_LABEL_HU "VMU 3 képernyő kikapcsolt pixel színe"
|
||||
#define CORE_OPTION_NAME_VMU3_SCREEN_OPACITY_LABEL_HU "VMU 3 képernyő átlátszatlansága"
|
||||
#define CORE_OPTION_NAME_VMU4_SCREEN_DISPLAY_LABEL_HU "VMU 4 képernyő megjelenítése"
|
||||
#define CORE_OPTION_NAME_VMU4_SCREEN_POSITION_LABEL_HU "VMU 4 képernyő helyzete"
|
||||
#define CORE_OPTION_NAME_VMU4_SCREEN_SIZE_MULT_LABEL_HU "VMU 4 képernyő mérete"
|
||||
#define CORE_OPTION_NAME_VMU4_PIXEL_ON_COLOR_LABEL_HU "VMU 4 képernyő bekapcsolt pixel színe"
|
||||
#define CORE_OPTION_NAME_VMU4_PIXEL_OFF_COLOR_LABEL_HU "VMU 4 képernyő kikapcsolt pixel színe"
|
||||
#define CORE_OPTION_NAME_VMU4_SCREEN_OPACITY_LABEL_HU "VMU 4 képernyő átlátszatlansága"
|
||||
|
||||
struct retro_core_option_v2_category option_cats_hu[] = {
|
||||
{
|
||||
|
@ -38883,7 +38883,7 @@ struct retro_core_options_v2 options_ja = {
|
|||
#define OPTION_VAL_FRENCH_KO "프랑스어"
|
||||
#define OPTION_VAL_SPANISH_KO "스페인어"
|
||||
#define OPTION_VAL_ITALIAN_KO "이탈리아어"
|
||||
#define CORE_OPTION_NAME_HLE_BIOS_LABEL_KO NULL
|
||||
#define CORE_OPTION_NAME_HLE_BIOS_LABEL_KO "HLE BIOS (재시작 필요)"
|
||||
#define CORE_OPTION_NAME_HLE_BIOS_INFO_0_KO "HLE BIOS 사용을 강제합니다."
|
||||
#define CORE_OPTION_NAME_BOOT_TO_BIOS_LABEL_KO "BIOS 로 부트 (재시작 필요)"
|
||||
#define CORE_OPTION_NAME_BOOT_TO_BIOS_INFO_0_KO "드림캐스트 BIOS 메뉴로 부팅합니다."
|
||||
|
@ -38895,10 +38895,10 @@ struct retro_core_options_v2 options_ja = {
|
|||
#define CORE_OPTION_NAME_ALLOW_SERVICE_BUTTONS_INFO_0_KO "캐비넷 설정에 들어가기위한 NAOMI 서비스 버튼을 활성화합니다."
|
||||
#define CORE_OPTION_NAME_FORCE_FREEPLAY_LABEL_KO "NAOMI 게임을 무료 플레이로 설정"
|
||||
#define CORE_OPTION_NAME_FORCE_FREEPLAY_INFO_0_KO "무료 플레이를 위해 게임의 코인 설정을 수정합니다."
|
||||
#define CORE_OPTION_NAME_EMULATE_BBA_LABEL_KO NULL
|
||||
#define CORE_OPTION_NAME_EMULATE_BBA_INFO_0_KO NULL
|
||||
#define CORE_OPTION_NAME_UPNP_LABEL_KO NULL
|
||||
#define CORE_OPTION_NAME_UPNP_INFO_0_KO NULL
|
||||
#define CORE_OPTION_NAME_EMULATE_BBA_LABEL_KO "브로드밴드 어댑터 에뮬레이션"
|
||||
#define CORE_OPTION_NAME_EMULATE_BBA_INFO_0_KO "모뎀 대신 이더넷 브로드밴드 어댑터를 에뮬레이트합니다. (재시작 필요)"
|
||||
#define CORE_OPTION_NAME_UPNP_LABEL_KO "UPnP 활성화"
|
||||
#define CORE_OPTION_NAME_UPNP_INFO_0_KO "온라인 게임에서 UPnP를 사용해 자동으로 인터넷 라우터를 설정합니다."
|
||||
#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_LABEL_KO "내부 해상도"
|
||||
#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_INFO_0_KO "렌더링 해상도를 변경합니다."
|
||||
#define OPTION_VAL_320X240_KO NULL
|
||||
|
|
Loading…
Reference in New Issue