Merge remote-tracking branch 'origin/master' into dev
This commit is contained in:
commit
7108358ebd
|
@ -1 +1 @@
|
|||
Subproject commit 8c319cf7be87186857972829e343b9082341d365
|
||||
Subproject commit 8e09bf2badf8866a360babbf722fada2393b26e3
|
|
@ -200,7 +200,8 @@ static void loadSpecialSettings()
|
|||
|| prod_id == "T1209N" // Gigawing (US)
|
||||
|| prod_id == "T1208M" // Gigawing (JP)
|
||||
|| prod_id == "T1235M" // Vampire Chronicle for Matching Service
|
||||
|| prod_id == "T22901N"))// Roadsters (US)
|
||||
|| prod_id == "T22901N" // Roadsters (US)
|
||||
|| prod_id == "T28202M"))// Shin Nihon Pro Wrestling 4
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Game doesn't support RGB. Using TV Composite instead");
|
||||
config::Cable.override(3);
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "hw/sh4/sh4_sched.h"
|
||||
#include "profiler/dc_profiler.h"
|
||||
#include "hw/sh4/dyna/blockmanager.h"
|
||||
#include "hw/sh4/sh4_interpreter.h"
|
||||
#include "hw/arm7/arm7.h"
|
||||
#include "cfg/option.h"
|
||||
|
||||
|
@ -404,7 +405,7 @@ static void Write_SB_ADST(u32 addr, u32 data)
|
|||
|
||||
// Schedule the end of DMA transfer interrupt
|
||||
int cycles = len * (SH4_MAIN_CLOCK / 2 / G2_BUS_CLOCK); // 16 bits @ 25 MHz
|
||||
if (cycles < 4096)
|
||||
if (cycles < SH4_TIMESLICE / 2)
|
||||
dma_end_sched(0, 0, 0);
|
||||
else
|
||||
sh4_sched_request(dma_sched_id, cycles);
|
||||
|
@ -472,10 +473,8 @@ void sbInit()
|
|||
|
||||
// AICA
|
||||
hollyRegs.setHandlers<SB_ADST_addr>(Read_SB_ADST, Write_SB_ADST);
|
||||
#ifdef STRICT_MODE
|
||||
hollyRegs.setWriteHandler<SB_ADSTAR_addr>(Write_SB_STAR<SB_ADSTAR_addr, holly_AICA_ILLADDR, AICA_TAG>);
|
||||
hollyRegs.setWriteHandler<SB_ADSTAG_addr>(Write_SB_STAG<SB_ADSTAG_addr, holly_AICA_ILLADDR, AICA_TAG>);
|
||||
#endif
|
||||
|
||||
// G2 Ext device #1
|
||||
hollyRegs.setWriteHandler<SB_E1ST_addr>(Write_DmaStart<SB_E1EN_addr, SB_E1ST_addr, SB_E1STAR_addr, SB_E1STAG_addr, SB_E1LEN_addr,
|
||||
|
|
|
@ -73,8 +73,10 @@ public:
|
|||
dupe = true;
|
||||
break;
|
||||
}
|
||||
if (!dupe)
|
||||
if (!dupe || type == Present) {
|
||||
queue.push_back(msg);
|
||||
dupe = false;
|
||||
}
|
||||
}
|
||||
if (dupe)
|
||||
{
|
||||
|
|
|
@ -202,7 +202,7 @@ void YUV_deserialize(Deserializer& deser)
|
|||
template<typename T>
|
||||
T DYNACALL pvr_read32p(u32 addr)
|
||||
{
|
||||
return *(T *)&vram[pvr_map32(addr)];
|
||||
return *(T *)&vram[pvr_map32(addr) & ~(sizeof(T) - 1)];
|
||||
}
|
||||
template u8 pvr_read32p<u8>(u32 addr);
|
||||
template u16 pvr_read32p<u16>(u32 addr);
|
||||
|
@ -218,6 +218,7 @@ void DYNACALL pvr_write32p(u32 addr, T data)
|
|||
INFO_LOG(MEMORY, "%08x: 8-bit VRAM writes are not possible", addr);
|
||||
return;
|
||||
}
|
||||
addr &= ~(sizeof(T) - 1);
|
||||
u32 vaddr = addr & VRAM_MASK;
|
||||
if (vaddr >= fb_watch_addr_start && vaddr < fb_watch_addr_end)
|
||||
fb_dirty = true;
|
||||
|
|
|
@ -56,7 +56,8 @@ static void cache_entry(const TLB_Entry &entry)
|
|||
{
|
||||
if (entry.Data.SZ0 == 0 && entry.Data.SZ1 == 0)
|
||||
return;
|
||||
verify(full_table_size < std::size(full_table));
|
||||
if (full_table_size >= std::size(full_table))
|
||||
return;
|
||||
|
||||
full_table[full_table_size].entry = entry;
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ public:
|
|||
}
|
||||
if (FAILED(hr))
|
||||
{
|
||||
WARN_LOG(RENDERER, "Pixels buffer creation failed");
|
||||
WARN_LOG(RENDERER, "Pixels buffer creation failed: %x", hr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ public:
|
|||
|
||||
hr = device->CreateUnorderedAccessView(pixelsBuffer, &uaView, &pixelsBufferView.get());
|
||||
if (FAILED(hr))
|
||||
WARN_LOG(RENDERER, "Pixels buffer UAV creation failed");
|
||||
WARN_LOG(RENDERER, "Pixels buffer UAV creation failed: %x", hr);
|
||||
}
|
||||
|
||||
void resize(int width, int height)
|
||||
|
@ -84,7 +84,7 @@ public:
|
|||
HRESULT hr = device->CreateTexture2D(&desc, nullptr, &abufferPointersTex.get());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
WARN_LOG(RENDERER, "A-buffer texture creation failed");
|
||||
WARN_LOG(RENDERER, "A-buffer texture creation failed: %x", hr);
|
||||
return;
|
||||
}
|
||||
D3D11_UNORDERED_ACCESS_VIEW_DESC uaView{};
|
||||
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
hr = device->CreateUnorderedAccessView(abufferPointersTex, &uaView, &abufferPointersView.get());
|
||||
if (FAILED(hr))
|
||||
WARN_LOG(RENDERER, "A-buffer texture UAV creation failed");
|
||||
WARN_LOG(RENDERER, "A-buffer texture UAV creation failed: %x", hr);
|
||||
}
|
||||
|
||||
void bind()
|
||||
|
|
|
@ -527,61 +527,6 @@ PSO main(in VertexIn inpix)
|
|||
#if PASS == PASS_COLOR
|
||||
pso.col = color;
|
||||
#elif PASS == PASS_OIT
|
||||
// Discard as many pixels as possible
|
||||
switch (cur_blend_mode.y) // DST
|
||||
{
|
||||
case ONE:
|
||||
switch (cur_blend_mode.x) // SRC
|
||||
{
|
||||
case ZERO:
|
||||
discard;
|
||||
break;
|
||||
case ONE:
|
||||
case OTHER_COLOR:
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (all(color == 0.f))
|
||||
discard;
|
||||
break;
|
||||
case SRC_ALPHA:
|
||||
if (color.a == 0.f || all(color.rgb == 0.f))
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_SRC_ALPHA:
|
||||
if (color.a == 1.0 || all(color.rgb == 0.f))
|
||||
discard;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OTHER_COLOR:
|
||||
if (cur_blend_mode.x == ZERO && all(color == 1.f))
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (cur_blend_mode.x <= SRC_ALPHA && all(color == 0.f))
|
||||
discard;
|
||||
break;
|
||||
case SRC_ALPHA:
|
||||
if ((cur_blend_mode.x == ZERO || cur_blend_mode.x == INVERSE_SRC_ALPHA) && color.a == 1.f)
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_SRC_ALPHA:
|
||||
switch (cur_blend_mode.x) // SRC
|
||||
{
|
||||
case ZERO:
|
||||
case SRC_ALPHA:
|
||||
if (color.a == 0.f)
|
||||
discard;
|
||||
break;
|
||||
case ONE:
|
||||
case OTHER_COLOR:
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (all(color == 0.f))
|
||||
discard;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
uint2 coords = uint2(inpix.pos.xy);
|
||||
uint idx = getNextPixelIndex();
|
||||
|
||||
|
@ -1126,7 +1071,7 @@ ComPtr<ID3D11PixelShader> DX11OITShaders::compilePS(const char* source, const ch
|
|||
ComPtr<ID3D11PixelShader> shader;
|
||||
if (blob)
|
||||
{
|
||||
if (device->CreatePixelShader(blob->GetBufferPointer(), blob->GetBufferSize(), nullptr, &shader.get()) != S_OK)
|
||||
if (FAILED(device->CreatePixelShader(blob->GetBufferPointer(), blob->GetBufferSize(), nullptr, &shader.get())))
|
||||
ERROR_LOG(RENDERER, "Pixel shader creation failed");
|
||||
}
|
||||
|
||||
|
|
|
@ -390,60 +390,6 @@ void main()
|
|||
#if PASS == PASS_COLOR
|
||||
FragColor = color;
|
||||
#elif PASS == PASS_OIT
|
||||
// Discard as many pixels as possible
|
||||
switch (cur_blend_mode.y) // DST
|
||||
{
|
||||
case ONE:
|
||||
switch (cur_blend_mode.x) // SRC
|
||||
{
|
||||
case ZERO:
|
||||
discard;
|
||||
case ONE:
|
||||
case OTHER_COLOR:
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (color == vec4(0.0))
|
||||
discard;
|
||||
break;
|
||||
case SRC_ALPHA:
|
||||
if (color.a == 0.0 || color.rgb == vec3(0.0))
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_SRC_ALPHA:
|
||||
if (color.a == 1.0 || color.rgb == vec3(0.0))
|
||||
discard;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OTHER_COLOR:
|
||||
if (cur_blend_mode.x == ZERO && color == vec4(1.0))
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (cur_blend_mode.x <= SRC_ALPHA && color == vec4(0.0))
|
||||
discard;
|
||||
break;
|
||||
case SRC_ALPHA:
|
||||
if ((cur_blend_mode.x == ZERO || cur_blend_mode.x == INVERSE_SRC_ALPHA) && color.a == 1.0)
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_SRC_ALPHA:
|
||||
switch (cur_blend_mode.x) // SRC
|
||||
{
|
||||
case ZERO:
|
||||
case SRC_ALPHA:
|
||||
if (color.a == 0.0)
|
||||
discard;
|
||||
break;
|
||||
case ONE:
|
||||
case OTHER_COLOR:
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (color == vec4(0.0))
|
||||
discard;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
ivec2 coords = ivec2(gl_FragCoord.xy);
|
||||
uint idx = getNextPixelIndex();
|
||||
|
||||
|
|
|
@ -57,16 +57,13 @@ void OITPipelineManager::CreatePipeline(u32 listType, bool autosort, const PolyP
|
|||
depthOp = vk::CompareOp::eGreaterOrEqual;
|
||||
else
|
||||
depthOp = depthOps[pp.isp.DepthMode];
|
||||
bool depthWriteEnable = false;
|
||||
if (pass == Pass::Depth || pass == Pass::Color)
|
||||
{
|
||||
// Z Write Disable seems to be ignored for punch-through.
|
||||
// Fixes Worms World Party, Bust-a-Move 4 and Re-Volt
|
||||
if (listType == ListType_Punch_Through)
|
||||
depthWriteEnable = true;
|
||||
else
|
||||
depthWriteEnable = !pp.isp.ZWriteDis;
|
||||
}
|
||||
bool depthWriteEnable;
|
||||
// Z Write Disable seems to be ignored for punch-through.
|
||||
// Fixes Worms World Party, Bust-a-Move 4 and Re-Volt
|
||||
if (listType == ListType_Punch_Through)
|
||||
depthWriteEnable = true;
|
||||
else
|
||||
depthWriteEnable = !pp.isp.ZWriteDis;
|
||||
|
||||
bool shadowed = pass == Pass::Depth && (listType == ListType_Opaque || listType == ListType_Punch_Through);
|
||||
vk::StencilOpState stencilOpState;
|
||||
|
|
|
@ -36,13 +36,13 @@ vk::UniqueRenderPass RenderPasses::MakeRenderPass(bool initial, bool last)
|
|||
initial ? vk::AttachmentLoadOp::eClear : vk::AttachmentLoadOp::eLoad,
|
||||
last ? vk::AttachmentStoreOp::eDontCare : vk::AttachmentStoreOp::eStore,
|
||||
vk::AttachmentLoadOp::eClear, vk::AttachmentStoreOp::eDontCare,
|
||||
initial ? vk::ImageLayout::eUndefined : vk::ImageLayout::eDepthStencilReadOnlyOptimal, vk::ImageLayout::eDepthStencilReadOnlyOptimal),
|
||||
initial ? vk::ImageLayout::eUndefined : vk::ImageLayout::eDepthStencilAttachmentOptimal, vk::ImageLayout::eDepthStencilAttachmentOptimal),
|
||||
// OP+PT depth attachment for subpass 1
|
||||
vk::AttachmentDescription(vk::AttachmentDescriptionFlags(), GetContext()->GetDepthFormat(), vk::SampleCountFlagBits::e1,
|
||||
initial ? vk::AttachmentLoadOp::eClear : vk::AttachmentLoadOp::eLoad,
|
||||
last ? vk::AttachmentStoreOp::eDontCare : vk::AttachmentStoreOp::eStore,
|
||||
vk::AttachmentLoadOp::eClear, vk::AttachmentStoreOp::eDontCare,
|
||||
initial ? vk::ImageLayout::eUndefined : vk::ImageLayout::eDepthStencilReadOnlyOptimal, vk::ImageLayout::eDepthStencilReadOnlyOptimal),
|
||||
initial ? vk::ImageLayout::eUndefined : vk::ImageLayout::eDepthStencilAttachmentOptimal, vk::ImageLayout::eDepthStencilAttachmentOptimal),
|
||||
};
|
||||
vk::AttachmentReference swapChainReference(0, vk::ImageLayout::eColorAttachmentOptimal);
|
||||
vk::AttachmentReference colorReference(1, vk::ImageLayout::eColorAttachmentOptimal);
|
||||
|
@ -70,17 +70,12 @@ vk::UniqueRenderPass RenderPasses::MakeRenderPass(bool initial, bool last)
|
|||
colorInput,
|
||||
swapChainReference,
|
||||
nullptr,
|
||||
&depthReference2), // depth-only Tr pass when continuation
|
||||
&depthReference), // depth-only Tr pass when continuation
|
||||
};
|
||||
|
||||
std::vector<vk::SubpassDependency> dependencies = GetSubpassDependencies();
|
||||
dependencies.emplace_back(VK_SUBPASS_EXTERNAL, 0, vk::PipelineStageFlagBits::eFragmentShader,
|
||||
vk::PipelineStageFlagBits::eEarlyFragmentTests | vk::PipelineStageFlagBits::eLateFragmentTests,
|
||||
vk::AccessFlagBits::eInputAttachmentRead | vk::AccessFlagBits::eShaderRead,
|
||||
vk::AccessFlagBits::eDepthStencilAttachmentRead | vk::AccessFlagBits::eDepthStencilAttachmentWrite,
|
||||
vk::DependencyFlagBits::eByRegion);
|
||||
dependencies.emplace_back(VK_SUBPASS_EXTERNAL, 1, vk::PipelineStageFlagBits::eFragmentShader, vk::PipelineStageFlagBits::eColorAttachmentOutput,
|
||||
vk::AccessFlagBits::eInputAttachmentRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::DependencyFlagBits::eByRegion),
|
||||
vk::AccessFlagBits::eInputAttachmentRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::DependencyFlagBits::eByRegion);
|
||||
dependencies.emplace_back(0, 1, vk::PipelineStageFlagBits::eLateFragmentTests, vk::PipelineStageFlagBits::eFragmentShader,
|
||||
vk::AccessFlagBits::eDepthStencilAttachmentRead | vk::AccessFlagBits::eDepthStencilAttachmentWrite,
|
||||
vk::AccessFlagBits::eInputAttachmentRead | vk::AccessFlagBits::eShaderRead, vk::DependencyFlagBits::eByRegion);
|
||||
|
|
|
@ -396,60 +396,6 @@ void main()
|
|||
#if PASS == PASS_COLOR
|
||||
FragColor = color;
|
||||
#elif PASS == PASS_OIT
|
||||
// Discard as many pixels as possible
|
||||
switch (cur_blend_mode.y) // DST
|
||||
{
|
||||
case ONE:
|
||||
switch (cur_blend_mode.x) // SRC
|
||||
{
|
||||
case ZERO:
|
||||
discard;
|
||||
case ONE:
|
||||
case OTHER_COLOR:
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (color == vec4(0.0))
|
||||
discard;
|
||||
break;
|
||||
case SRC_ALPHA:
|
||||
if (color.a == 0.0 || color.rgb == vec3(0.0))
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_SRC_ALPHA:
|
||||
if (color.a == 1.0 || color.rgb == vec3(0.0))
|
||||
discard;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OTHER_COLOR:
|
||||
if (cur_blend_mode.x == ZERO && color == vec4(1.0))
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (cur_blend_mode.x <= SRC_ALPHA && color == vec4(0.0))
|
||||
discard;
|
||||
break;
|
||||
case SRC_ALPHA:
|
||||
if ((cur_blend_mode.x == ZERO || cur_blend_mode.x == INVERSE_SRC_ALPHA) && color.a == 1.0)
|
||||
discard;
|
||||
break;
|
||||
case INVERSE_SRC_ALPHA:
|
||||
switch (cur_blend_mode.x) // SRC
|
||||
{
|
||||
case ZERO:
|
||||
case SRC_ALPHA:
|
||||
if (color.a == 0.0)
|
||||
discard;
|
||||
break;
|
||||
case ONE:
|
||||
case OTHER_COLOR:
|
||||
case INVERSE_OTHER_COLOR:
|
||||
if (color == vec4(0.0))
|
||||
discard;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
ivec2 coords = ivec2(gl_FragCoord.xy);
|
||||
uint idx = getNextPixelIndex();
|
||||
|
||||
|
|
|
@ -24,9 +24,7 @@
|
|||
LibretroGraphicsContext theGLContext;
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_D3D11) && !(defined(HAVE_OPENGL) || defined(HAVE_OPENGLES))
|
||||
#include "context.h"
|
||||
#endif
|
||||
|
||||
GraphicsContext *GraphicsContext::instance;
|
||||
#endif
|
||||
|
|
|
@ -186,7 +186,6 @@ static retro_rumble_interface rumble;
|
|||
static void refresh_devices(bool first_startup);
|
||||
static void init_disk_control_interface();
|
||||
static bool read_m3u(const char *file);
|
||||
void UpdateInputState();
|
||||
void gui_display_notification(const char *msg, int duration);
|
||||
static void updateVibration(u32 port, float power, float inclination, u32 durationMs);
|
||||
|
||||
|
@ -280,13 +279,14 @@ void retro_set_environment(retro_environment_t cb)
|
|||
{ "Light Gun", RETRO_DEVICE_LIGHTGUN },
|
||||
{ "Twin Stick", RETRO_DEVICE_TWINSTICK },
|
||||
{ "Saturn Twin-Stick", RETRO_DEVICE_TWINSTICK_SATURN },
|
||||
{ "Pointer", RETRO_DEVICE_POINTER },
|
||||
{ 0 },
|
||||
};
|
||||
static const struct retro_controller_info ports[] = {
|
||||
{ ports_default, 7 },
|
||||
{ ports_default, 7 },
|
||||
{ ports_default, 7 },
|
||||
{ ports_default, 7 },
|
||||
{ ports_default, 8 },
|
||||
{ ports_default, 8 },
|
||||
{ ports_default, 8 },
|
||||
{ ports_default, 8 },
|
||||
{ 0 },
|
||||
};
|
||||
environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports);
|
||||
|
@ -1301,6 +1301,7 @@ static uint32_t map_gamepad_button(unsigned device, unsigned id)
|
|||
switch (device)
|
||||
{
|
||||
case RETRO_DEVICE_JOYPAD:
|
||||
case RETRO_DEVICE_POINTER:
|
||||
joymap = dc_joymap;
|
||||
joymap_size = std::size(dc_joymap);
|
||||
break;
|
||||
|
@ -1318,6 +1319,7 @@ static uint32_t map_gamepad_button(unsigned device, unsigned id)
|
|||
switch (device)
|
||||
{
|
||||
case RETRO_DEVICE_JOYPAD:
|
||||
case RETRO_DEVICE_POINTER:
|
||||
joymap = nao_joymap;
|
||||
joymap_size = std::size(nao_joymap);
|
||||
break;
|
||||
|
@ -1334,6 +1336,7 @@ static uint32_t map_gamepad_button(unsigned device, unsigned id)
|
|||
switch (device)
|
||||
{
|
||||
case RETRO_DEVICE_JOYPAD:
|
||||
case RETRO_DEVICE_POINTER:
|
||||
joymap = aw_joymap;
|
||||
joymap_size = std::size(aw_joymap);
|
||||
break;
|
||||
|
@ -2210,6 +2213,7 @@ void retro_set_controller_port_device(unsigned in_port, unsigned device)
|
|||
}
|
||||
break;
|
||||
case RETRO_DEVICE_LIGHTGUN:
|
||||
case RETRO_DEVICE_POINTER:
|
||||
config::MapleMainDevices[in_port] = MDT_LightGun;
|
||||
if (settings.platform.isConsole()) {
|
||||
config::MapleExpansionDevices[in_port][0] = enable_purupuru ? MDT_PurupuruPack : MDT_SegaVMU;
|
||||
|
@ -2435,8 +2439,18 @@ static void updateMouseState(u32 port)
|
|||
|
||||
static void updateLightgunCoordinates(u32 port)
|
||||
{
|
||||
int x = input_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X);
|
||||
int y = input_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y);
|
||||
int x;
|
||||
int y;
|
||||
if (device_type[port] == RETRO_DEVICE_LIGHTGUN)
|
||||
{
|
||||
x = input_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X);
|
||||
y = input_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
x = input_cb(port, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_X);
|
||||
y = input_cb(port, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_Y);
|
||||
}
|
||||
if (config::Widescreen && config::ScreenStretching == 100 && !config::EmulateFramebuffer)
|
||||
mo_x_abs[port] = 640.f * ((x + 0x8000) * 4.f / 3.f / 0x10000 - (4.f / 3.f - 1.f) / 2.f);
|
||||
else
|
||||
|
@ -2448,11 +2462,24 @@ static void updateLightgunCoordinates(u32 port)
|
|||
lightgun_params[port].y = mo_y_abs[port];
|
||||
}
|
||||
|
||||
void updateLightgunCoordinatesFromAnalogStick(int port)
|
||||
{
|
||||
int x = input_cb(port, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X);
|
||||
mo_x_abs[port] = 320 + x * 320 / 32767;
|
||||
int y = input_cb(port, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y);
|
||||
mo_y_abs[port] = 240 + y * 240 / 32767;
|
||||
|
||||
lightgun_params[port].offscreen = false;
|
||||
lightgun_params[port].x = mo_x_abs[port];
|
||||
lightgun_params[port].y = mo_y_abs[port];
|
||||
}
|
||||
|
||||
static void UpdateInputStateNaomi(u32 port)
|
||||
{
|
||||
switch (config::MapleMainDevices[port])
|
||||
{
|
||||
case MDT_LightGun:
|
||||
if (device_type[port] == RETRO_DEVICE_LIGHTGUN)
|
||||
{
|
||||
//
|
||||
// -- buttons
|
||||
|
@ -2495,6 +2522,44 @@ static void UpdateInputStateNaomi(u32 port)
|
|||
updateLightgunCoordinates(port);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// RETRO_DEVICE_POINTER
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_B);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_START);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_UP);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_DOWN);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_LEFT);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_RIGHT);
|
||||
|
||||
int pressed = input_cb(port, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_PRESSED);
|
||||
int count = input_cb(port, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_COUNT);
|
||||
if (count > 1)
|
||||
{
|
||||
// reload
|
||||
mo_x_abs[port] = 0;
|
||||
mo_y_abs[port] = 0;
|
||||
lightgun_params[port].offscreen = true;
|
||||
}
|
||||
else if (count == 1)
|
||||
{
|
||||
updateLightgunCoordinates(port);
|
||||
}
|
||||
if (pressed)
|
||||
{
|
||||
if (settings.platform.isAtomiswave())
|
||||
kcode[port] &= ~AWAVE_TRIGGER_KEY;
|
||||
else
|
||||
kcode[port] &= ~NAOMI_BTN0_KEY;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (settings.platform.isAtomiswave())
|
||||
kcode[port] |= AWAVE_TRIGGER_KEY;
|
||||
else
|
||||
kcode[port] |= NAOMI_BTN0_KEY;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -2584,6 +2649,35 @@ static void UpdateInputStateNaomi(u32 port)
|
|||
|
||||
// -- mouse, for rotary encoders
|
||||
updateMouseState(port);
|
||||
// lightgun with analog stick
|
||||
if (settings.input.JammaSetup == JVS::LightGun || settings.input.JammaSetup == JVS::LightGunAsAnalog)
|
||||
{
|
||||
updateLightgunCoordinatesFromAnalogStick(port);
|
||||
if (input_cb(port, RETRO_DEVICE_LIGHTGUN, 0, RETRO_DEVICE_ID_LIGHTGUN_RELOAD))
|
||||
{
|
||||
mo_x_abs[port] = 0;
|
||||
mo_y_abs[port] = 0;
|
||||
lightgun_params[port].offscreen = true;
|
||||
if (settings.platform.isAtomiswave())
|
||||
kcode[port] &= ~AWAVE_TRIGGER_KEY;
|
||||
else
|
||||
kcode[port] &= ~NAOMI_BTN0_KEY;
|
||||
}
|
||||
else if (settings.platform.isAtomiswave())
|
||||
{
|
||||
// map btn0 to trigger, btn1 to btn0, etc.
|
||||
u32 k = kcode[port] | (AWAVE_BTN0_KEY | AWAVE_BTN1_KEY | AWAVE_BTN2_KEY | AWAVE_BTN3_KEY | AWAVE_TRIGGER_KEY);
|
||||
if ((kcode[port] & AWAVE_BTN0_KEY) == 0)
|
||||
k &= ~AWAVE_TRIGGER_KEY;
|
||||
if ((kcode[port] & AWAVE_BTN1_KEY) == 0)
|
||||
k &= ~AWAVE_BTN0_KEY;
|
||||
if ((kcode[port] & AWAVE_BTN2_KEY) == 0)
|
||||
k &= ~AWAVE_BTN1_KEY;
|
||||
if ((kcode[port] & AWAVE_BTN3_KEY) == 0)
|
||||
k &= ~AWAVE_BTN2_KEY;
|
||||
kcode[port] = k;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2877,6 +2971,7 @@ static void UpdateInputState(u32 port)
|
|||
break;
|
||||
|
||||
case MDT_LightGun:
|
||||
if (device_type[port] == RETRO_DEVICE_LIGHTGUN)
|
||||
{
|
||||
//
|
||||
// -- buttons
|
||||
|
@ -2910,6 +3005,37 @@ static void UpdateInputState(u32 port)
|
|||
updateLightgunCoordinates(port);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// RETRO_DEVICE_POINTER
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_B);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_START);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_UP);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_DOWN);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_LEFT);
|
||||
setDeviceButtonState(port, RETRO_DEVICE_JOYPAD, RETRO_DEVICE_ID_JOYPAD_RIGHT);
|
||||
|
||||
int pressed = input_cb(port, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_PRESSED);
|
||||
int count = input_cb(port, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_COUNT);
|
||||
if (count > 1)
|
||||
{
|
||||
// reload
|
||||
mo_x_abs[port] = -1000;
|
||||
mo_y_abs[port] = -1000;
|
||||
lightgun_params[port].offscreen = true;
|
||||
|
||||
lightgun_params[port].x = mo_x_abs[port];
|
||||
lightgun_params[port].y = mo_y_abs[port];
|
||||
}
|
||||
else if (count == 1)
|
||||
{
|
||||
updateLightgunCoordinates(port);
|
||||
}
|
||||
if (pressed)
|
||||
kcode[port] &= ~DC_BTN_A;
|
||||
else
|
||||
kcode[port] |= DC_BTN_A;
|
||||
}
|
||||
break;
|
||||
|
||||
case MDT_Mouse:
|
||||
|
|
|
@ -33810,18 +33810,18 @@ struct retro_core_options_v2 options_hu = {
|
|||
#define CATEGORY_VMU_LABEL_ID NULL
|
||||
#define CATEGORY_VMU_INFO_0_ID NULL
|
||||
#define CORE_OPTION_NAME_REGION_LABEL_ID "Daerah"
|
||||
#define OPTION_VAL_JAPAN_ID NULL
|
||||
#define OPTION_VAL_JAPAN_ID "Jepang"
|
||||
#define OPTION_VAL_USA_ID NULL
|
||||
#define OPTION_VAL_EUROPE_ID NULL
|
||||
#define OPTION_VAL_EUROPE_ID "Eropa"
|
||||
#define OPTION_VAL_DEFAULT_ID NULL
|
||||
#define CORE_OPTION_NAME_LANGUAGE_LABEL_ID "Bahasa"
|
||||
#define CORE_OPTION_NAME_LANGUAGE_INFO_0_ID NULL
|
||||
#define OPTION_VAL_JAPANESE_ID NULL
|
||||
#define OPTION_VAL_ENGLISH_ID NULL
|
||||
#define OPTION_VAL_GERMAN_ID NULL
|
||||
#define OPTION_VAL_FRENCH_ID NULL
|
||||
#define OPTION_VAL_SPANISH_ID NULL
|
||||
#define OPTION_VAL_ITALIAN_ID NULL
|
||||
#define OPTION_VAL_JAPANESE_ID "Bahasa Jepang"
|
||||
#define OPTION_VAL_ENGLISH_ID "Bahasa Inggris"
|
||||
#define OPTION_VAL_GERMAN_ID "Bahasa Jerman"
|
||||
#define OPTION_VAL_FRENCH_ID "Bahasa Perancis"
|
||||
#define OPTION_VAL_SPANISH_ID "Bahasa Spanyol"
|
||||
#define OPTION_VAL_ITALIAN_ID "Bahasa Itali"
|
||||
#define CORE_OPTION_NAME_HLE_BIOS_LABEL_ID NULL
|
||||
#define CORE_OPTION_NAME_HLE_BIOS_INFO_0_ID "Paksa penggunaan BIOS emulasi tingkat tinggi."
|
||||
#define CORE_OPTION_NAME_BOOT_TO_BIOS_LABEL_ID "Boot ke BIOS (Perlu Dimulai Ulang)"
|
||||
|
@ -33879,7 +33879,7 @@ struct retro_core_options_v2 options_hu = {
|
|||
#define OPTION_VAL_PAL_M_ID NULL
|
||||
#define CORE_OPTION_NAME_SCREEN_ROTATION_LABEL_ID "Orientasi Layar"
|
||||
#define OPTION_VAL_HORIZONTAL_ID NULL
|
||||
#define OPTION_VAL_VERTICAL_ID NULL
|
||||
#define OPTION_VAL_VERTICAL_ID "Vertikal"
|
||||
#define CORE_OPTION_NAME_ALPHA_SORTING_LABEL_ID NULL
|
||||
#define OPTION_VAL_PER_STRIP_FAST_LEAST_ACCURATE_ID NULL
|
||||
#define OPTION_VAL_PER_TRIANGLE_NORMAL_ID NULL
|
||||
|
@ -33970,10 +33970,10 @@ struct retro_core_options_v2 options_hu = {
|
|||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_INFO_0_ID NULL
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_DISPLAY_LABEL_ID NULL
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_POSITION_LABEL_ID NULL
|
||||
#define OPTION_VAL_UPPER_LEFT_ID NULL
|
||||
#define OPTION_VAL_UPPER_RIGHT_ID NULL
|
||||
#define OPTION_VAL_LOWER_LEFT_ID NULL
|
||||
#define OPTION_VAL_LOWER_RIGHT_ID NULL
|
||||
#define OPTION_VAL_UPPER_LEFT_ID "Kiri Atas"
|
||||
#define OPTION_VAL_UPPER_RIGHT_ID "Kanan Atas"
|
||||
#define OPTION_VAL_LOWER_LEFT_ID "Kiri Bawah"
|
||||
#define OPTION_VAL_LOWER_RIGHT_ID "Kanan Bawah"
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_SIZE_MULT_LABEL_ID NULL
|
||||
#define OPTION_VAL_1X_ID NULL
|
||||
#define OPTION_VAL_3X_ID NULL
|
||||
|
@ -49051,10 +49051,10 @@ struct retro_core_options_v2 options_pt_pt = {
|
|||
#define OPTION_VAL_12160X9120_RU NULL
|
||||
#define OPTION_VAL_12800X9600_RU NULL
|
||||
#define CORE_OPTION_NAME_CABLE_TYPE_LABEL_RU "Тип кабеля"
|
||||
#define CORE_OPTION_NAME_CABLE_TYPE_INFO_0_RU "Тип выводимого сигнала. ТВ (Композитный) наиболее поддерживаемый."
|
||||
#define CORE_OPTION_NAME_CABLE_TYPE_INFO_0_RU "Тип выходного сигнала. Наиболее поддерживаемым является 'ТВ (композит)'."
|
||||
#define OPTION_VAL_VGA_RU NULL
|
||||
#define OPTION_VAL_TV_RGB_RU "ТВ (RGB)"
|
||||
#define OPTION_VAL_TV_COMPOSITE_RU "ТВ (композитный)"
|
||||
#define OPTION_VAL_TV_COMPOSITE_RU "ТВ (композит)"
|
||||
#define CORE_OPTION_NAME_BROADCAST_LABEL_RU "Стандарт вещания"
|
||||
#define OPTION_VAL_NTSC_RU NULL
|
||||
#define OPTION_VAL_PAL_RU "PAL (Мир)"
|
||||
|
@ -49064,10 +49064,10 @@ struct retro_core_options_v2 options_pt_pt = {
|
|||
#define OPTION_VAL_HORIZONTAL_RU "Горизонтальная"
|
||||
#define OPTION_VAL_VERTICAL_RU "Вертикальная"
|
||||
#define CORE_OPTION_NAME_ALPHA_SORTING_LABEL_RU "Альфа-сортировка"
|
||||
#define OPTION_VAL_PER_STRIP_FAST_LEAST_ACCURATE_RU "По слоям (самый быстрый, но наименее точный)"
|
||||
#define OPTION_VAL_PER_TRIANGLE_NORMAL_RU "По треугольникам (обычный)"
|
||||
#define OPTION_VAL_PER_PIXEL_ACCURATE_RU "По пикселям (самый точный, но наиболее медленный)"
|
||||
#define CORE_OPTION_NAME_OIT_ABUFFER_SIZE_LABEL_RU NULL
|
||||
#define OPTION_VAL_PER_STRIP_FAST_LEAST_ACCURATE_RU "По слоям (самая быстрая, наименее точная)"
|
||||
#define OPTION_VAL_PER_TRIANGLE_NORMAL_RU "По треугольникам (стандартная)"
|
||||
#define OPTION_VAL_PER_PIXEL_ACCURATE_RU "По пикселям (точная, самая медленная)"
|
||||
#define CORE_OPTION_NAME_OIT_ABUFFER_SIZE_LABEL_RU "Размер накопительного буфера пикселей"
|
||||
#define CORE_OPTION_NAME_OIT_ABUFFER_SIZE_INFO_0_RU "Большие значения могут требоваться для правильного отображения высоких разрешений."
|
||||
#define OPTION_VAL_512MB_RU "512 МБ"
|
||||
#define OPTION_VAL_1GB_RU "1 ГБ"
|
||||
|
@ -49078,21 +49078,21 @@ struct retro_core_options_v2 options_pt_pt = {
|
|||
#define CORE_OPTION_NAME_EMULATE_FRAMEBUFFER_LABEL_RU "Полная эмуляция фреймбуфера"
|
||||
#define CORE_OPTION_NAME_EMULATE_FRAMEBUFFER_INFO_0_RU "Включает полную эмуляцию кадрового буфера в VRAM. Полезно для игр, которые напрямую производят чтение или запись фреймбуфера в VRAM. При включении внутреннее разрешение будет принудительно установлено в 640x480 и возможно сильное падение скорости."
|
||||
#define CORE_OPTION_NAME_ENABLE_RTTB_LABEL_RU "Включить буфер рендера в текстуру"
|
||||
#define CORE_OPTION_NAME_ENABLE_RTTB_INFO_0_RU NULL
|
||||
#define CORE_OPTION_NAME_ENABLE_RTTB_INFO_0_RU "Копирует отрисованные текстуры из GPU обратно в VRAM. Данная настройка обычно включена для игр, которые этого требуют. При включении не используется масштабирование рендеринга текстур и возможно падение производительности."
|
||||
#define CORE_OPTION_NAME_MIPMAPPING_LABEL_RU "MIP-текстурирование"
|
||||
#define CORE_OPTION_NAME_FOG_LABEL_RU "Эффекты тумана"
|
||||
#define CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_LABEL_RU "Модификатор объема"
|
||||
#define CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_INFO_0_RU "Функция графического процессора Dreamcast, которая обычно используется играми для отрисовки теней объектов. По умолчанию она должна быть включена - влияние на производительность обычно минимально или незначительно."
|
||||
#define CORE_OPTION_NAME_ANISOTROPIC_FILTERING_LABEL_RU "Анизотропная фильтрация"
|
||||
#define CORE_OPTION_NAME_ANISOTROPIC_FILTERING_INFO_0_RU NULL
|
||||
#define CORE_OPTION_NAME_TEXTURE_FILTERING_LABEL_RU "Сглаживание текстур"
|
||||
#define CORE_OPTION_NAME_TEXTURE_FILTERING_INFO_0_RU NULL
|
||||
#define OPTION_VAL_1_RU NULL
|
||||
#define OPTION_VAL_2_RU NULL
|
||||
#define CORE_OPTION_NAME_ANISOTROPIC_FILTERING_INFO_0_RU "Улучшает качество текстур на поверхностях под непрямыми углами обзора по отношению к камере. Более высокие значения повышают требования к GPU. Изменения настройки вступают в силу при перезапуске."
|
||||
#define CORE_OPTION_NAME_TEXTURE_FILTERING_LABEL_RU "Фильтрация текстур"
|
||||
#define CORE_OPTION_NAME_TEXTURE_FILTERING_INFO_0_RU "Используемый режим фильтрации текстур. Применяется для принудительной фильтрации всех текстур, чтобы получить более чёткое (или сглаженное) изображение, отличное от стандартного. Любое значение не по умолчанию может приводить к ошибкам рендеринга. Для применения настройки требуется перезапуск."
|
||||
#define OPTION_VAL_1_RU "Форс. методом ближайшего соседа"
|
||||
#define OPTION_VAL_2_RU "Форс. линейное"
|
||||
#define CORE_OPTION_NAME_DELAY_FRAME_SWAPPING_LABEL_RU "Задержка замены кадров"
|
||||
#define CORE_OPTION_NAME_DELAY_FRAME_SWAPPING_INFO_0_RU "Помогает избегать мерцания экрана или артефактов видео. Не рекомендуется на медленных платформах."
|
||||
#define CORE_OPTION_NAME_DETECT_VSYNC_SWAP_INTERVAL_LABEL_RU NULL
|
||||
#define CORE_OPTION_NAME_DETECT_VSYNC_SWAP_INTERVAL_INFO_0_RU NULL
|
||||
#define CORE_OPTION_NAME_DELAY_FRAME_SWAPPING_INFO_0_RU "Помогает избежать мерцания экрана или искажения заставок. Не рекомендуется на медленных платформах."
|
||||
#define CORE_OPTION_NAME_DETECT_VSYNC_SWAP_INTERVAL_LABEL_RU "Определять изменение частоты кадров"
|
||||
#define CORE_OPTION_NAME_DETECT_VSYNC_SWAP_INTERVAL_INFO_0_RU "Уведомлять фронтенд об изменениях внутренней частоты кадров (напр. с 60 до 30 к/с). Улучшает распределение кадров в играх с постоянной частотой в 30 или 20 к/с, но должно быть выключено для игр с плавающим значением частоты кадров (напр. Ecco the Dolphin, Unreal Tournament). Недоступно при вкл. опции 'Автопропуск кадров'."
|
||||
#define CORE_OPTION_NAME_PVR2_FILTERING_LABEL_RU "Фильтр постобработки PowerVR2"
|
||||
#define CORE_OPTION_NAME_PVR2_FILTERING_INFO_0_RU "Делает постобработку отображаемого изображения для имитации эффектов, специфичных для графического процессора PowerVR2 и аналоговых видеосигналов."
|
||||
#define CORE_OPTION_NAME_TEXUPSCALE_LABEL_RU "Масштабирование текстур (xBRZ)"
|
||||
|
@ -49101,14 +49101,14 @@ struct retro_core_options_v2 options_pt_pt = {
|
|||
#define OPTION_VAL_4_RU NULL
|
||||
#define OPTION_VAL_6_RU NULL
|
||||
#define CORE_OPTION_NAME_TEXUPSCALE_MAX_FILTERED_TEXTURE_SIZE_LABEL_RU NULL
|
||||
#define CORE_OPTION_NAME_NATIVE_DEPTH_INTERPOLATION_LABEL_RU NULL
|
||||
#define CORE_OPTION_NAME_NATIVE_DEPTH_INTERPOLATION_INFO_0_RU NULL
|
||||
#define CORE_OPTION_NAME_NATIVE_DEPTH_INTERPOLATION_LABEL_RU "Нативная глубина интерполяции"
|
||||
#define CORE_OPTION_NAME_NATIVE_DEPTH_INTERPOLATION_INFO_0_RU "Помогает при проблемах с глубиной и искажением текстур на видеокартах AMD. В ряде случаев также устраняет проблемы на видеокартах Intel."
|
||||
#define CORE_OPTION_NAME_THREADED_RENDERING_LABEL_RU "Рендеринг в отдельном потоке"
|
||||
#define CORE_OPTION_NAME_THREADED_RENDERING_INFO_0_RU "Запускает графический и центральный процессоры в разных потоках. Настоятельно рекомендуется."
|
||||
#define CORE_OPTION_NAME_AUTO_SKIP_FRAME_LABEL_RU "Автоматический пропуск кадров"
|
||||
#define CORE_OPTION_NAME_AUTO_SKIP_FRAME_INFO_0_RU NULL
|
||||
#define CORE_OPTION_NAME_AUTO_SKIP_FRAME_INFO_0_RU "Автоматически пропускать кадры при замедлении эмулятора. Применяется только с вкл. опцией 'Рендеринг в отдельном потоке'."
|
||||
#define OPTION_VAL_SOME_RU "Нормальный"
|
||||
#define OPTION_VAL_MORE_RU NULL
|
||||
#define OPTION_VAL_MORE_RU "Максимум"
|
||||
#define CORE_OPTION_NAME_FRAME_SKIPPING_LABEL_RU "Пропуск кадров"
|
||||
#define CORE_OPTION_NAME_FRAME_SKIPPING_INFO_0_RU "Устанавливает количество кадров пропуска между отображаемыми кадрами."
|
||||
#define CORE_OPTION_NAME_WIDESCREEN_CHEATS_LABEL_RU "Широкоэкранные чит-коды (требуется перезапуск)"
|
||||
|
@ -49130,11 +49130,11 @@ struct retro_core_options_v2 options_pt_pt = {
|
|||
#define CORE_OPTION_NAME_TRIGGER_DEADZONE_LABEL_RU "Мёртвая зона триггеров"
|
||||
#define CORE_OPTION_NAME_DIGITAL_TRIGGERS_LABEL_RU "Цифровые триггеры"
|
||||
#define CORE_OPTION_NAME_ENABLE_PURUPURU_LABEL_RU "Модуль вибрации/Puru Puru"
|
||||
#define CORE_OPTION_NAME_ENABLE_PURUPURU_INFO_0_RU "Включает обратную связь контроллера."
|
||||
#define CORE_OPTION_NAME_NETWORK_OUTPUT_LABEL_RU NULL
|
||||
#define CORE_OPTION_NAME_NETWORK_OUTPUT_INFO_0_RU NULL
|
||||
#define CORE_OPTION_NAME_ENABLE_PURUPURU_INFO_0_RU "Включает отдачу контроллера."
|
||||
#define CORE_OPTION_NAME_NETWORK_OUTPUT_LABEL_RU "Транслировать цифровые сигналы"
|
||||
#define CORE_OPTION_NAME_NETWORK_OUTPUT_INFO_0_RU "Транслировать события цифрового ввода и состояние вибрации в TCP-порт 8000. Совместимо с параметром MAME \"-output network\"."
|
||||
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_LABEL_RU "Показать настройки светового пистолета"
|
||||
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_INFO_0_RU NULL
|
||||
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_INFO_0_RU "Включает конфигурацию параметров прицела светового пистолета. Для применения настройки требуется переключить быстрое меню."
|
||||
#define CORE_OPTION_NAME_LIGHTGUN1_CROSSHAIR_LABEL_RU "Отображение прицела пистолета 1"
|
||||
#define OPTION_VAL_WHITE_RU "Белый"
|
||||
#define OPTION_VAL_RED_RU "Красный"
|
||||
|
@ -49150,7 +49150,7 @@ struct retro_core_options_v2 options_pt_pt = {
|
|||
#define OPTION_VAL_ALL_VMUS_RU "Все VMU"
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_RU "Показывать настройки отображения блока визуальной памяти (VMU)"
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_CAT_RU "Показывать настройки отображения VMU"
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_INFO_0_RU NULL
|
||||
#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_INFO_0_RU "Включает конфигурацию размера, положения, цвета и видимости эмулируемого ЖК-экрана VMU. Для применения настройки требуется переключить быстрое меню."
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_DISPLAY_LABEL_RU "Показывать экран VMU 1"
|
||||
#define CORE_OPTION_NAME_VMU1_SCREEN_POSITION_LABEL_RU "Положение экрана VMU 1"
|
||||
#define OPTION_VAL_UPPER_LEFT_RU "Вверху слева"
|
||||
|
@ -49184,7 +49184,7 @@ struct retro_core_options_v2 options_pt_pt = {
|
|||
#define OPTION_VAL_LIGHT_PURPLE_3_22_RU "Светло-фиолетовый (3)"
|
||||
#define OPTION_VAL_LIGHT_ORANGE_23_RU "Светло-оранжевый"
|
||||
#define OPTION_VAL_ORANGE_24_RU "Оранжевый"
|
||||
#define OPTION_VAL_LIGHT_PURPLE_4_25_RU NULL
|
||||
#define OPTION_VAL_LIGHT_PURPLE_4_25_RU "Светло-фиолетовый (4)"
|
||||
#define OPTION_VAL_LIGHT_YELLOW_26_RU "Светло-жёлтый"
|
||||
#define OPTION_VAL_LIGHT_YELLOW_2_27_RU "Светло-жёлтый (2)"
|
||||
#define CORE_OPTION_NAME_VMU1_PIXEL_OFF_COLOR_LABEL_RU "Цвет выкл. пикселей VMU 1"
|
||||
|
|
Loading…
Reference in New Issue