all repos — mgba @ 9dbd15c144d49fc10dfe7e6e5485287e7650897b

mGBA Game Boy Advance Emulator

Merge branch 'master' (early part) into medusa
Vicki Pfau vi@endrift.com
Mon, 17 Feb 2020 16:20:41 -0800
commit

9dbd15c144d49fc10dfe7e6e5485287e7650897b

parent

bfcfd95413dba7889f0062c82a15850ebe7773b1

M .travis-deps.sh.travis-deps.sh

@@ -1,5 +1,9 @@

#!/bin/sh +set -e if [ $TRAVIS_OS_NAME = "osx" ]; then brew update brew install qt5 ffmpeg imagemagick sdl2 libedit libelf libpng libzip +else + sudo apt-get update + sudo apt-get -y install libseccomp2 fi
M .travis.yml.travis.yml

@@ -24,7 +24,7 @@ env: DOCKER_TAG=

before_install: - '[ -z "$DOCKER_TAG" ] || docker pull mgba/$DOCKER_TAG' -- '[ "$TRAVIS_OS_NAME" != "osx" ] || . ./.travis-deps.sh' +- '. ./.travis-deps.sh' - 'mkdir build && chmod 777 build' script:
M CHANGESCHANGES

@@ -54,6 +54,8 @@ - GB Audio: Sample inactive channels (fixes mgba.io/i/1455, mgba.io/i/1456)

- GB Memory: Better emulate 0xFEA0 region on DMG, MGB and AGB - GB Video: Fix mode 0 window edge case (fixes mgba.io/i/1519) - GB Audio: Fix channel 4 volume (fixes mgba.io/i/1529) + - GB Video: Fix color scaling in AGB mode + - GB: Fix using boot ROM with MMM01 games Other fixes: - Qt: Fix some Qt display driver race conditions - Core: Improved lockstep driver reliability (Le Hoang Quyen)

@@ -64,6 +66,9 @@ - GBA Cheats: Fix value incrementing in CB slide codes (fixes mgba.io/i/1501)

- Qt: Only show emulator restart warning once per settings saving - FFmpeg: Drain recording buffers - Shaders: Fix gba-color shader resolution (fixes mgba.io/i/1435) + - Qt: Fix LibraryController initialization (fixes mgba.io/i/1324) + - Switch: Fix audio when video rate desyncs (fixes mgba.io/i/1532) + - GB: Fix reading ROM immediately after unmapping BIOS Misc: - GBA Savedata: EEPROM performance fixes - GBA Savedata: Automatically map 1Mbit Flash files as 1Mbit Flash

@@ -94,6 +99,12 @@ - Feature: Switch from ImageMagick to FFmpeg for GIF generation

- OpenGL: Only resize textures when needed - GBA BIOS: Fix clobbered registers in CpuSet (fixes mgba.io/i/1531) - Qt: Remove What's This icon from dialogs + - CMake: Don't use libzip on embedded platforms (fixes mgba.io/i/1527) + - Qt: Printer quality of life improvements (fixes mgba.io/i/1540) + - Qt: Add copy and QoL improvements to graphic views (closes mgba.io/i/1541) + - Qt: Show list of all sprites in sprite view + - Qt: Add option for disabling OSD messages + - Core: Add more memory search ops (closes mgba.io/i/1510) 0.7.3: (2019-09-15) Emulation fixes:
M CMakeLists.txtCMakeLists.txt

@@ -250,6 +250,7 @@ set(IS_EMBEDDED ON)

set(USE_DEBUGGERS OFF) set(USE_SQLITE3 OFF) set(USE_DISCORD_RPC OFF) + set(USE_LIBZIP OFF CACHE BOOL "") endif() if(DEFINED 3DS)
M README.mdREADME.md

@@ -93,7 +93,7 @@ Other Unix-like platforms, such as OpenBSD, are known to work as well, but are untested and not fully supported.

### System requirements -Requirements are minimal[<sup>[2]</sup>](#dscaveat). Any computer that can run Windows Vista or newer should be able to handle emulation. Support for OpenGL 1.1 or newer is also required, with OpenGL 3.0 or newer for shaders and advanced features. +Requirements are minimal[<sup>[2]</sup>](#dscaveat). Any computer that can run Windows Vista or newer should be able to handle emulation. Support for OpenGL 1.1 or newer is also required, with OpenGL 3.2 or newer for shaders and advanced features. Downloads ---------
M README_DE.mdREADME_DE.md

@@ -86,7 +86,7 @@ Andere Unix-ähnliche Plattformen wie OpenBSD sind ebenfalls dafür bekannt, mit mGBA kompatibel zu sein. Sie sind jedoch nicht getestet und werden nicht voll unterstützt.

### Systemvoraussetzungen -Die Systemvoraussetzungen sind minimal. Jeder Computer, der mit Windows Vista oder neuer läuft, sollte in der Lage sein, die Emulation zu bewältigen. Unterstützung für OpenGL 1.1 oder neuer ist ebenfalls voraussgesetzt. OpenGL 3.0 oder neuer wird für Shader und erweiterte Funktionen benötigt. +Die Systemvoraussetzungen sind minimal. Jeder Computer, der mit Windows Vista oder neuer läuft, sollte in der Lage sein, die Emulation zu bewältigen. Unterstützung für OpenGL 1.1 oder neuer ist ebenfalls voraussgesetzt. OpenGL 3.2 oder neuer wird für Shader und erweiterte Funktionen benötigt. Downloads ---------

@@ -145,7 +145,7 @@ Damit wird mGBA gebaut und in `/usr/bin` und `/usr/lib` installiert. Installierte Abhängigkeiten werden automatisch erkannt. Features, die aufgrund fehlender Abhängigkeiten deaktiviert wurden, werden nach dem `cmake`-Kommando angezeigt.

Wenn Du macOS verwendest, sind die einzelnen Schritte etwas anders. Angenommen, dass Du den Homebrew-Paketmanager verwendest, werden folgende Schritte zum installieren der Abhängigkeiten und anschließenden bauen von mGBA empfohlen: - brew install cmake ffmpeg imagemagick libzip qt5 sdl2 libedit pkg-config + brew install cmake ffmpeg libzip qt5 sdl2 libedit pkg-config mkdir build cd build cmake -DCMAKE_PREFIX_PATH='brew --prefix qt5' ..

@@ -159,11 +159,11 @@ Um mGBA auf Windows zu kompilieren, wird MSYS2 empfohlen. Befolge die Installationsschritte auf der [MSYS2-Website](https://msys2.github.io). Stelle sicher, dass Du die 32-Bit-Version ("MSYS2 MinGW 32-bit") (oder die 64-Bit-Version "MSYS2 MinGW 64-bit", wenn Du mGBA für x86_64 kompilieren willst) verwendest und führe folgendes Kommando (einschließlich der Klammern) aus, um alle benötigten Abhängigkeiten zu installieren. Bitte beachte, dass dafür über 1100MiB an Paketen heruntergeladen werden, was eine Weile dauern kann:

Für x86 (32 Bit): - pacman -Sy --needed base-devel git mingw-w64-i686-{cmake,ffmpeg,gcc,gdb,imagemagick,libelf,libepoxy,libzip,pkg-config,qt5,SDL2,ntldd-git} + pacman -Sy --needed base-devel git mingw-w64-i686-{cmake,ffmpeg,gcc,gdb,libelf,libepoxy,libzip,pkg-config,qt5,SDL2,ntldd-git} Für x86_64 (64 Bit): - pacman -Sy --needed base-devel git mingw-w64-x86_64-{cmake,ffmpeg,gcc,gdb,imagemagick,libelf,libepoxy,libzip,pkg-config,qt5,SDL2,ntldd-git} + pacman -Sy --needed base-devel git mingw-w64-x86_64-{cmake,ffmpeg,gcc,gdb,libelf,libepoxy,libzip,pkg-config,qt5,SDL2,ntldd-git} Lade den aktuellen mGBA-Quellcode mithilfe des folgenden Kommandos herunter:
M include/mgba/core/mem-search.hinclude/mgba/core/mem-search.h

@@ -22,7 +22,11 @@ enum mCoreMemorySearchOp {

mCORE_MEMORY_SEARCH_EQUAL, mCORE_MEMORY_SEARCH_GREATER, mCORE_MEMORY_SEARCH_LESS, + mCORE_MEMORY_SEARCH_ANY, mCORE_MEMORY_SEARCH_DELTA, + mCORE_MEMORY_SEARCH_DELTA_POSITIVE, + mCORE_MEMORY_SEARCH_DELTA_NEGATIVE, + mCORE_MEMORY_SEARCH_DELTA_ANY, }; struct mCoreMemorySearchParams {
M res/patrons.txtres/patrons.txt

@@ -1,8 +1,9 @@

Jaime J. Denizard -Fog -Philip Horton +Benedikt Feih Oskenso Kashi +The Libretro Team Mored1984 -Rohit Nirmal Rhys Powell +Johnathan Roatch Yuri Kunde Schlesner +Voidheim
M src/core/mem-search.csrc/core/mem-search.c

@@ -19,6 +19,14 @@ return value < match;

case mCORE_MEMORY_SEARCH_EQUAL: case mCORE_MEMORY_SEARCH_DELTA: return value == match; + case mCORE_MEMORY_SEARCH_DELTA_POSITIVE: + return value > 0; + case mCORE_MEMORY_SEARCH_DELTA_NEGATIVE: + return value < 0; + case mCORE_MEMORY_SEARCH_DELTA_ANY: + return value != 0; + case mCORE_MEMORY_SEARCH_ANY: + return true; } return false; }

@@ -244,20 +252,20 @@ bool _testGuess(struct mCore* core, struct mCoreMemorySearchResult* res, const struct mCoreMemorySearchParams* params) {

int64_t value; int32_t offset = 0; char* end; - if (params->op == mCORE_MEMORY_SEARCH_DELTA) { + if (params->op >= mCORE_MEMORY_SEARCH_DELTA) { offset = res->oldValue; } value = strtoll(params->valueStr, &end, 10); if (end) { res->oldValue += value; - if (_op(core->rawRead8(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier, value + offset, params->op)) { + if (_op(core->rawRead8(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { return true; } - if (!(res->address & 1) && (res->width >= 2 || res->width == -1) && _op(core->rawRead16(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier, value + offset, params->op)) { + if (!(res->address & 1) && (res->width >= 2 || res->width == -1) && _op(core->rawRead16(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { return true; } - if (!(res->address & 3) && (res->width >= 4 || res->width == -1) && _op(core->rawRead32(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier, value + offset, params->op)) { + if (!(res->address & 3) && (res->width >= 4 || res->width == -1) && _op(core->rawRead32(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { return true; } res->oldValue -= value;

@@ -266,13 +274,13 @@

value = strtoll(params->valueStr, &end, 16); if (end) { res->oldValue += value; - if (_op(core->rawRead8(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier, value + offset, params->op)) { + if (_op(core->rawRead8(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { return true; } - if (!(res->address & 1) && (res->width >= 2 || res->width == -1) && _op(core->rawRead16(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier, value + offset, params->op)) { + if (!(res->address & 1) && (res->width >= 2 || res->width == -1) && _op(core->rawRead16(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { return true; } - if (!(res->address & 3) && (res->width >= 4 || res->width == -1) && _op(core->rawRead32(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier, value + offset, params->op)) { + if (!(res->address & 3) && (res->width >= 4 || res->width == -1) && _op(core->rawRead32(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { return true; } res->oldValue -= value;

@@ -293,10 +301,7 @@ mCoreMemorySearchResultsResize(inout, -1);

--i; } } else if (params->type == mCORE_MEMORY_SEARCH_INT) { - int32_t oldValue = params->valueInt; - if (params->op == mCORE_MEMORY_SEARCH_DELTA) { - oldValue += res->oldValue; - } + int32_t match = params->valueInt; int32_t value = 0; switch (params->width) { case 1:

@@ -311,7 +316,11 @@ break;

default: break; } - if (!_op(value, oldValue, params->op)) { + int32_t opValue = value; + if (params->op >= mCORE_MEMORY_SEARCH_DELTA) { + opValue -= res->oldValue; + } + if (!_op(opValue, match, params->op)) { *res = *mCoreMemorySearchResultsGetPointer(inout, mCoreMemorySearchResultsSize(inout) - 1); mCoreMemorySearchResultsResize(inout, -1); --i;

@@ -322,7 +331,7 @@ }

break; case mCORE_MEMORY_SEARCH_STRING: case mCORE_MEMORY_SEARCH_GUESS: - // TOOD + // TODO break; } }
M src/gb/gb.csrc/gb/gb.c

@@ -415,23 +415,6 @@ struct GB* gb = (struct GB*) cpu->master;

gb->memory.romBase = gb->memory.rom; GBDetectModel(gb); - if (gb->biosVf) { - if (!GBIsBIOS(gb->biosVf)) { - gb->biosVf->close(gb->biosVf); - gb->biosVf = NULL; - } else { - GBMapBIOS(gb); - cpu->a = 0; - cpu->f.packed = 0; - cpu->c = 0; - cpu->e = 0; - cpu->h = 0; - cpu->l = 0; - cpu->sp = 0; - cpu->pc = 0; - } - } - cpu->b = 0; cpu->d = 0;

@@ -457,6 +440,24 @@

mTimingClear(&gb->timing); GBMemoryReset(gb); + + if (gb->biosVf) { + if (!GBIsBIOS(gb->biosVf)) { + gb->biosVf->close(gb->biosVf); + gb->biosVf = NULL; + } else { + GBMapBIOS(gb); + cpu->a = 0; + cpu->f.packed = 0; + cpu->c = 0; + cpu->e = 0; + cpu->h = 0; + cpu->l = 0; + cpu->sp = 0; + cpu->pc = 0; + } + } + GBVideoReset(&gb->video); GBTimerReset(&gb->timer); if (!gb->biosVf) {

@@ -561,18 +562,23 @@ }

void GBMapBIOS(struct GB* gb) { gb->biosVf->seek(gb->biosVf, 0, SEEK_SET); + uint8_t* oldRomBase = gb->memory.romBase; gb->memory.romBase = malloc(GB_SIZE_CART_BANK0); ssize_t size = gb->biosVf->read(gb->biosVf, gb->memory.romBase, GB_SIZE_CART_BANK0); - memcpy(&gb->memory.romBase[size], &gb->memory.rom[size], GB_SIZE_CART_BANK0 - size); + memcpy(&gb->memory.romBase[size], &oldRomBase[size], GB_SIZE_CART_BANK0 - size); if (size > 0x100) { - memcpy(&gb->memory.romBase[0x100], &gb->memory.rom[0x100], sizeof(struct GBCartridge)); + memcpy(&gb->memory.romBase[0x100], &oldRomBase[0x100], sizeof(struct GBCartridge)); } } void GBUnmapBIOS(struct GB* gb) { if (gb->memory.romBase < gb->memory.rom || gb->memory.romBase > &gb->memory.rom[gb->memory.romSize - 1]) { free(gb->memory.romBase); - gb->memory.romBase = gb->memory.rom; + if (gb->memory.mbcType == GB_MMM01) { + GBMBCSwitchBank0(gb, gb->memory.romSize / GB_SIZE_CART_BANK0 - 2); + } else { + GBMBCSwitchBank0(gb, 0); + } } // XXX: Force AGB registers for AGB-mode if (gb->model == GB_MODEL_AGB && gb->cpu->pc == 0x100) {
M src/gb/renderers/software.csrc/gb/renderers/software.c

@@ -461,8 +461,11 @@ b /= 31;

color = mColorFrom555(r | (g << 5) | (b << 10)); #else r >>= 2; + r += r >> 4; g >>= 2; + g += g >> 4; b >>= 2; + b += b >> 4; color = r | (g << 8) | (b << 16); #endif }
M src/gba/renderers/gl.csrc/gba/renderers/gl.c

@@ -64,7 +64,7 @@ "precision highp sampler2D;\n"

"precision highp isampler2D;\n"; static const GLchar* const _gl3Header = - "#version 130\n" + "#version 150 core\n" "#define OUT(n)\n" PALETTE_ENTRY "precision highp float;\n";
M src/gba/renderers/video-software.csrc/gba/renderers/video-software.c

@@ -141,6 +141,8 @@ memset(softwareRenderer->scanlineDirty, 0xFFFFFFFF, sizeof(softwareRenderer->scanlineDirty));

memset(softwareRenderer->cache, 0, sizeof(softwareRenderer->cache)); memset(softwareRenderer->nextIo, 0, sizeof(softwareRenderer->nextIo)); + softwareRenderer->lastHighlightAmount = 0; + for (i = 0; i < 4; ++i) { struct GBAVideoSoftwareBackground* bg = &softwareRenderer->bg[i]; bg->index = i;
M src/platform/opengl/gles2.csrc/platform/opengl/gles2.c

@@ -21,8 +21,17 @@ static const GLchar* const _gles2Header =

"#version 100\n" "precision mediump float;\n"; -static const GLchar* const _gl3Header = - "#version 120\n"; +static const GLchar* const _gl32VHeader = + "#version 150 core\n" + "#define attribute in\n" + "#define varying out\n"; + +static const GLchar* const _gl32FHeader = + "#version 150 core\n" + "#define varying in\n" + "#define texture2D texture\n" + "out vec4 compat_FragColor;\n" + "#define gl_FragColor compat_FragColor\n"; static const char* const _vertexShader = "attribute vec4 position;\n"

@@ -449,7 +458,7 @@ shader->fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);

const GLchar* shaderBuffer[2]; const GLubyte* version = glGetString(GL_VERSION); if (strncmp((const char*) version, "OpenGL ES ", strlen("OpenGL ES "))) { - shaderBuffer[0] = _gl3Header; + shaderBuffer[0] = _gl32VHeader; } else { shaderBuffer[0] = _gles2Header; }

@@ -460,6 +469,9 @@ shaderBuffer[1] = _nullVertexShader;

} glShaderSource(shader->vertexShader, 2, shaderBuffer, 0); + if (strncmp((const char*) version, "OpenGL ES ", strlen("OpenGL ES "))) { + shaderBuffer[0] = _gl32FHeader; + } if (fs) { shaderBuffer[1] = fs; } else {
M src/platform/qt/AssetTile.cppsrc/platform/qt/AssetTile.cpp

@@ -116,6 +116,9 @@ for (int i = 0; i < 64; ++i) {

m_ui.preview->setColor(i ^ flip, data[i]); } m_ui.preview->update(); + + QImage tile(reinterpret_cast<const uchar*>(data), 8, 8, QImage::Format_ARGB32); + m_activeTile = tile.rgbSwapped(); } void AssetTile::setFlip(bool h, bool v) {
M src/platform/qt/AssetTile.hsrc/platform/qt/AssetTile.h

@@ -21,6 +21,7 @@

public: AssetTile(QWidget* parent = nullptr); void setController(std::shared_ptr<CoreController>); + QImage activeTile() const { return m_activeTile; } public slots: void setPalette(int);

@@ -48,6 +49,7 @@ bool m_flipH = false;

bool m_flipV = false; QMap<QString, QLabel*> m_customProperties; + QImage m_activeTile; }; }
M src/platform/qt/Display.cppsrc/platform/qt/Display.cpp

@@ -26,7 +26,8 @@

switch (s_driver) { #if defined(BUILD_GL) || defined(BUILD_GLES2) || defined(USE_EPOXY) case Driver::OPENGL: - format.setVersion(3, 0); + format.setVersion(3, 2); + format.setProfile(QSurfaceFormat::CoreProfile); return new DisplayGL(format, parent); #endif #ifdef BUILD_GL

@@ -89,6 +90,10 @@ }

void Display::interframeBlending(bool lock) { m_interframeBlending = lock; +} + +void Display::showOSDMessages(bool enable) { + m_showOSD = enable; } void Display::filter(bool filter) {
M src/platform/qt/Display.hsrc/platform/qt/Display.h

@@ -44,6 +44,7 @@ bool isAspectRatioLocked() const { return m_lockAspectRatio; }

bool isIntegerScalingLocked() const { return m_lockIntegerScaling; } bool hasInterframeBlending() const { return m_interframeBlending; } bool isFiltered() const { return m_filter; } + bool isShowOSD() const { return m_showOSD; } virtual void startDrawing(std::shared_ptr<CoreController>) = 0; virtual bool isDrawing() const = 0;

@@ -68,6 +69,7 @@ virtual void forceDraw() = 0;

virtual void lockAspectRatio(bool lock); virtual void lockIntegerScaling(bool lock); virtual void interframeBlending(bool enable); + virtual void showOSDMessages(bool enable); virtual void filter(bool filter); virtual void framePosted() = 0; virtual void setShaders(struct VDir*) = 0;

@@ -89,6 +91,7 @@ static Driver s_driver;

static const int MOUSE_DISAPPEAR_TIMER = 1000; MessagePainter m_messagePainter; + bool m_showOSD = true; bool m_lockAspectRatio = false; bool m_lockIntegerScaling = false; bool m_interframeBlending = false;
M src/platform/qt/DisplayGL.cppsrc/platform/qt/DisplayGL.cpp

@@ -114,6 +114,7 @@

lockAspectRatio(isAspectRatioLocked()); lockIntegerScaling(isIntegerScalingLocked()); interframeBlending(hasInterframeBlending()); + showOSDMessages(isShowOSD()); filter(isFiltered()); #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) messagePainter()->resize(size(), isAspectRatioLocked(), devicePixelRatioF());

@@ -184,6 +185,13 @@ void DisplayGL::interframeBlending(bool enable) {

Display::interframeBlending(enable); if (m_drawThread) { QMetaObject::invokeMethod(m_painter, "interframeBlending", Q_ARG(bool, enable)); + } +} + +void DisplayGL::showOSDMessages(bool enable) { + Display::showOSDMessages(enable); + if (m_drawThread) { + QMetaObject::invokeMethod(m_painter, "showOSD", Q_ARG(bool, enable)); } }

@@ -353,6 +361,7 @@ }

void PainterGL::resize(const QSize& size) { m_size = size; + m_window->setSize(m_size); if (m_started && !m_active) { forceDraw(); }

@@ -370,6 +379,10 @@ }

void PainterGL::interframeBlending(bool enable) { m_backend->interframeBlending = enable; +} + +void PainterGL::showOSD(bool enable) { + m_showOSD = enable; } void PainterGL::filter(bool filter) {

@@ -460,7 +473,7 @@ float r = m_surface->devicePixelRatio();

m_backend->resized(m_backend, m_size.width() * r, m_size.height() * r); m_backend->drawFrame(m_backend); m_painter.endNativePainting(); - if (m_messagePainter) { + if (m_showOSD && m_messagePainter) { m_messagePainter->paint(&m_painter); } }
M src/platform/qt/DisplayGL.hsrc/platform/qt/DisplayGL.h

@@ -29,6 +29,8 @@ #include "VideoProxy.h"

#include "platform/video-backend.h" +class QOpenGLPaintDevice; + namespace QGBA { class PainterGL;

@@ -54,6 +56,7 @@ void forceDraw() override;

void lockAspectRatio(bool lock) override; void lockIntegerScaling(bool lock) override; void interframeBlending(bool enable) override; + void showOSDMessages(bool enable) override; void filter(bool filter) override; void framePosted() override; void setShaders(struct VDir*) override;

@@ -100,6 +103,7 @@ void resize(const QSize& size);

void lockAspectRatio(bool lock); void lockIntegerScaling(bool lock); void interframeBlending(bool enable); + void showOSD(bool enable); void filter(bool filter); void resizeContext();

@@ -119,12 +123,13 @@ QQueue<uint32_t*> m_queue;

QPainter m_painter; QMutex m_mutex; QWindow* m_surface; - QPaintDevice* m_window; + QOpenGLPaintDevice* m_window; QOpenGLContext* m_gl; bool m_active = false; bool m_started = false; std::shared_ptr<CoreController> m_context = nullptr; bool m_supportsShaders; + bool m_showOSD; VideoShader m_shader{}; VideoBackend* m_backend = nullptr; QSize m_size;
M src/platform/qt/DisplayQt.cppsrc/platform/qt/DisplayQt.cpp

@@ -123,5 +123,7 @@ painter.setOpacity(0.5);

} painter.drawImage(full, m_backing, QRect(0, 0, m_width, m_height)); painter.setOpacity(1); - messagePainter()->paint(&painter); + if (isShowOSD()) { + messagePainter()->paint(&painter); + } }
M src/platform/qt/MapView.cppsrc/platform/qt/MapView.cpp

@@ -22,7 +22,9 @@ #include <mgba/internal/gb/gb.h>

#include <mgba/internal/gb/memory.h> #endif +#include <QAction> #include <QButtonGroup> +#include <QClipboard> #include <QFontDatabase> #include <QMouseEvent> #include <QRadioButton>

@@ -88,11 +90,19 @@ selectMap(i);

}); group->addButton(button); } -#ifdef USE_PNG connect(m_ui.exportButton, &QAbstractButton::clicked, this, &MapView::exportMap); -#else - m_ui.exportButton->setVisible(false); -#endif + connect(m_ui.copyButton, &QAbstractButton::clicked, this, &MapView::copyMap); + + QAction* exportAction = new QAction(this); + exportAction->setShortcut(QKeySequence::Save); + connect(exportAction, &QAction::triggered, this, &MapView::exportMap); + addAction(exportAction); + + QAction* copyAction = new QAction(this); + copyAction->setShortcut(QKeySequence::Copy); + connect(copyAction, &QAction::triggered, this, &MapView::copyMap); + addAction(copyAction); + m_ui.map->installEventFilter(this); m_ui.tile->addCustomProperty("mapAddr", tr("Map Addr.")); m_ui.tile->addCustomProperty("flip", tr("Mirror"));

@@ -211,7 +221,7 @@ for (int j = 0; j < height; ++j) {

mBitmapCacheCleanRow(bitmapCache, m_bitmapStatus, j); memcpy(static_cast<void*>(&bgBits[width * j * 4]), mBitmapCacheGetRow(bitmapCache, j), width * 4); } - m_rawMap = m_rawMap.rgbSwapped(); + m_rawMap = m_rawMap.convertToFormat(QImage::Format_RGB32).rgbSwapped(); } else { mMapCache* mapCache = mMapCacheSetGetPointer(&m_cacheSet->maps, m_map); int tilesW = 1 << mMapCacheSystemInfoGetTilesWide(mapCache->sysConfig);

@@ -242,23 +252,18 @@ updateTilesGBA(force);

} #endif -#ifdef USE_PNG void MapView::exportMap() { QString filename = GBAApp::app()->getSaveFileName(this, tr("Export map"), tr("Portable Network Graphics (*.png)")); - VFile* vf = VFileDevice::open(filename, O_WRONLY | O_CREAT | O_TRUNC); - if (!vf) { - LOG(QT, ERROR) << tr("Failed to open output PNG file: %1").arg(filename); + if (filename.isNull()) { return; } CoreController::Interrupter interrupter(m_controller); - png_structp png = PNGWriteOpen(vf); - png_infop info = PNGWriteHeaderA(png, m_rawMap.width(), m_rawMap.height()); + m_rawMap.save(filename, "PNG"); +} - QImage map = m_rawMap.rgbSwapped(); - PNGWritePixelsA(png, map.width(), map.height(), map.bytesPerLine() / 4, static_cast<const void*>(map.constBits())); - PNGWriteClose(png, info); - vf->close(vf); -} -#endif +void MapView::copyMap() { + CoreController::Interrupter interrupter(m_controller); + GBAApp::app()->clipboard()->setImage(m_rawMap); +}
M src/platform/qt/MapView.hsrc/platform/qt/MapView.h

@@ -21,10 +21,9 @@

public: MapView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr); -#ifdef USE_PNG public slots: void exportMap(); -#endif + void copyMap(); private slots: void selectMap(int);
M src/platform/qt/MapView.uisrc/platform/qt/MapView.ui

@@ -13,38 +13,7 @@ </property>

<property name="windowTitle"> <string>Maps</string> </property> - <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0"> - <item row="3" column="0"> - <widget class="QGBA::AssetTile" name="tile"/> - </item> - <item row="2" column="0"> - <widget class="QGBA::AssetInfo" name="bgInfo"> - <property name="title"> - <string/> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"/> - </widget> - </item> - <item row="5" column="0"> - <widget class="QPushButton" name="exportButton"> - <property name="text"> - <string>Export</string> - </property> - </widget> - </item> - <item row="4" column="0"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> - </item> + <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0"> <item row="1" column="0"> <layout class="QVBoxLayout" name="bgLayout"> <item>

@@ -79,7 +48,7 @@ </layout>

</item> </layout> </item> - <item row="1" column="1" rowspan="5" colspan="2"> + <item row="1" column="1" rowspan="6" colspan="2"> <widget class="QScrollArea" name="scrollArea"> <property name="widgetResizable"> <bool>true</bool>

@@ -133,19 +102,57 @@ </layout>

</widget> </widget> </item> + <item row="3" column="0"> + <widget class="QGBA::AssetTile" name="tile"/> + </item> + <item row="4" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="6" column="0"> + <widget class="QPushButton" name="exportButton"> + <property name="text"> + <string>Export</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QGBA::AssetInfo" name="bgInfo"> + <property name="title"> + <string/> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"/> + </widget> + </item> + <item row="5" column="0"> + <widget class="QPushButton" name="copyButton"> + <property name="text"> + <string>Copy</string> + </property> + </widget> + </item> </layout> </widget> <customwidgets> <customwidget> - <class>QGBA::AssetInfo</class> + <class>QGBA::AssetTile</class> <extends>QGroupBox</extends> - <header>AssetInfo.h</header> + <header>AssetTile.h</header> <container>1</container> </customwidget> <customwidget> - <class>QGBA::AssetTile</class> + <class>QGBA::AssetInfo</class> <extends>QGroupBox</extends> - <header>AssetTile.h</header> + <header>AssetInfo.h</header> <container>1</container> </customwidget> </customwidgets>
M src/platform/qt/MemorySearch.cppsrc/platform/qt/MemorySearch.cpp

@@ -35,19 +35,28 @@ mCoreMemorySearchResultsDeinit(&m_results);

} bool MemorySearch::createParams(mCoreMemorySearchParams* params) { - params->memoryFlags = mCORE_MEMORY_RW; + params->memoryFlags = mCORE_MEMORY_WRITE; + if (m_ui.searchROM->isChecked()) { + params->memoryFlags |= mCORE_MEMORY_READ; + } mCore* core = m_controller->thread()->core; QByteArray string; bool ok = false; if (m_ui.typeNum->isChecked()) { params->type = mCORE_MEMORY_SEARCH_INT; - if (m_ui.opDelta->isChecked()) { + if (m_ui.opDelta->isChecked() || m_ui.opDelta0->isChecked()) { params->op = mCORE_MEMORY_SEARCH_DELTA; } else if (m_ui.opGreater->isChecked()) { params->op = mCORE_MEMORY_SEARCH_GREATER; } else if (m_ui.opLess->isChecked()) { params->op = mCORE_MEMORY_SEARCH_LESS; + } else if (m_ui.opUnknown->isChecked()) { + params->op = mCORE_MEMORY_SEARCH_ANY; + } else if (m_ui.opDeltaPositive->isChecked()) { + params->op = mCORE_MEMORY_SEARCH_DELTA_POSITIVE; + } else if (m_ui.opDeltaNegative->isChecked()) { + params->op = mCORE_MEMORY_SEARCH_DELTA_NEGATIVE; } else { params->op = mCORE_MEMORY_SEARCH_EQUAL; }

@@ -103,9 +112,15 @@ }

} if (m_ui.numGuess->isChecked()) { params->type = mCORE_MEMORY_SEARCH_GUESS; - m_string = m_ui.value->text().toLocal8Bit(); + if (m_ui.opDelta0->isChecked()) { + m_string = QString("0").toLocal8Bit(); + } else { + m_string = m_ui.value->text().toLocal8Bit(); + } params->valueStr = m_string.constData(); ok = true; + } else if (m_ui.opDelta0->isChecked()) { + params->valueInt = 0; } } if (m_ui.typeStr->isChecked()) {

@@ -140,6 +155,9 @@ CoreController::Interrupter interrupter(m_controller);

mCore* core = m_controller->thread()->core; if (createParams(&params)) { + if (m_ui.opUnknown->isChecked()) { + params.op = mCORE_MEMORY_SEARCH_DELTA_ANY; + } mCoreMemorySearchRepeat(core, &params, &m_results); }

@@ -153,6 +171,9 @@

m_ui.results->clearContents(); m_ui.results->setRowCount(mCoreMemorySearchResultsSize(&m_results)); m_ui.opDelta->setEnabled(false); + m_ui.opDelta0->setEnabled(false); + m_ui.opDeltaPositive->setEnabled(false); + m_ui.opDeltaNegative->setEnabled(false); for (size_t i = 0; i < mCoreMemorySearchResultsSize(&m_results); ++i) { mCoreMemorySearchResult* result = mCoreMemorySearchResultsGetPointer(&m_results, i); QTableWidgetItem* item = new QTableWidgetItem(QString("%1").arg(result->address, 8, 16, QChar('0')));

@@ -214,8 +235,17 @@ }

m_ui.results->setItem(i, 1, item); m_ui.results->setItem(i, 2, type); m_ui.opDelta->setEnabled(true); + m_ui.opDelta0->setEnabled(true); + m_ui.opDeltaPositive->setEnabled(true); + m_ui.opDeltaNegative->setEnabled(true); } if (m_ui.opDelta->isChecked() && !m_ui.opDelta->isEnabled()) { + m_ui.opEqual->setChecked(true); + } else if (m_ui.opDelta0->isChecked() && !m_ui.opDelta0->isEnabled()) { + m_ui.opEqual->setChecked(true); + } else if (m_ui.opDeltaPositive->isChecked() && !m_ui.opDeltaPositive->isEnabled()) { + m_ui.opEqual->setChecked(true); + } else if (m_ui.opDeltaNegative->isChecked() && !m_ui.opDeltaNegative->isEnabled()) { m_ui.opEqual->setChecked(true); } m_ui.results->sortItems(0);
M src/platform/qt/MemorySearch.uisrc/platform/qt/MemorySearch.ui

@@ -6,14 +6,20 @@ <property name="geometry">

<rect> <x>0</x> <y>0</y> - <width>540</width> - <height>491</height> + <width>725</width> + <height>813</height> </rect> </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> <width>540</width> - <height>241</height> + <height>400</height> </size> </property> <property name="windowTitle">

@@ -99,21 +105,21 @@ <string notr="true">type</string>

</attribute> </widget> </item> - <item row="3" column="0" colspan="2"> + <item row="4" column="0" colspan="2"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="4" column="0"> + <item row="5" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>Width</string> </property> </widget> </item> - <item row="4" column="1"> + <item row="5" column="1"> <widget class="QRadioButton" name="bitsGuess"> <property name="text"> <string>Guess</string>

@@ -126,7 +132,7 @@ <string notr="true">width</string>

</attribute> </widget> </item> - <item row="5" column="1"> + <item row="6" column="1"> <widget class="QRadioButton" name="bits8"> <property name="text"> <string>1 Byte (8-bit)</string>

@@ -136,7 +142,7 @@ <string notr="true">width</string>

</attribute> </widget> </item> - <item row="6" column="1"> + <item row="7" column="1"> <widget class="QRadioButton" name="bits16"> <property name="text"> <string>2 Bytes (16-bit)</string>

@@ -146,7 +152,7 @@ <string notr="true">width</string>

</attribute> </widget> </item> - <item row="7" column="1"> + <item row="8" column="1"> <widget class="QRadioButton" name="bits32"> <property name="text"> <string>4 Bytes (32-bit)</string>

@@ -159,21 +165,21 @@ <string notr="true">width</string>

</attribute> </widget> </item> - <item row="8" column="0" colspan="2"> + <item row="9" column="0" colspan="2"> <widget class="Line" name="line_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="9" column="0"> + <item row="10" column="0"> <widget class="QLabel" name="label_4"> <property name="text"> <string>Number type</string> </property> </widget> </item> - <item row="9" column="1"> + <item row="10" column="1"> <widget class="QRadioButton" name="numGuess"> <property name="text"> <string>Guess</string>

@@ -183,38 +189,38 @@ <bool>true</bool>

</property> </widget> </item> - <item row="10" column="1"> + <item row="11" column="1"> <widget class="QRadioButton" name="numDec"> <property name="text"> <string>Decimal</string> </property> </widget> </item> - <item row="11" column="1"> + <item row="12" column="1"> <widget class="QRadioButton" name="numHex"> <property name="text"> <string>Hexadecimal</string> </property> </widget> </item> - <item row="12" column="0" colspan="2"> + <item row="13" column="0" colspan="2"> <widget class="Line" name="line_3"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="13" column="0"> + <item row="14" column="0"> <widget class="QLabel" name="label_5"> <property name="text"> - <string>Compare</string> + <string>Search type</string> </property> </widget> </item> - <item row="13" column="1"> + <item row="14" column="1"> <widget class="QRadioButton" name="opEqual"> <property name="text"> - <string>Equal</string> + <string>Equal to value</string> </property> <property name="checked"> <bool>true</bool>

@@ -224,39 +230,95 @@ <string notr="true">op</string>

</attribute> </widget> </item> - <item row="14" column="1"> + <item row="15" column="1"> <widget class="QRadioButton" name="opGreater"> <property name="text"> - <string>Greater</string> + <string>Greater than value</string> </property> <attribute name="buttonGroup"> <string notr="true">op</string> </attribute> </widget> </item> - <item row="15" column="1"> + <item row="16" column="1"> <widget class="QRadioButton" name="opLess"> <property name="text"> - <string>Less</string> + <string>Less than value</string> </property> <attribute name="buttonGroup"> <string notr="true">op</string> </attribute> </widget> </item> - <item row="16" column="1"> + <item row="17" column="1"> + <widget class="QRadioButton" name="opUnknown"> + <property name="text"> + <string>Unknown/changed</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">op</string> + </attribute> + </widget> + </item> + <item row="18" column="1"> <widget class="QRadioButton" name="opDelta"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> - <string>Delta</string> + <string>Changed by value</string> </property> <attribute name="buttonGroup"> <string notr="true">op</string> </attribute> </widget> </item> + <item row="21" column="1"> + <widget class="QRadioButton" name="opDelta0"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Unchanged</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">op</string> + </attribute> + </widget> + </item> + <item row="19" column="1"> + <widget class="QRadioButton" name="opDeltaPositive"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Increased</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">op</string> + </attribute> + </widget> + </item> + <item row="20" column="1"> + <widget class="QRadioButton" name="opDeltaNegative"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Decreased</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">op</string> + </attribute> + </widget> + </item> + <item row="3" column="1"> + <widget class="QCheckBox" name="searchROM"> + <property name="text"> + <string>Search ROM</string> + </property> + </widget> + </item> </layout> </item> <item row="2" column="0" colspan="2">

@@ -271,7 +333,7 @@ <layout class="QHBoxLayout" name="horizontalLayout_2">

<item> <widget class="QPushButton" name="search"> <property name="text"> - <string>Search</string> + <string>New Search</string> </property> </widget> </item>

@@ -318,10 +380,26 @@ <y>188</y>

</hint> </hints> </connection> + <connection> + <sender>opDelta0</sender> + <signal>toggled(bool)</signal> + <receiver>value</receiver> + <slot>setDisabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>231</x> + <y>768</y> + </hint> + <hint type="destinationlabel"> + <x>272</x> + <y>26</y> + </hint> + </hints> + </connection> </connections> <buttongroups> - <buttongroup name="width"/> <buttongroup name="type"/> <buttongroup name="op"/> + <buttongroup name="width"/> </buttongroups> </ui>
M src/platform/qt/ObjView.cppsrc/platform/qt/ObjView.cpp

@@ -8,7 +8,10 @@

#include "CoreController.h" #include "GBAApp.h" +#include <QAction> +#include <QClipboard> #include <QFontDatabase> +#include <QListWidgetItem> #include <QTimer> #include "LogController.h"

@@ -52,10 +55,36 @@ connect(m_ui.magnification, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [this]() {

updateTiles(true); }); connect(m_ui.exportButton, &QAbstractButton::clicked, this, &ObjView::exportObj); + connect(m_ui.copyButton, &QAbstractButton::clicked, this, &ObjView::copyObj); + + connect(m_ui.objList, &QListWidget::currentItemChanged, [this]() { + QListWidgetItem* item = m_ui.objList->currentItem(); + if (item) { + selectObj(item->data(Qt::UserRole).toInt()); + } + }); + + QAction* exportAction = new QAction(this); + exportAction->setShortcut(QKeySequence::Save); + connect(exportAction, &QAction::triggered, this, &ObjView::exportObj); + addAction(exportAction); + + QAction* copyAction = new QAction(this); + copyAction->setShortcut(QKeySequence::Copy); + connect(copyAction, &QAction::triggered, this, &ObjView::copyObj); + addAction(copyAction); } void ObjView::selectObj(int obj) { m_objId = obj; + bool blocked = m_ui.objId->blockSignals(true); + m_ui.objId->setValue(m_objId); + m_ui.objId->blockSignals(blocked); + if (m_objs.size() > obj) { + blocked = m_ui.objList->blockSignals(true); + m_ui.objList->setCurrentItem(m_objs[obj]); + m_ui.objList->blockSignals(blocked); + } updateTiles(true); }

@@ -70,6 +99,8 @@ void ObjView::updateTilesGBA(bool force) {

m_ui.objId->setMaximum(127); const GBA* gba = static_cast<const GBA*>(m_controller->thread()->core->board); const GBAObj* obj = &gba->video.oam.obj[m_objId]; + + updateObjList(128); ObjInfo newInfo; lookupObj(m_objId, &newInfo);

@@ -153,6 +184,8 @@ m_ui.objId->setMaximum(39);

const GB* gb = static_cast<const GB*>(m_controller->thread()->core->board); const GBObj* obj = &gb->video.oam.obj[m_objId]; + updateObjList(40); + ObjInfo newInfo; lookupObj(m_objId, &newInfo);

@@ -200,10 +233,38 @@ m_ui.mode->setText(tr("N/A"));

} #endif +void ObjView::updateObjList(int maxObj) { + for (int i = 0; i < maxObj; ++i) { + if (m_objs.size() <= i) { + QListWidgetItem* item = new QListWidgetItem; + item->setText(QString::number(i)); + item->setData(Qt::UserRole, i); + item->setSizeHint(QSize(64, 96)); + if (m_objId == i) { + item->setSelected(true); + } + m_objs.append(item); + m_ui.objList->addItem(item); + } + QListWidgetItem* item = m_objs[i]; + ObjInfo info; + lookupObj(i, &info); + item->setIcon(QPixmap::fromImage(std::move(compositeObj(info)))); + } +} + void ObjView::exportObj() { QString filename = GBAApp::app()->getSaveFileName(this, tr("Export sprite"), tr("Portable Network Graphics (*.png)")); + if (filename.isNull()) { + return; + } CoreController::Interrupter interrupter(m_controller); QImage obj = compositeObj(m_objInfo); obj.save(filename, "PNG"); } + +void ObjView::copyObj() { + CoreController::Interrupter interrupter(m_controller); + GBAApp::app()->clipboard()->setImage(compositeObj(m_objInfo)); +}
M src/platform/qt/ObjView.hsrc/platform/qt/ObjView.h

@@ -9,7 +9,11 @@ #include "AssetView.h"

#include "ui_ObjView.h" +#include <QList> + #include <mgba/core/tile-cache.h> + +class QListWidgetItem; namespace QGBA {

@@ -23,6 +27,7 @@ ObjView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr);

public slots: void exportObj(); + void copyObj(); private slots: void selectObj(int);

@@ -36,12 +41,16 @@ #ifdef M_CORE_GB

void updateTilesGB(bool force) override; #endif + void updateObjList(int maxObj); + Ui::ObjView m_ui; std::shared_ptr<CoreController> m_controller; mTileCacheEntry m_tileStatus[1024 * 32] = {}; // TODO: Correct size int m_objId = 0; ObjInfo m_objInfo = {}; + + QList<QListWidgetItem*> m_objs; int m_tileOffset; int m_boundary;
M src/platform/qt/ObjView.uisrc/platform/qt/ObjView.ui

@@ -6,21 +6,178 @@ <property name="geometry">

<rect> <x>0</x> <y>0</y> - <width>454</width> - <height>385</height> + <width>800</width> + <height>730</height> </rect> </property> <property name="windowTitle"> <string>Sprites</string> </property> - <layout class="QGridLayout" name="gridLayout" columnstretch="0,0,1"> - <item row="0" column="2" rowspan="4"> + <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,1" columnstretch="0,0,1,1"> + <item row="4" column="3"> + <widget class="QPushButton" name="copyButton"> + <property name="text"> + <string>Copy</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Geometry</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Position</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="x"> + <property name="minimumSize"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>0</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="tileId_3"> + <property name="text"> + <string>, </string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="y"> + <property name="minimumSize"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>0</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Dimensions</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="w"> + <property name="minimumSize"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>8</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="tileId_5"> + <property name="text"> + <string>×</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="h"> + <property name="minimumSize"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>8</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item row="0" column="2" rowspan="4" colspan="2"> <widget class="QFrame" name="frame"> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> </property> <layout class="QGridLayout" name="gridLayout_2"> - <property name="margin"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> <number>0</number> </property> <item row="0" column="0" alignment="Qt::AlignHCenter|Qt::AlignVCenter">

@@ -42,44 +199,21 @@ </item>

</layout> </widget> </item> - <item row="1" column="0"> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <item> - <widget class="QSpinBox" name="magnification"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="suffix"> - <string>×</string> - </property> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>8</number> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Magnification</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="exportButton"> - <property name="text"> - <string>Export</string> - </property> - </widget> - </item> - </layout> + <item row="0" column="1" rowspan="5"> + <widget class="QGBA::AssetTile" name="tile"> + <property name="title"> + <string>Tile</string> + </property> + </widget> + </item> + <item row="4" column="2"> + <widget class="QPushButton" name="exportButton"> + <property name="text"> + <string>Export</string> + </property> + </widget> </item> - <item row="3" column="0"> + <item row="3" column="0" rowspan="2"> <widget class="QGroupBox" name="groupBox_2"> <property name="title"> <string>Attributes</string>

@@ -383,154 +517,6 @@ </item>

</layout> </widget> </item> - <item row="0" column="1" rowspan="4"> - <widget class="QGBA::AssetTile" name="tile"> - <property name="title"> - <string>Tile</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>Geometry</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Position</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="x"> - <property name="minimumSize"> - <size> - <width>20</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>0</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="tileId_3"> - <property name="text"> - <string>, </string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="y"> - <property name="minimumSize"> - <size> - <width>20</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>0</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Dimensions</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="w"> - <property name="minimumSize"> - <size> - <width>20</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>8</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="tileId_5"> - <property name="text"> - <string>×</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="h"> - <property name="minimumSize"> - <size> - <width>20</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>8</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> <item row="0" column="0"> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item>

@@ -567,6 +553,64 @@ </property>

</widget> </item> </layout> + </item> + <item row="1" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QSpinBox" name="magnification"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="suffix"> + <string>×</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>8</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Magnification</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="5" column="0" colspan="4"> + <widget class="QListWidget" name="objList"> + <property name="iconSize"> + <size> + <width>64</width> + <height>64</height> + </size> + </property> + <property name="flow"> + <enum>QListView::LeftToRight</enum> + </property> + <property name="resizeMode"> + <enum>QListView::Adjust</enum> + </property> + <property name="gridSize"> + <size> + <width>64</width> + <height>96</height> + </size> + </property> + <property name="viewMode"> + <enum>QListView::IconMode</enum> + </property> + <property name="uniformItemSizes"> + <bool>true</bool> + </property> + </widget> </item> </layout> </widget>
M src/platform/qt/OverrideView.cppsrc/platform/qt/OverrideView.cpp

@@ -42,9 +42,12 @@ s_mbcList.append(GB_MBC3);

s_mbcList.append(GB_MBC3_RTC); s_mbcList.append(GB_MBC5); s_mbcList.append(GB_MBC5_RUMBLE); + s_mbcList.append(GB_MBC6); s_mbcList.append(GB_MBC7); + s_mbcList.append(GB_MMM01); s_mbcList.append(GB_POCKETCAM); s_mbcList.append(GB_TAMA5); + s_mbcList.append(GB_HuC1); s_mbcList.append(GB_HuC3); } if (s_gbModelList.isEmpty()) {
M src/platform/qt/OverrideView.uisrc/platform/qt/OverrideView.ui

@@ -321,17 +321,32 @@ </property>

</item> <item> <property name="text"> + <string>MBC6</string> + </property> + </item> + <item> + <property name="text"> <string>MBC7</string> </property> </item> <item> <property name="text"> + <string>MMM01</string> + </property> + </item> + <item> + <property name="text"> <string>Pocket Cam</string> </property> </item> <item> <property name="text"> <string>TAMA5</string> + </property> + </item> + <item> + <property name="text"> + <string>HuC-1</string> </property> </item> <item>
M src/platform/qt/PrinterView.cppsrc/platform/qt/PrinterView.cpp

@@ -8,6 +8,7 @@

#include "CoreController.h" #include "GBAApp.h" +#include <QAction> #include <QPainter> using namespace QGBA;

@@ -24,6 +25,22 @@ connect(m_ui.hurry, &QAbstractButton::clicked, this, &PrinterView::printAll);

connect(m_ui.tear, &QAbstractButton::clicked, this, &PrinterView::clear); connect(m_ui.buttonBox, &QDialogButtonBox::accepted, this, &PrinterView::save); m_timer.setInterval(80); + + connect(m_ui.magnification, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [this](int mag) { + if (m_image.isNull()) { + return; + } + int oldMag = m_ui.image->size().width() / m_image.size().width(); + m_ui.image->setPixmap(m_image.scaled(m_image.size() * mag)); + m_ui.image->setFixedWidth(m_image.size().width() * mag); + m_ui.image->setFixedHeight(m_ui.image->size().height() / oldMag * mag); + }); + + QAction* save = new QAction(this); + save->setShortcut(QKeySequence::Save); + connect(save, &QAction::triggered, this, &PrinterView::save); + addAction(save); + clear(); }

@@ -52,22 +69,22 @@ QPainter painter(&pixmap);

painter.drawPixmap(0, 0, m_image); painter.drawImage(0, m_image.height(), image); m_image = pixmap; - m_ui.image->setPixmap(m_image); + m_ui.image->setPixmap(m_image.scaled(m_image.size() * m_ui.magnification->value())); m_timer.start(); m_ui.hurry->setEnabled(true); } void PrinterView::printLine() { - m_ui.image->setFixedHeight(m_ui.image->height() + 1); + m_ui.image->setFixedHeight(m_ui.image->height() + m_ui.magnification->value()); m_ui.scrollArea->ensureVisible(0, m_ui.image->height(), 0, 0); - if (m_ui.image->height() >= m_image.height()) { + if (m_ui.image->height() >= m_image.height() * m_ui.magnification->value()) { printAll(); } } void PrinterView::printAll() { m_timer.stop(); - m_ui.image->setFixedHeight(m_image.height()); + m_ui.image->setFixedHeight(m_image.height() * m_ui.magnification->value()); m_controller->endPrint(); m_ui.buttonBox->button(QDialogButtonBox::Save)->setEnabled(true); m_ui.hurry->setEnabled(false);
M src/platform/qt/PrinterView.uisrc/platform/qt/PrinterView.ui

@@ -6,15 +6,15 @@ <property name="geometry">

<rect> <x>0</x> <y>0</y> - <width>241</width> - <height>311</height> + <width>246</width> + <height>425</height> </rect> </property> <property name="windowTitle"> <string>Game Boy Printer</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> - <item alignment="Qt::AlignHCenter"> + <item> <widget class="QScrollArea" name="scrollArea"> <property name="frameShape"> <enum>QFrame::NoFrame</enum>

@@ -23,10 +23,15 @@ <property name="widgetResizable">

<bool>true</bool> </property> <widget class="QWidget" name="scrollAreaWidgetContents"> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="spacing"> - <number>0</number> - </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>234</width> + <height>249</height> + </rect> + </property> + <layout class="QGridLayout" name="gridLayout" rowstretch="1,0,1" columnminimumwidth="0,160,0"> <property name="leftMargin"> <number>0</number> </property>

@@ -39,14 +44,36 @@ </property>

<property name="bottomMargin"> <number>0</number> </property> - <item> + <property name="spacing"> + <number>0</number> + </property> + <item row="0" column="1"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> </spacer> </item> - <item> + <item row="0" column="0"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1"> <widget class="QLabel" name="image"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">

@@ -60,18 +87,12 @@ <width>160</width>

<height>1</height> </size> </property> - <property name="maximumSize"> - <size> - <width>160</width> - <height>16777215</height> - </size> - </property> <property name="alignment"> <set>Qt::AlignHCenter|Qt::AlignTop</set> </property> </widget> </item> - <item> + <item row="2" column="1"> <widget class="Line" name="line"> <property name="frameShadow"> <enum>QFrame::Plain</enum>

@@ -81,6 +102,19 @@ <enum>Qt::Horizontal</enum>

</property> </widget> </item> + <item row="0" column="2"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> </layout> </widget> </widget>

@@ -103,6 +137,62 @@ <property name="text">

<string>Tear off</string> </property> </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QSpinBox" name="magnification"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="suffix"> + <string>×</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>8</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Magnification</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> </item> </layout> </item>
M src/platform/qt/SettingsView.cppsrc/platform/qt/SettingsView.cpp

@@ -371,6 +371,7 @@ saveSetting("autofireThreshold", m_ui.autofireThreshold);

saveSetting("lockAspectRatio", m_ui.lockAspectRatio); saveSetting("lockIntegerScaling", m_ui.lockIntegerScaling); saveSetting("interframeBlending", m_ui.interframeBlending); + saveSetting("showOSD", m_ui.showOSD); saveSetting("volume", m_ui.volume); saveSetting("mute", m_ui.mute); saveSetting("fastForwardVolume", m_ui.volumeFf);

@@ -546,6 +547,7 @@ loadSetting("autofireThreshold", m_ui.autofireThreshold);

loadSetting("lockAspectRatio", m_ui.lockAspectRatio); loadSetting("lockIntegerScaling", m_ui.lockIntegerScaling); loadSetting("interframeBlending", m_ui.interframeBlending); + loadSetting("showOSD", m_ui.showOSD, true); loadSetting("volume", m_ui.volume, 0x100); loadSetting("mute", m_ui.mute, false); loadSetting("fastForwardVolume", m_ui.volumeFf, m_ui.volume->value());
M src/platform/qt/SettingsView.uisrc/platform/qt/SettingsView.ui

@@ -6,7 +6,7 @@ <property name="geometry">

<rect> <x>0</x> <y>0</y> - <width>849</width> + <width>885</width> <height>797</height> </rect> </property>

@@ -562,7 +562,21 @@ <string>Pause when inactive</string>

</property> </widget> </item> - <item row="10" column="1"> + <item row="9" column="1"> + <widget class="QCheckBox" name="pauseOnMinimize"> + <property name="text"> + <string>Pause when minimized</string> + </property> + </widget> + </item> + <item row="10" column="0" colspan="2"> + <widget class="Line" name="line_17"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item row="11" column="1"> <widget class="QCheckBox" name="showFps"> <property name="text"> <string>Show FPS in title bar</string>

@@ -572,71 +586,74 @@ <bool>true</bool>

</property> </widget> </item> - <item row="12" column="0" colspan="2"> - <widget class="Line" name="line_13"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <item row="13" column="1"> + <widget class="QCheckBox" name="useDiscordPresence"> + <property name="text"> + <string>Enable Discord Rich Presence</string> </property> </widget> </item> - <item row="15" column="0" colspan="2"> - <widget class="Line" name="line_16"> + <item row="14" column="0" colspan="2"> + <widget class="Line" name="line_13"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="16" column="1"> - <widget class="QCheckBox" name="cheatAutosave"> + <item row="15" column="1"> + <widget class="QCheckBox" name="autosave"> <property name="text"> - <string>Automatically save cheats</string> + <string>Automatically save state</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> - <item row="17" column="1"> - <widget class="QCheckBox" name="cheatAutoload"> + <item row="16" column="1"> + <widget class="QCheckBox" name="autoload"> <property name="text"> - <string>Automatically load cheats</string> + <string>Automatically load state</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> - <item row="13" column="1"> - <widget class="QCheckBox" name="autosave"> + <item row="17" column="0" colspan="2"> + <widget class="Line" name="line_16"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item row="18" column="1"> + <widget class="QCheckBox" name="cheatAutosave"> <property name="text"> - <string>Automatically save state</string> + <string>Automatically save cheats</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> - <item row="14" column="1"> - <widget class="QCheckBox" name="autoload"> + <item row="19" column="1"> + <widget class="QCheckBox" name="cheatAutoload"> <property name="text"> - <string>Automatically load state</string> + <string>Automatically load cheats</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> - <item row="11" column="1"> - <widget class="QCheckBox" name="useDiscordPresence"> + <item row="12" column="1"> + <widget class="QCheckBox" name="showOSD"> <property name="text"> - <string>Enable Discord Rich Presence</string> + <string>Show OSD messages</string> </property> - </widget> - </item> - <item row="9" column="1"> - <widget class="QCheckBox" name="pauseOnMinimize"> - <property name="text"> - <string>Pause when minimized</string> + <property name="checked"> + <bool>true</bool> </property> </widget> </item>

@@ -2106,6 +2123,16 @@ <sender>fastForwardHeldUnbounded</sender>

<signal>toggled(bool)</signal> <receiver>fastForwardHeldRatio</receiver> <slot>setDisabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>20</x> + <y>20</y> + </hint> + <hint type="destinationlabel"> + <x>20</x> + <y>20</y> + </hint> + </hints> </connection> </connections> </ui>
M src/platform/qt/TileView.cppsrc/platform/qt/TileView.cpp

@@ -8,6 +8,8 @@

#include "CoreController.h" #include "GBAApp.h" +#include <QAction> +#include <QClipboard> #include <QFontDatabase> #include <QTimer>

@@ -87,7 +89,20 @@ }

updateTiles(true); }); - connect(m_ui.exportButton, &QAbstractButton::clicked, this, &TileView::exportTiles); + connect(m_ui.exportAll, &QAbstractButton::clicked, this, &TileView::exportTiles); + connect(m_ui.exportOne, &QAbstractButton::clicked, this, &TileView::exportTile); + connect(m_ui.copyAll, &QAbstractButton::clicked, this, &TileView::copyTiles); + connect(m_ui.copyOne, &QAbstractButton::clicked, this, &TileView::copyTile); + + QAction* exportAll = new QAction(this); + exportAll->setShortcut(QKeySequence::Save); + connect(exportAll, &QAction::triggered, this, &TileView::exportTiles); + addAction(exportAll); + + QAction* copyOne = new QAction(this); + copyOne->setShortcut(QKeySequence::Copy); + connect(copyOne, &QAction::triggered, this, &TileView::copyTile); + addAction(copyOne); } #ifdef M_CORE_GBA

@@ -162,8 +177,36 @@

void TileView::exportTiles() { QString filename = GBAApp::app()->getSaveFileName(this, tr("Export tiles"), tr("Portable Network Graphics (*.png)")); + if (filename.isNull()) { + return; + } CoreController::Interrupter interrupter(m_controller); updateTiles(false); QPixmap pixmap(m_ui.tiles->backing()); pixmap.save(filename, "PNG"); } + +void TileView::exportTile() { + QString filename = GBAApp::app()->getSaveFileName(this, tr("Export tile"), + tr("Portable Network Graphics (*.png)")); + if (filename.isNull()) { + return; + } + CoreController::Interrupter interrupter(m_controller); + updateTiles(false); + QImage image(m_ui.tile->activeTile()); + image.save(filename, "PNG"); +} + +void TileView::copyTiles() { + CoreController::Interrupter interrupter(m_controller); + updateTiles(false); + QPixmap pixmap(); + GBAApp::app()->clipboard()->setPixmap(m_ui.tiles->backing()); +} + +void TileView::copyTile() { + CoreController::Interrupter interrupter(m_controller); + updateTiles(false); + GBAApp::app()->clipboard()->setImage(m_ui.tile->activeTile()); +}
M src/platform/qt/TileView.hsrc/platform/qt/TileView.h

@@ -24,6 +24,9 @@

public slots: void updatePalette(int); void exportTiles(); + void exportTile(); + void copyTiles(); + void copyTile(); private: #ifdef M_CORE_GBA
M src/platform/qt/TileView.uisrc/platform/qt/TileView.ui

@@ -6,14 +6,28 @@ <property name="geometry">

<rect> <x>0</x> <y>0</y> - <width>693</width> - <height>467</height> + <width>748</width> + <height>823</height> </rect> </property> <property name="windowTitle"> <string>Tiles</string> </property> - <layout class="QGridLayout" name="gridLayout" columnstretch="0,1"> + <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,1,0,0,0,0" columnstretch="0,1"> + <item row="5" column="0"> + <widget class="QPushButton" name="exportOne"> + <property name="text"> + <string>Export Selected</string> + </property> + </widget> + </item> + <item row="7" column="0"> + <widget class="QPushButton" name="exportAll"> + <property name="text"> + <string>Export All</string> + </property> + </widget> + </item> <item row="0" column="0"> <layout class="QFormLayout" name="formLayout"> <item row="0" column="0">

@@ -104,17 +118,7 @@ </size>

</property> </spacer> </item> - <item row="1" column="0"> - <widget class="QGBA::AssetTile" name="tile"/> - </item> - <item row="4" column="0"> - <widget class="QPushButton" name="exportButton"> - <property name="text"> - <string>Export</string> - </property> - </widget> - </item> - <item row="0" column="1" rowspan="5"> + <item row="0" column="1" rowspan="8"> <widget class="QScrollArea" name="scrollArea"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Expanding">

@@ -133,7 +137,7 @@ <property name="geometry">

<rect> <x>0</x> <y>0</y> - <width>405</width> + <width>480</width> <height>768</height> </rect> </property>

@@ -177,6 +181,23 @@ </widget>

</item> </layout> </widget> + </widget> + </item> + <item row="1" column="0"> + <widget class="QGBA::AssetTile" name="tile"/> + </item> + <item row="4" column="0"> + <widget class="QPushButton" name="copyOne"> + <property name="text"> + <string>Copy Selected</string> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QPushButton" name="copyAll"> + <property name="text"> + <string>Copy All</string> + </property> </widget> </item> </layout>
M src/platform/qt/Window.cppsrc/platform/qt/Window.cpp

@@ -802,6 +802,7 @@ m_screenWidget->setDimensions(size.width(), size.height());

m_config->updateOption("lockIntegerScaling"); m_config->updateOption("lockAspectRatio"); m_config->updateOption("interframeBlending"); + m_config->updateOption("showOSD"); if (m_savedScale > 0) { resizeFrame(size * m_savedScale); }

@@ -971,8 +972,10 @@ });

const mCoreOptions* opts = m_config->options(); m_display->lockAspectRatio(opts->lockAspectRatio); + m_display->lockIntegerScaling(opts->lockIntegerScaling); m_display->interframeBlending(opts->interframeBlending); m_display->filter(opts->resampleVideo); + m_config->updateOption("showOSD"); #if defined(BUILD_GL) || defined(BUILD_GLES2) if (opts->shader) { struct VDir* shader = VDirOpen(opts->shader);

@@ -1691,6 +1694,13 @@ updateTitle();

} else if (m_controller) { m_fpsTimer.start(); m_frameTimer.start(); + } + }, this); + + ConfigOption* showOSD = m_config->addOption("showOSD"); + showOSD->connect([this](const QVariant& value) { + if (m_display) { + m_display->showOSDMessages(value.toBool()); } }, this);
M src/platform/qt/library/LibraryController.cppsrc/platform/qt/library/LibraryController.cpp

@@ -51,6 +51,7 @@

m_libraryGrid = std::make_unique<LibraryGrid>(this); addWidget(m_libraryGrid->widget()); + m_currentStyle = LibraryStyle::STYLE_TREE; // Make sure setViewStyle does something setViewStyle(LibraryStyle::STYLE_LIST); refresh(); }
M src/platform/qt/ts/medusa-emu-de.tssrc/platform/qt/ts/medusa-emu-de.ts

@@ -310,34 +310,24 @@ <source>Record GIF</source>

<translation>GIF aufzeichnen</translation> </message> <message> - <location filename="../GIFView.ui" line="34"/> + <location filename="../GIFView.ui" line="68"/> <source>Start</source> <translation>Start</translation> </message> <message> - <location filename="../GIFView.ui" line="50"/> + <location filename="../GIFView.ui" line="84"/> <source>Stop</source> <translation>Stop</translation> </message> <message> - <location filename="../GIFView.ui" line="63"/> + <location filename="../GIFView.ui" line="110"/> <source>Select File</source> <translation>Datei wählen</translation> </message> <message> - <location filename="../GIFView.ui" line="101"/> + <location filename="../GIFView.ui" line="36"/> <source>Frameskip</source> <translation>Frameskip</translation> - </message> - <message> - <location filename="../GIFView.ui" line="115"/> - <source>Frame delay (ms)</source> - <translation>Bildverzögerung (ms)</translation> - </message> - <message> - <location filename="../GIFView.ui" line="122"/> - <source>Automatic</source> - <translation>Automatisch</translation> </message> </context> <context>

@@ -599,142 +589,206 @@ <source>Maps</source>

<translation>Maps</translation> </message> <message> - <location filename="../MapView.ui" line="61"/> + <location filename="../MapView.ui" line="30"/> <source>×</source> <translation>×</translation> </message> <message> - <location filename="../MapView.ui" line="74"/> + <location filename="../MapView.ui" line="43"/> <source>Magnification</source> <translation>Vergrößerung</translation> </message> <message> - <location filename="../MapView.ui" line="31"/> + <location filename="../MapView.ui" line="124"/> <source>Export</source> <translation>Exportieren</translation> </message> + <message> + <location filename="../MapView.ui" line="139"/> + <source>Copy</source> + <translation>Kopieren</translation> + </message> +</context> +<context> + <name>MemoryDump</name> + <message> + <location filename="../MemoryDump.ui" line="14"/> + <source>Save Memory Range</source> + <translation>Speicherbereich abspeichern</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="20"/> + <source>Start Address:</source> + <translation>Start-Adresse:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="42"/> + <source>:</source> + <translation>:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="58"/> + <location filename="../MemoryDump.ui" line="89"/> + <source>0x</source> + <translation>0x</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="76"/> + <source>Byte Count:</source> + <translation>Bytes:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="108"/> + <source>Dump across banks</source> + <translation>Über Speicherbänke hinweg dumpen</translation> + </message> </context> <context> <name>MemorySearch</name> <message> - <location filename="../MemorySearch.ui" line="20"/> + <location filename="../MemorySearch.ui" line="26"/> <source>Memory Search</source> <translation>Speicher durchsuchen</translation> </message> <message> - <location filename="../MemorySearch.ui" line="45"/> + <location filename="../MemorySearch.ui" line="51"/> <source>Address</source> <translation>Adresse</translation> </message> <message> - <location filename="../MemorySearch.ui" line="50"/> + <location filename="../MemorySearch.ui" line="56"/> <source>Current Value</source> <translation>Aktueller Wert</translation> </message> <message> - <location filename="../MemorySearch.ui" line="55"/> - <location filename="../MemorySearch.ui" line="75"/> + <location filename="../MemorySearch.ui" line="61"/> + <location filename="../MemorySearch.ui" line="81"/> <source>Type</source> <translation>Typ</translation> </message> <message> - <location filename="../MemorySearch.ui" line="65"/> + <location filename="../MemorySearch.ui" line="71"/> <source>Value</source> <translation>Wert</translation> </message> <message> - <location filename="../MemorySearch.ui" line="82"/> + <location filename="../MemorySearch.ui" line="88"/> <source>Numeric</source> <translation>Numerisch</translation> </message> <message> - <location filename="../MemorySearch.ui" line="95"/> + <location filename="../MemorySearch.ui" line="101"/> <source>Text</source> <translation>Text</translation> </message> <message> - <location filename="../MemorySearch.ui" line="112"/> + <location filename="../MemorySearch.ui" line="118"/> <source>Width</source> <translation>Breite</translation> </message> <message> - <location filename="../MemorySearch.ui" line="132"/> + <location filename="../MemorySearch.ui" line="138"/> <source>1 Byte (8-bit)</source> <translation>1 Byte (8-bit)</translation> </message> <message> - <location filename="../MemorySearch.ui" line="142"/> + <location filename="../MemorySearch.ui" line="148"/> <source>2 Bytes (16-bit)</source> <translation>2 Bytes (16-bit)</translation> </message> <message> - <location filename="../MemorySearch.ui" line="152"/> + <location filename="../MemorySearch.ui" line="158"/> <source>4 Bytes (32-bit)</source> <translation>4 Bytes (32-bit)</translation> </message> <message> - <location filename="../MemorySearch.ui" line="172"/> + <location filename="../MemorySearch.ui" line="178"/> <source>Number type</source> <translation>Zahlensystem</translation> </message> <message> - <location filename="../MemorySearch.ui" line="196"/> + <location filename="../MemorySearch.ui" line="202"/> <source>Hexadecimal</source> <translation>Hexadezimal</translation> </message> <message> - <location filename="../MemorySearch.ui" line="189"/> - <source>Decimal</source> - <translation>Dezimal</translation> + <location filename="../MemorySearch.ui" line="216"/> + <source>Search type</source> + <translation>Suche nach</translation> </message> <message> - <location filename="../MemorySearch.ui" line="119"/> - <location filename="../MemorySearch.ui" line="179"/> - <source>Guess</source> - <translation>automatisch</translation> + <location filename="../MemorySearch.ui" line="223"/> + <source>Equal to value</source> + <translation>Entspricht dem Wert</translation> </message> <message> - <location filename="../MemorySearch.ui" line="210"/> - <source>Compare</source> - <translation>Vergleichen</translation> + <location filename="../MemorySearch.ui" line="236"/> + <source>Greater than value</source> + <translation>Größer als der Wert</translation> </message> <message> - <location filename="../MemorySearch.ui" line="217"/> - <source>Equal</source> - <translation>Gleichwertig</translation> + <location filename="../MemorySearch.ui" line="246"/> + <source>Less than value</source> + <translation>Kleiner als der Wert</translation> </message> <message> - <location filename="../MemorySearch.ui" line="230"/> - <source>Greater</source> - <translation>Größer</translation> + <location filename="../MemorySearch.ui" line="256"/> + <source>Unknown/changed</source> + <translation>Unbekannt/geändert</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="269"/> + <source>Changed by value</source> + <translation>Geändert durch Wert</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="282"/> + <source>Unchanged</source> + <translation>Unverändert</translation> </message> <message> - <location filename="../MemorySearch.ui" line="240"/> - <source>Less</source> - <translation>Kleiner</translation> + <location filename="../MemorySearch.ui" line="295"/> + <source>Increased</source> + <translation>Erhöht</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="308"/> + <source>Decreased</source> + <translation>Verringert</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="318"/> + <source>Search ROM</source> + <translation>ROM durchsuchen</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="336"/> + <source>New Search</source> + <translation>Neue Suche</translation> </message> <message> - <location filename="../MemorySearch.ui" line="253"/> - <source>Delta</source> - <translation>Differenz</translation> + <location filename="../MemorySearch.ui" line="195"/> + <source>Decimal</source> + <translation>Dezimal</translation> </message> <message> - <location filename="../MemorySearch.ui" line="274"/> - <source>Search</source> - <translation>Suchen</translation> + <location filename="../MemorySearch.ui" line="125"/> + <location filename="../MemorySearch.ui" line="185"/> + <source>Guess</source> + <translation>automatisch</translation> </message> <message> - <location filename="../MemorySearch.ui" line="281"/> + <location filename="../MemorySearch.ui" line="343"/> <source>Search Within</source> <translation>Suchen innerhalb</translation> </message> <message> - <location filename="../MemorySearch.ui" line="288"/> + <location filename="../MemorySearch.ui" line="350"/> <source>Open in Memory Viewer</source> <translation>Im Speicher-Monitor öffnen</translation> </message> <message> - <location filename="../MemorySearch.ui" line="295"/> + <location filename="../MemorySearch.ui" line="357"/> <source>Refresh</source> <translation>Aktualisieren</translation> </message>

@@ -752,67 +806,77 @@ <source>Inspect Address:</source>

<translation>Untersuche Adresse:</translation> </message> <message> - <location filename="../MemoryView.ui" line="61"/> + <location filename="../MemoryView.ui" line="58"/> + <source>:</source> + <translation>:</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="68"/> <source>0x</source> <translation>0x</translation> </message> <message> - <location filename="../MemoryView.ui" line="81"/> + <location filename="../MemoryView.ui" line="88"/> <source>Set Alignment:</source> <translation>Ausrichtung festlegen:</translation> </message> <message> - <location filename="../MemoryView.ui" line="101"/> + <location filename="../MemoryView.ui" line="108"/> <source>&amp;1 Byte</source> <translation>&amp;1 Byte</translation> </message> <message> - <location filename="../MemoryView.ui" line="124"/> + <location filename="../MemoryView.ui" line="131"/> <source>&amp;2 Bytes</source> <translation>&amp;2 Bytes</translation> </message> <message> - <location filename="../MemoryView.ui" line="144"/> + <location filename="../MemoryView.ui" line="151"/> <source>&amp;4 Bytes</source> <translation>&amp;4 Bytes</translation> </message> <message> - <location filename="../MemoryView.ui" line="198"/> + <location filename="../MemoryView.ui" line="205"/> <source>Signed Integer:</source> <translation>Signed Integer:</translation> </message> <message> - <location filename="../MemoryView.ui" line="216"/> + <location filename="../MemoryView.ui" line="223"/> <source>String:</source> <translation>String:</translation> </message> <message> - <location filename="../MemoryView.ui" line="230"/> + <location filename="../MemoryView.ui" line="237"/> <source>Load TBL</source> <translation>TBL laden</translation> </message> <message> - <location filename="../MemoryView.ui" line="243"/> + <location filename="../MemoryView.ui" line="250"/> <source>Copy Selection</source> <translation>Auswahl kopieren</translation> </message> <message> - <location filename="../MemoryView.ui" line="250"/> + <location filename="../MemoryView.ui" line="257"/> <source>Paste</source> <translation>Einfügen</translation> </message> <message> - <location filename="../MemoryView.ui" line="270"/> + <location filename="../MemoryView.ui" line="277"/> <source>Save Selection</source> <translation>Auswahl speichern</translation> </message> <message> - <location filename="../MemoryView.ui" line="277"/> + <location filename="../MemoryView.ui" line="284"/> + <source>Save Range</source> + <translation>Bereich speichern</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="291"/> <source>Load</source> <translation>Laden</translation> </message> <message> - <location filename="../MemoryView.ui" line="180"/> + <location filename="../MemoryView.ui" line="187"/> <source>Unsigned Integer:</source> <translation>Unsigned Integer:</translation> </message>

@@ -825,140 +889,145 @@ <source>Sprites</source>

<translation>Sprites</translation> </message> <message> - <location filename="../ObjView.ui" line="56"/> - <location filename="../ObjView.ui" line="506"/> + <location filename="../ObjView.ui" line="137"/> + <location filename="../ObjView.ui" line="568"/> <source>×</source> <translation>×</translation> </message> <message> - <location filename="../ObjView.ui" line="69"/> + <location filename="../ObjView.ui" line="581"/> <source>Magnification</source> <translation>Vergrößerung</translation> </message> <message> - <location filename="../ObjView.ui" line="76"/> + <location filename="../ObjView.ui" line="212"/> <source>Export</source> <translation>Exportieren</translation> </message> <message> - <location filename="../ObjView.ui" line="85"/> + <location filename="../ObjView.ui" line="219"/> <source>Attributes</source> <translation>Eigenschaften</translation> </message> <message> - <location filename="../ObjView.ui" line="93"/> + <location filename="../ObjView.ui" line="227"/> <source>Transform</source> <translation>Transform</translation> </message> <message> - <location filename="../ObjView.ui" line="113"/> + <location filename="../ObjView.ui" line="247"/> <source>Off</source> <translation>Aus</translation> </message> <message> - <location filename="../ObjView.ui" line="124"/> + <location filename="../ObjView.ui" line="258"/> <source>Palette</source> <translation>Palette</translation> </message> <message> - <location filename="../ObjView.ui" line="144"/> - <location filename="../ObjView.ui" line="374"/> - <location filename="../ObjView.ui" line="430"/> - <location filename="../ObjView.ui" line="456"/> + <location filename="../ObjView.ui" line="61"/> + <location filename="../ObjView.ui" line="87"/> + <location filename="../ObjView.ui" line="278"/> + <location filename="../ObjView.ui" line="508"/> <source>0</source> <translation>0</translation> </message> <message> - <location filename="../ObjView.ui" line="158"/> + <location filename="../ObjView.ui" line="20"/> + <source>Copy</source> + <translation>Kopieren</translation> + </message> + <message> + <location filename="../ObjView.ui" line="292"/> <source>Double Size</source> <translation>Doppelte Größe</translation> </message> <message> - <location filename="../ObjView.ui" line="184"/> - <location filename="../ObjView.ui" line="228"/> - <location filename="../ObjView.ui" line="241"/> - <location filename="../ObjView.ui" line="309"/> + <location filename="../ObjView.ui" line="318"/> + <location filename="../ObjView.ui" line="362"/> + <location filename="../ObjView.ui" line="375"/> + <location filename="../ObjView.ui" line="443"/> <source>Return, Ctrl+R</source> <translation>Eingabe, Strg+R</translation> </message> <message> - <location filename="../ObjView.ui" line="202"/> + <location filename="../ObjView.ui" line="336"/> <source>Flipped</source> <translation>Gespiegelt</translation> </message> <message> - <location filename="../ObjView.ui" line="225"/> + <location filename="../ObjView.ui" line="359"/> <source>H</source> <translation>H</translation> </message> <message> - <location filename="../ObjView.ui" line="238"/> + <location filename="../ObjView.ui" line="372"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../ObjView.ui" line="252"/> + <location filename="../ObjView.ui" line="386"/> <source>Mode</source> <translation>Modus</translation> </message> <message> - <location filename="../ObjView.ui" line="272"/> + <location filename="../ObjView.ui" line="406"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../ObjView.ui" line="283"/> + <location filename="../ObjView.ui" line="417"/> <source>Mosaic</source> <translation>Mosaic</translation> </message> <message> - <location filename="../ObjView.ui" line="320"/> + <location filename="../ObjView.ui" line="454"/> <source>Enabled</source> <translation>Aktiviert</translation> </message> <message> - <location filename="../ObjView.ui" line="354"/> + <location filename="../ObjView.ui" line="488"/> <source>Priority</source> <translation>Priorität</translation> </message> <message> - <location filename="../ObjView.ui" line="389"/> + <location filename="../ObjView.ui" line="205"/> <source>Tile</source> <translation></translation> </message> <message> - <location filename="../ObjView.ui" line="396"/> + <location filename="../ObjView.ui" line="27"/> <source>Geometry</source> <translation>Geometrie</translation> </message> <message> - <location filename="../ObjView.ui" line="404"/> + <location filename="../ObjView.ui" line="35"/> <source>Position</source> <translation>Position</translation> </message> <message> - <location filename="../ObjView.ui" line="440"/> + <location filename="../ObjView.ui" line="71"/> <source>, </source> <translation>, </translation> </message> <message> - <location filename="../ObjView.ui" line="470"/> + <location filename="../ObjView.ui" line="101"/> <source>Dimensions</source> <translation>Abmessungen</translation> </message> <message> - <location filename="../ObjView.ui" line="496"/> - <location filename="../ObjView.ui" line="522"/> + <location filename="../ObjView.ui" line="127"/> + <location filename="../ObjView.ui" line="153"/> <source>8</source> <translation>8</translation> </message> <message> - <location filename="../ObjView.ui" line="552"/> + <location filename="../ObjView.ui" line="538"/> <source>Address</source> <translation>Adresse</translation> </message> <message> - <location filename="../ObjView.ui" line="559"/> + <location filename="../ObjView.ui" line="545"/> <source>0x07000000</source> <translation>0x07000000</translation> </message>

@@ -1116,36 +1185,51 @@ <translation>MBC5 + Rumble</translation>

</message> <message> <location filename="../OverrideView.ui" line="324"/> + <source>MBC6</source> + <translation>MBC6</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="329"/> <source>MBC7</source> <translation>MBC7</translation> </message> <message> - <location filename="../OverrideView.ui" line="329"/> + <location filename="../OverrideView.ui" line="334"/> + <source>MMM01</source> + <translation>MMM01</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="339"/> <source>Pocket Cam</source> <translation>Pocket Cam</translation> </message> <message> - <location filename="../OverrideView.ui" line="334"/> + <location filename="../OverrideView.ui" line="344"/> <source>TAMA5</source> <translation>TAMA5</translation> </message> <message> - <location filename="../OverrideView.ui" line="339"/> + <location filename="../OverrideView.ui" line="349"/> + <source>HuC-1</source> + <translation>HuC-1</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="354"/> <source>HuC-3</source> <translation>HuC-3</translation> </message> <message> - <location filename="../OverrideView.ui" line="347"/> + <location filename="../OverrideView.ui" line="362"/> <source>Background Colors</source> <translation>Hintergrund-Farbpalette</translation> </message> <message> - <location filename="../OverrideView.ui" line="434"/> + <location filename="../OverrideView.ui" line="449"/> <source>Sprite Colors 1</source> <translation>Sprite-Farbpalette 1</translation> </message> <message> - <location filename="../OverrideView.ui" line="441"/> + <location filename="../OverrideView.ui" line="456"/> <source>Sprite Colors 2</source> <translation>Sprite-Farbpalette 2</translation> </message>

@@ -1271,15 +1355,25 @@ <source>Game Boy Printer</source>

<translation>Game Boy Printer</translation> </message> <message> - <location filename="../PrinterView.ui" line="96"/> + <location filename="../PrinterView.ui" line="130"/> <source>Hurry up!</source> <translation>Los geht&apos;s!</translation> </message> <message> - <location filename="../PrinterView.ui" line="103"/> + <location filename="../PrinterView.ui" line="137"/> <source>Tear off</source> <translation>Abreißen</translation> </message> + <message> + <location filename="../PrinterView.ui" line="167"/> + <source>×</source> + <translation>×</translation> + </message> + <message> + <location filename="../PrinterView.ui" line="180"/> + <source>Magnification</source> + <translation>Vergrößerung</translation> + </message> </context> <context> <name>QGBA::AssetTile</name>

@@ -1289,9 +1383,9 @@ <source>%0%1%2</source>

<translation>%0%1%2</translation> </message> <message> - <location filename="../AssetTile.cpp" line="140"/> - <location filename="../AssetTile.cpp" line="141"/> - <location filename="../AssetTile.cpp" line="142"/> + <location filename="../AssetTile.cpp" line="143"/> + <location filename="../AssetTile.cpp" line="144"/> + <location filename="../AssetTile.cpp" line="145"/> <source>0x%0 (%1)</source> <translation>0x%0 (%1)</translation> </message>

@@ -1342,22 +1436,22 @@ </context>

<context> <name>QGBA::CoreController</name> <message> - <location filename="../CoreController.cpp" line="592"/> + <location filename="../CoreController.cpp" line="593"/> <source>Failed to open save file: %1</source> <translation>Fehler beim Öffnen der Speicherdatei: %1</translation> </message> <message> - <location filename="../CoreController.cpp" line="621"/> + <location filename="../CoreController.cpp" line="622"/> <source>Failed to open game file: %1</source> <translation>Fehler beim Öffnen der Spieldatei: %1</translation> </message> <message> - <location filename="../CoreController.cpp" line="689"/> + <location filename="../CoreController.cpp" line="690"/> <source>Failed to open snapshot file for reading: %1</source> <translation>Konnte Snapshot-Datei %1 nicht zum Lesen öffnen</translation> </message> <message> - <location filename="../CoreController.cpp" line="705"/> + <location filename="../CoreController.cpp" line="706"/> <source>Failed to open snapshot file for writing: %1</source> <translation>Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen</translation> </message>

@@ -1490,17 +1584,17 @@ </context>

<context> <name>QGBA::GIFView</name> <message> - <location filename="../GIFView.cpp" line="53"/> + <location filename="../GIFView.cpp" line="49"/> <source>Failed to open output GIF file: %1</source> <translation>Fehler beim Öffnen der Ausgabe-GIF-Datei: %1</translation> </message> <message> - <location filename="../GIFView.cpp" line="71"/> + <location filename="../GIFView.cpp" line="67"/> <source>Select output file</source> <translation>Ausgabedatei auswählen</translation> </message> <message> - <location filename="../GIFView.cpp" line="71"/> + <location filename="../GIFView.cpp" line="67"/> <source>Graphics Interchange Format (*.gif)</source> <translation>Graphics Interchange Format (*.gif)</translation> </message>

@@ -3036,89 +3130,97 @@ </context>

<context> <name>QGBA::MapView</name> <message> - <location filename="../MapView.cpp" line="46"/> + <location filename="../MapView.cpp" line="48"/> <source>Priority</source> <translation>Priorität</translation> </message> <message> - <location filename="../MapView.cpp" line="47"/> - <location filename="../MapView.cpp" line="59"/> + <location filename="../MapView.cpp" line="49"/> + <location filename="../MapView.cpp" line="61"/> <source>Map base</source> <translation>Map-Basis</translation> </message> <message> - <location filename="../MapView.cpp" line="48"/> - <location filename="../MapView.cpp" line="60"/> + <location filename="../MapView.cpp" line="50"/> + <location filename="../MapView.cpp" line="62"/> <source>Tile base</source> <translation>Tile-Basis</translation> </message> <message> - <location filename="../MapView.cpp" line="49"/> + <location filename="../MapView.cpp" line="51"/> <source>Size</source> <translation>Größe</translation> </message> <message> - <location filename="../MapView.cpp" line="50"/> - <location filename="../MapView.cpp" line="61"/> + <location filename="../MapView.cpp" line="52"/> + <location filename="../MapView.cpp" line="63"/> <source>Offset</source> <translation>Versatz</translation> </message> <message> - <location filename="../MapView.cpp" line="51"/> + <location filename="../MapView.cpp" line="53"/> <source>Xform</source> <translation>Xform</translation> </message> <message> - <location filename="../MapView.cpp" line="97"/> + <location filename="../MapView.cpp" line="107"/> <source>Map Addr.</source> <translation>Map-Addr.</translation> </message> <message> - <location filename="../MapView.cpp" line="98"/> + <location filename="../MapView.cpp" line="108"/> <source>Mirror</source> <translation>Spiegel</translation> </message> <message> - <location filename="../MapView.cpp" line="126"/> + <location filename="../MapView.cpp" line="136"/> <source>None</source> <translation>Keiner</translation> </message> <message> - <location filename="../MapView.cpp" line="128"/> + <location filename="../MapView.cpp" line="138"/> <source>Both</source> <translation>Beidseitig</translation> </message> <message> - <location filename="../MapView.cpp" line="130"/> + <location filename="../MapView.cpp" line="140"/> <source>Horizontal</source> <translation>Horizontal</translation> </message> <message> - <location filename="../MapView.cpp" line="132"/> + <location filename="../MapView.cpp" line="142"/> <source>Vertical</source> <translation>Vertikal</translation> </message> <message> - <location filename="../MapView.cpp" line="158"/> - <location filename="../MapView.cpp" line="159"/> - <location filename="../MapView.cpp" line="203"/> + <location filename="../MapView.cpp" line="168"/> + <location filename="../MapView.cpp" line="169"/> + <location filename="../MapView.cpp" line="213"/> <source>N/A</source> <translation>N/A</translation> </message> <message> - <location filename="../MapView.cpp" line="247"/> + <location filename="../MapView.cpp" line="256"/> <source>Export map</source> <translation>Map exportieren</translation> </message> <message> - <location filename="../MapView.cpp" line="248"/> + <location filename="../MapView.cpp" line="257"/> <source>Portable Network Graphics (*.png)</source> <translation>Portable Network Graphics (*.png)</translation> </message> +</context> +<context> + <name>QGBA::MemoryDump</name> <message> - <location filename="../MapView.cpp" line="251"/> - <source>Failed to open output PNG file: %1</source> - <translation>Fehler beim Öffnen der Ausgabe-PNG-Datei: %1</translation> + <location filename="../MemoryDump.cpp" line="24"/> + <source>Save memory region</source> + <translation>Speicherbereich abspeichern</translation> + </message> + <message> + <location filename="../MemoryDump.cpp" line="30"/> + <source>Failed to open output file: %1</source> + <translation>Fehler beim Öffnen der Ausgabedatei: %1</translation> </message> </context> <context>

@@ -3187,22 +3289,22 @@ </context>

<context> <name>QGBA::MemorySearch</name> <message> - <location filename="../MemorySearch.cpp" line="200"/> + <location filename="../MemorySearch.cpp" line="221"/> <source> (%0/%1×)</source> <translation> (%0/%1×)</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="202"/> + <location filename="../MemorySearch.cpp" line="223"/> <source> (⅟%0×)</source> <translation> (⅟%0×)</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="205"/> + <location filename="../MemorySearch.cpp" line="226"/> <source> (%0×)</source> <translation> (%0×)</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="209"/> + <location filename="../MemorySearch.cpp" line="230"/> <source>%1 byte%2</source> <translation>%1 byte%2</translation> </message>

@@ -3210,49 +3312,49 @@ </context>

<context> <name>QGBA::ObjView</name> <message> - <location filename="../ObjView.cpp" line="119"/> - <location filename="../ObjView.cpp" line="191"/> + <location filename="../ObjView.cpp" line="150"/> + <location filename="../ObjView.cpp" line="224"/> <source>0x%0</source> <translation>0x%0</translation> </message> <message> - <location filename="../ObjView.cpp" line="130"/> + <location filename="../ObjView.cpp" line="161"/> <source>Off</source> <translation>Aus</translation> </message> <message> - <location filename="../ObjView.cpp" line="135"/> + <location filename="../ObjView.cpp" line="166"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../ObjView.cpp" line="138"/> + <location filename="../ObjView.cpp" line="169"/> <source>Trans</source> <translation>Trans</translation> </message> <message> - <location filename="../ObjView.cpp" line="141"/> + <location filename="../ObjView.cpp" line="172"/> <source>OBJWIN</source> <translation>OBJWIN</translation> </message> <message> - <location filename="../ObjView.cpp" line="144"/> + <location filename="../ObjView.cpp" line="175"/> <source>Invalid</source> <translation>Ungültig</translation> </message> <message> - <location filename="../ObjView.cpp" line="198"/> - <location filename="../ObjView.cpp" line="199"/> + <location filename="../ObjView.cpp" line="231"/> + <location filename="../ObjView.cpp" line="232"/> <source>N/A</source> <translation>N/A</translation> </message> <message> - <location filename="../ObjView.cpp" line="204"/> + <location filename="../ObjView.cpp" line="257"/> <source>Export sprite</source> <translation>Sprite exportieren</translation> </message> <message> - <location filename="../ObjView.cpp" line="205"/> + <location filename="../ObjView.cpp" line="258"/> <source>Portable Network Graphics (*.png)</source> <translation>Portable Network Graphics (*.png)</translation> </message>

@@ -3380,7 +3482,7 @@ <source>Select BIOS</source>

<translation>BIOS auswählen</translation> </message> <message> - <location filename="../SettingsView.cpp" line="656"/> + <location filename="../SettingsView.cpp" line="658"/> <source>(%1×%2)</source> <translation>(%1×%2)</translation> </message>

@@ -3439,14 +3541,20 @@ </context>

<context> <name>QGBA::TileView</name> <message> - <location filename="../TileView.cpp" line="163"/> + <location filename="../TileView.cpp" line="178"/> <source>Export tiles</source> <translation>Tiles exportieren</translation> </message> <message> - <location filename="../TileView.cpp" line="164"/> + <location filename="../TileView.cpp" line="179"/> + <location filename="../TileView.cpp" line="191"/> <source>Portable Network Graphics (*.png)</source> <translation>Portable Network Graphics (*.png)</translation> + </message> + <message> + <location filename="../TileView.cpp" line="190"/> + <source>Export tile</source> + <translation>Tile exportieren</translation> </message> </context> <context>

@@ -3470,7 +3578,7 @@ </context>

<context> <name>QGBA::Window</name> <message> - <location filename="../Window.cpp" line="295"/> + <location filename="../Window.cpp" line="292"/> <source>Game Boy Advance ROMs (%1)</source> <translation>Game Boy Advance-ROMs (%1)</translation> </message>

@@ -3480,78 +3588,78 @@ <source>DS ROMs (%1)</source>

<translation>DS-ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="312"/> + <location filename="../Window.cpp" line="309"/> <source>Game Boy ROMs (%1)</source> <translation>Game Boy-ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="316"/> + <location filename="../Window.cpp" line="313"/> <source>All ROMs (%1)</source> <translation>Alle ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="317"/> + <location filename="../Window.cpp" line="314"/> <source>%1 Video Logs (*.mvl)</source> <translation>%1 Video-Logs (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="332"/> + <location filename="../Window.cpp" line="329"/> <source>Archives (%1)</source> <translation>Archive (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="337"/> - <location filename="../Window.cpp" line="345"/> - <location filename="../Window.cpp" line="372"/> + <location filename="../Window.cpp" line="334"/> + <location filename="../Window.cpp" line="342"/> + <location filename="../Window.cpp" line="369"/> <source>Select ROM</source> <translation>ROM auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="380"/> + <location filename="../Window.cpp" line="377"/> <source>Game Boy Advance save files (%1)</source> <translation>Game Boy Advance-Speicherdateien (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="381"/> - <location filename="../Window.cpp" line="442"/> - <location filename="../Window.cpp" line="449"/> + <location filename="../Window.cpp" line="378"/> + <location filename="../Window.cpp" line="439"/> + <location filename="../Window.cpp" line="446"/> <source>Select save</source> <translation>Speicherdatei wählen</translation> </message> <message> - <location filename="../Window.cpp" line="389"/> + <location filename="../Window.cpp" line="386"/> <source>mGBA savestate files (%1)</source> <translation>mGBA Savestate-Dateien (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="391"/> - <location filename="../Window.cpp" line="396"/> + <location filename="../Window.cpp" line="388"/> + <location filename="../Window.cpp" line="393"/> <source>Select savestate</source> <translation>Savestate auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="418"/> + <location filename="../Window.cpp" line="415"/> <source>Select patch</source> <translation>Patch wählen</translation> </message> <message> - <location filename="../Window.cpp" line="418"/> + <location filename="../Window.cpp" line="415"/> <source>Patches (*.ips *.ups *.bps)</source> <translation>Patches (*.ips *.ups *.bps)</translation> </message> <message> - <location filename="../Window.cpp" line="435"/> + <location filename="../Window.cpp" line="432"/> <source>Select image</source> <translation>Bild auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="435"/> + <location filename="../Window.cpp" line="432"/> <source>Image file (*.png *.gif *.jpg *.jpeg);;All files (*)</source> <translation>Bild-Datei (*.png *.gif *.jpg *.jpeg);;Alle Dateien (*)</translation> </message> <message> - <location filename="../Window.cpp" line="442"/> - <location filename="../Window.cpp" line="449"/> + <location filename="../Window.cpp" line="439"/> + <location filename="../Window.cpp" line="446"/> <source>GameShark saves (*.sps *.xps)</source> <translation>GameShark-Speicherdaten (*.sps *.xps)</translation> </message>

@@ -3566,22 +3674,22 @@ <source>DS support requires dumps of the BIOS and firmware.</source>

<translation>DS-Unterstützung erfordert ein Abbild des BIOS und der Firmware.</translation> </message> <message> - <location filename="../Window.cpp" line="476"/> + <location filename="../Window.cpp" line="473"/> <source>Select video log</source> <translation>Video-Log auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="476"/> + <location filename="../Window.cpp" line="473"/> <source>Video logs (*.mvl)</source> <translation>Video-Logs (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="858"/> + <location filename="../Window.cpp" line="854"/> <source>Crash</source> <translation>Absturz</translation> </message> <message> - <location filename="../Window.cpp" line="859"/> + <location filename="../Window.cpp" line="855"/> <source>The game has crashed with the following error: %1</source>

@@ -3590,433 +3698,433 @@

%1</translation> </message> <message> - <location filename="../Window.cpp" line="866"/> + <location filename="../Window.cpp" line="862"/> <source>Couldn&apos;t Load</source> <translation>Konnte nicht geladen werden</translation> </message> <message> - <location filename="../Window.cpp" line="867"/> + <location filename="../Window.cpp" line="863"/> <source>Could not load game. Are you sure it&apos;s in the correct format?</source> <translation>Konnte das Spiel nicht laden. Sind Sie sicher, dass es im korrekten Format vorliegt?</translation> </message> <message> - <location filename="../Window.cpp" line="880"/> + <location filename="../Window.cpp" line="876"/> <source>Unimplemented BIOS call</source> <translation>Nicht implementierter BIOS-Aufruf</translation> </message> <message> - <location filename="../Window.cpp" line="881"/> + <location filename="../Window.cpp" line="877"/> <source>This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience.</source> <translation>Dieses Spiel verwendet einen BIOS-Aufruf, der nicht implementiert ist. Bitte verwenden Sie für die beste Spielerfahrung das offizielle BIOS.</translation> </message> <message> - <location filename="../Window.cpp" line="966"/> + <location filename="../Window.cpp" line="964"/> <source>Really make portable?</source> <translation>Portablen Modus wirklich aktivieren?</translation> </message> <message> - <location filename="../Window.cpp" line="967"/> + <location filename="../Window.cpp" line="965"/> <source>This will make the emulator load its configuration from the same directory as the executable. Do you want to continue?</source> <translation>Diese Einstellung wird den Emulator so konfigurieren, dass er seine Konfiguration aus dem gleichen Verzeichnis wie die Programmdatei lädt. Möchten Sie fortfahren?</translation> </message> <message> - <location filename="../Window.cpp" line="979"/> + <location filename="../Window.cpp" line="977"/> <source>Restart needed</source> <translation>Neustart benötigt</translation> </message> <message> - <location filename="../Window.cpp" line="980"/> + <location filename="../Window.cpp" line="978"/> <source>Some changes will not take effect until the emulator is restarted.</source> <translation>Einige Änderungen werden erst übernommen, wenn der Emulator neu gestartet wurde.</translation> </message> <message> - <location filename="../Window.cpp" line="1028"/> + <location filename="../Window.cpp" line="1026"/> <source> - Player %1 of %2</source> <translation> - Spieler %1 von %2</translation> </message> <message> - <location filename="../Window.cpp" line="1039"/> + <location filename="../Window.cpp" line="1037"/> <source>%1 - %2</source> <translation>%1 - %2</translation> </message> <message> - <location filename="../Window.cpp" line="1041"/> + <location filename="../Window.cpp" line="1039"/> <source>%1 - %2 - %3</source> <translation>%1 - %2 - %3</translation> </message> <message> - <location filename="../Window.cpp" line="1043"/> + <location filename="../Window.cpp" line="1041"/> <source>%1 - %2 (%3 fps) - %4</source> <translation>%1 - %2 (%3 Bilder/Sekunde) - %4</translation> </message> <message> - <location filename="../Window.cpp" line="1084"/> + <location filename="../Window.cpp" line="1082"/> <source>&amp;File</source> <translation>&amp;Datei</translation> </message> <message> - <location filename="../Window.cpp" line="1086"/> + <location filename="../Window.cpp" line="1084"/> <source>Load &amp;ROM...</source> <translation>&amp;ROM laden...</translation> </message> <message> - <location filename="../Window.cpp" line="1089"/> + <location filename="../Window.cpp" line="1087"/> <source>Load ROM in archive...</source> <translation>ROM aus Archiv laden...</translation> </message> <message> - <location filename="../Window.cpp" line="1093"/> + <location filename="../Window.cpp" line="1091"/> <source>Load alternate save...</source> <translation>Alternative Speicherdatei laden...</translation> </message> <message> - <location filename="../Window.cpp" line="1096"/> + <location filename="../Window.cpp" line="1094"/> <source>Load temporary save...</source> <translation>Temporäre Speicherdatei laden...</translation> </message> <message> - <location filename="../Window.cpp" line="1100"/> + <location filename="../Window.cpp" line="1098"/> <source>Load &amp;patch...</source> <translation>&amp;Patch laden...</translation> </message> <message> - <location filename="../Window.cpp" line="1103"/> + <location filename="../Window.cpp" line="1101"/> <source>Boot BIOS</source> <translation>BIOS booten</translation> </message> <message> - <location filename="../Window.cpp" line="1108"/> + <location filename="../Window.cpp" line="1106"/> <source>Replace ROM...</source> <translation>ROM ersetzen...</translation> </message> <message> - <location filename="../Window.cpp" line="1110"/> + <location filename="../Window.cpp" line="1108"/> <source>ROM &amp;info...</source> <translation>ROM-&amp;Informationen...</translation> </message> <message> - <location filename="../Window.cpp" line="1112"/> + <location filename="../Window.cpp" line="1110"/> <source>Recent</source> <translation>Zuletzt verwendet</translation> </message> <message> - <location filename="../Window.cpp" line="1115"/> + <location filename="../Window.cpp" line="1113"/> <source>Make portable</source> <translation>Portablen Modus aktivieren</translation> </message> <message> - <location filename="../Window.cpp" line="1118"/> + <location filename="../Window.cpp" line="1116"/> <source>&amp;Load state</source> <translation>Savestate (aktueller Zustand) &amp;laden</translation> </message> <message> - <location filename="../Window.cpp" line="1123"/> + <location filename="../Window.cpp" line="1121"/> <source>Load state file...</source> <translation>Ssavestate-Datei laden...</translation> </message> <message> - <location filename="../Window.cpp" line="1128"/> + <location filename="../Window.cpp" line="1126"/> <source>&amp;Save state</source> <translation>Savestate (aktueller Zustand) &amp;speichern</translation> </message> <message> - <location filename="../Window.cpp" line="1133"/> + <location filename="../Window.cpp" line="1131"/> <source>Save state file...</source> <translation>Savestate-Datei speichern...</translation> </message> <message> - <location filename="../Window.cpp" line="1138"/> + <location filename="../Window.cpp" line="1136"/> <source>Quick load</source> <translation>Schnell laden</translation> </message> <message> - <location filename="../Window.cpp" line="1139"/> + <location filename="../Window.cpp" line="1137"/> <source>Quick save</source> <translation>Schnell speichern</translation> </message> <message> - <location filename="../Window.cpp" line="1141"/> + <location filename="../Window.cpp" line="1139"/> <source>Load recent</source> <translation>Lade zuletzt gespeicherten Savestate</translation> </message> <message> - <location filename="../Window.cpp" line="1146"/> + <location filename="../Window.cpp" line="1144"/> <source>Save recent</source> <translation>Speichere aktuellen Zustand</translation> </message> <message> - <location filename="../Window.cpp" line="1154"/> + <location filename="../Window.cpp" line="1152"/> <source>Undo load state</source> <translation>Laden des Savestate rückgängig machen</translation> </message> <message> - <location filename="../Window.cpp" line="1159"/> + <location filename="../Window.cpp" line="1157"/> <source>Undo save state</source> <translation>Speichern des Savestate rückgängig machen</translation> </message> <message> - <location filename="../Window.cpp" line="1168"/> - <location filename="../Window.cpp" line="1173"/> + <location filename="../Window.cpp" line="1166"/> + <location filename="../Window.cpp" line="1171"/> <source>State &amp;%1</source> <translation>Savestate &amp;%1</translation> </message> <message> - <location filename="../Window.cpp" line="1180"/> + <location filename="../Window.cpp" line="1178"/> <source>Load camera image...</source> <translation>Lade Kamerabild...</translation> </message> <message> - <location filename="../Window.cpp" line="1184"/> + <location filename="../Window.cpp" line="1182"/> <source>Import GameShark Save</source> <translation>Importiere GameShark-Speicherstand</translation> </message> <message> - <location filename="../Window.cpp" line="1187"/> + <location filename="../Window.cpp" line="1185"/> <source>Export GameShark Save</source> <translation>Exportiere GameShark-Speicherstand</translation> </message> <message> - <location filename="../Window.cpp" line="1192"/> + <location filename="../Window.cpp" line="1190"/> <source>New multiplayer window</source> <translation>Neues Multiplayer-Fenster</translation> </message> <message> - <location filename="../Window.cpp" line="1203"/> + <location filename="../Window.cpp" line="1201"/> <source>E&amp;xit</source> <translation>&amp;Beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1206"/> + <location filename="../Window.cpp" line="1204"/> <source>&amp;Emulation</source> <translation>&amp;Emulation</translation> </message> <message> - <location filename="../Window.cpp" line="1207"/> + <location filename="../Window.cpp" line="1205"/> <source>&amp;Reset</source> <translation>Zu&amp;rücksetzen</translation> </message> <message> - <location filename="../Window.cpp" line="1211"/> + <location filename="../Window.cpp" line="1209"/> <source>Sh&amp;utdown</source> <translation>Schli&amp;eßen</translation> </message> <message> - <location filename="../Window.cpp" line="1215"/> + <location filename="../Window.cpp" line="1213"/> <source>Yank game pak</source> <translation>Spielmodul herausziehen</translation> </message> <message> - <location filename="../Window.cpp" line="1221"/> + <location filename="../Window.cpp" line="1219"/> <source>&amp;Pause</source> <translation>&amp;Pause</translation> </message> <message> - <location filename="../Window.cpp" line="1230"/> + <location filename="../Window.cpp" line="1228"/> <source>&amp;Next frame</source> <translation>&amp;Nächstes Bild</translation> </message> <message> - <location filename="../Window.cpp" line="1236"/> + <location filename="../Window.cpp" line="1234"/> <source>Fast forward (held)</source> <translation>Schneller Vorlauf (gehalten)</translation> </message> <message> - <location filename="../Window.cpp" line="1242"/> + <location filename="../Window.cpp" line="1240"/> <source>&amp;Fast forward</source> <translation>Schneller &amp;Vorlauf</translation> </message> <message> - <location filename="../Window.cpp" line="1246"/> + <location filename="../Window.cpp" line="1244"/> <source>Fast forward speed</source> <translation>Vorlauf-Geschwindigkeit</translation> </message> <message> - <location filename="../Window.cpp" line="1251"/> + <location filename="../Window.cpp" line="1249"/> <source>Unbounded</source> <translation>Unbegrenzt</translation> </message> <message> - <location filename="../Window.cpp" line="1255"/> + <location filename="../Window.cpp" line="1253"/> <source>%0x</source> <translation>%0x</translation> </message> <message> - <location filename="../Window.cpp" line="1259"/> + <location filename="../Window.cpp" line="1257"/> <source>Rewind (held)</source> <translation>Zurückspulen (gehalten)</translation> </message> <message> - <location filename="../Window.cpp" line="1266"/> + <location filename="../Window.cpp" line="1264"/> <source>Re&amp;wind</source> <translation>Zur&amp;ückspulen</translation> </message> <message> - <location filename="../Window.cpp" line="1271"/> + <location filename="../Window.cpp" line="1269"/> <source>Step backwards</source> <translation>Schrittweiser Rücklauf</translation> </message> <message> - <location filename="../Window.cpp" line="1277"/> + <location filename="../Window.cpp" line="1275"/> <source>Sync to &amp;video</source> <translation>Mit &amp;Video synchronisieren</translation> </message> <message> - <location filename="../Window.cpp" line="1284"/> + <location filename="../Window.cpp" line="1282"/> <source>Sync to &amp;audio</source> <translation>Mit &amp;Audio synchronisieren</translation> </message> <message> - <location filename="../Window.cpp" line="1292"/> + <location filename="../Window.cpp" line="1290"/> <source>Solar sensor</source> <translation>Sonnen-Sensor</translation> </message> <message> - <location filename="../Window.cpp" line="1293"/> + <location filename="../Window.cpp" line="1291"/> <source>Increase solar level</source> <translation>Sonnen-Level erhöhen</translation> </message> <message> - <location filename="../Window.cpp" line="1294"/> + <location filename="../Window.cpp" line="1292"/> <source>Decrease solar level</source> <translation>Sonnen-Level verringern</translation> </message> <message> - <location filename="../Window.cpp" line="1295"/> + <location filename="../Window.cpp" line="1293"/> <source>Brightest solar level</source> <translation>Hellster Sonnen-Level</translation> </message> <message> - <location filename="../Window.cpp" line="1298"/> + <location filename="../Window.cpp" line="1296"/> <source>Darkest solar level</source> <translation>Dunkelster Sonnen-Level</translation> </message> <message> - <location filename="../Window.cpp" line="1304"/> + <location filename="../Window.cpp" line="1302"/> <source>Brightness %1</source> <translation>Helligkeit %1</translation> </message> <message> - <location filename="../Window.cpp" line="1319"/> + <location filename="../Window.cpp" line="1317"/> <source>BattleChip Gate...</source> <translation>BattleChip Gate...</translation> </message> <message> - <location filename="../Window.cpp" line="1323"/> + <location filename="../Window.cpp" line="1321"/> <source>Audio/&amp;Video</source> <translation>Audio/&amp;Video</translation> </message> <message> - <location filename="../Window.cpp" line="1324"/> + <location filename="../Window.cpp" line="1322"/> <source>Frame size</source> <translation>Bildgröße</translation> </message> <message> - <location filename="../Window.cpp" line="1351"/> + <location filename="../Window.cpp" line="1349"/> <source>Toggle fullscreen</source> <translation>Vollbildmodus umschalten</translation> </message> <message> - <location filename="../Window.cpp" line="1354"/> + <location filename="../Window.cpp" line="1352"/> <source>Lock aspect ratio</source> <translation>Seitenverhältnis korrigieren</translation> </message> <message> - <location filename="../Window.cpp" line="1366"/> + <location filename="../Window.cpp" line="1364"/> <source>Force integer scaling</source> <translation>Pixelgenaue Skalierung (Integer scaling)</translation> </message> <message> - <location filename="../Window.cpp" line="1378"/> + <location filename="../Window.cpp" line="1376"/> <source>Interframe blending</source> <translation>Interframe-Überblendung</translation> </message> <message> - <location filename="../Window.cpp" line="1395"/> + <location filename="../Window.cpp" line="1393"/> <source>Frame&amp;skip</source> <translation>Frame&amp;skip</translation> </message> <message> - <location filename="../Window.cpp" line="1408"/> + <location filename="../Window.cpp" line="1406"/> <source>Mute</source> <translation>Stummschalten</translation> </message> <message> - <location filename="../Window.cpp" line="1415"/> + <location filename="../Window.cpp" line="1413"/> <source>FPS target</source> <translation>Bildwiederholrate</translation> </message> <message> - <location filename="../Window.cpp" line="1438"/> + <location filename="../Window.cpp" line="1436"/> <source>Take &amp;screenshot</source> <translation>&amp;Screenshot erstellen</translation> </message> <message> - <location filename="../Window.cpp" line="1440"/> + <location filename="../Window.cpp" line="1438"/> <source>F12</source> <translation>F12</translation> </message> <message> - <location filename="../Window.cpp" line="1448"/> + <location filename="../Window.cpp" line="1443"/> <source>Record GIF...</source> <translation>GIF aufzeichen...</translation> </message> <message> - <location filename="../Window.cpp" line="1721"/> + <location filename="../Window.cpp" line="1723"/> <source>Clear</source> <translation>Leeren</translation> </message> <message> - <location filename="../Window.cpp" line="1310"/> + <location filename="../Window.cpp" line="1308"/> <source>Game Boy Printer...</source> <translation>Game Boy Printer...</translation> </message> <message> - <location filename="../Window.cpp" line="1452"/> + <location filename="../Window.cpp" line="1447"/> <source>Video layers</source> <translation>Video-Ebenen</translation> </message> <message> - <location filename="../Window.cpp" line="1453"/> + <location filename="../Window.cpp" line="1448"/> <source>Audio channels</source> <translation>Audio-Kanäle</translation> </message> <message> - <location filename="../Window.cpp" line="1455"/> + <location filename="../Window.cpp" line="1450"/> <source>Adjust layer placement...</source> <translation>Lage der Bildebenen anpassen...</translation> </message> <message> - <location filename="../Window.cpp" line="1457"/> + <location filename="../Window.cpp" line="1452"/> <source>&amp;Tools</source> <translation>&amp;Werkzeuge</translation> </message> <message> - <location filename="../Window.cpp" line="1458"/> + <location filename="../Window.cpp" line="1453"/> <source>View &amp;logs...</source> <translation>&amp;Logs ansehen...</translation> </message> <message> - <location filename="../Window.cpp" line="1460"/> + <location filename="../Window.cpp" line="1455"/> <source>Game &amp;overrides...</source> <translation>Spiel-&amp;Überschreibungen...</translation> </message> <message> - <location filename="../Window.cpp" line="1483"/> + <location filename="../Window.cpp" line="1478"/> <source>&amp;Cheats...</source> <translation>&amp;Cheats...</translation> </message> <message> - <location filename="../Window.cpp" line="1490"/> + <location filename="../Window.cpp" line="1485"/> <source>Open debugger console...</source> <translation>Debugger-Konsole öffnen...</translation> </message> <message> - <location filename="../Window.cpp" line="1492"/> + <location filename="../Window.cpp" line="1487"/> <source>Start &amp;GDB server...</source> <translation>&amp;GDB-Server starten...</translation> </message> <message> - <location filename="../Window.cpp" line="1486"/> + <location filename="../Window.cpp" line="1481"/> <source>Settings...</source> <translation>Einstellungen...</translation> </message>

@@ -4036,72 +4144,72 @@ <source>DS</source>

<translation>DS</translation> </message> <message> - <location filename="../Window.cpp" line="363"/> + <location filename="../Window.cpp" line="360"/> <source>Select folder</source> <translation>Ordner auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="1090"/> + <location filename="../Window.cpp" line="1088"/> <source>Add folder to library...</source> <translation>Ordner zur Bibliothek hinzufügen...</translation> </message> <message> - <location filename="../Window.cpp" line="1200"/> + <location filename="../Window.cpp" line="1198"/> <source>About...</source> <translation>Über...</translation> </message> <message> - <location filename="../Window.cpp" line="1326"/> + <location filename="../Window.cpp" line="1324"/> <source>%1×</source> <translation>%1x</translation> </message> <message> - <location filename="../Window.cpp" line="1387"/> + <location filename="../Window.cpp" line="1385"/> <source>Bilinear filtering</source> <translation>Bilineare Filterung</translation> </message> <message> - <location filename="../Window.cpp" line="1423"/> + <location filename="../Window.cpp" line="1421"/> <source>Native (59.7275)</source> <translation>Nativ (59.7275)</translation> </message> <message> - <location filename="../Window.cpp" line="1444"/> + <location filename="../Window.cpp" line="1442"/> <source>Record A/V...</source> <translation>Audio/Video aufzeichnen...</translation> </message> <message> - <location filename="../Window.cpp" line="1472"/> + <location filename="../Window.cpp" line="1467"/> <source>Game Pak sensors...</source> <translation>Spielmodul-Sensoren...</translation> </message> <message> - <location filename="../Window.cpp" line="1498"/> + <location filename="../Window.cpp" line="1493"/> <source>View &amp;palette...</source> <translation>&amp;Palette betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1499"/> + <location filename="../Window.cpp" line="1494"/> <source>View &amp;sprites...</source> <translation>&amp;Sprites betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1500"/> + <location filename="../Window.cpp" line="1495"/> <source>View &amp;tiles...</source> <translation>&amp;Tiles betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1501"/> + <location filename="../Window.cpp" line="1496"/> <source>View &amp;map...</source> <translation>&amp;Map betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1504"/> + <location filename="../Window.cpp" line="1499"/> <source>&amp;Frame inspector...</source> <translation>&amp;Bildbetrachter...</translation> </message> <message> - <location filename="../Window.cpp" line="1522"/> + <location filename="../Window.cpp" line="1517"/> <source>View memory...</source> <translation>Speicher betrachten...</translation> </message>

@@ -4111,87 +4219,87 @@ <source>View &amp;I/O registers...</source>

<translation>&amp;I/O-Register betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1523"/> + <location filename="../Window.cpp" line="1518"/> <source>Search memory...</source> <translation>Speicher durchsuchen...</translation> </message> <message> - <location filename="../Window.cpp" line="1526"/> + <location filename="../Window.cpp" line="1521"/> <source>View &amp;I/O registers...</source> <translation>&amp;I/O-Register betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1531"/> + <location filename="../Window.cpp" line="1526"/> <source>Record debug video log...</source> <translation>Video-Protokoll aufzeichnen...</translation> </message> <message> - <location filename="../Window.cpp" line="1532"/> + <location filename="../Window.cpp" line="1527"/> <source>Stop debug video log</source> <translation>Aufzeichnen des Video-Protokolls beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1613"/> + <location filename="../Window.cpp" line="1615"/> <source>Exit fullscreen</source> <translation>Vollbildmodus beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1615"/> + <location filename="../Window.cpp" line="1617"/> <source>GameShark Button (held)</source> <translation>GameShark-Taste (gehalten)</translation> </message> <message> - <location filename="../Window.cpp" line="1621"/> + <location filename="../Window.cpp" line="1623"/> <source>Autofire</source> <translation>Autofeuer</translation> </message> <message> - <location filename="../Window.cpp" line="1622"/> + <location filename="../Window.cpp" line="1624"/> <source>Autofire A</source> <translation>Autofeuer A</translation> </message> <message> - <location filename="../Window.cpp" line="1627"/> + <location filename="../Window.cpp" line="1629"/> <source>Autofire B</source> <translation>Autofeuer B</translation> </message> <message> - <location filename="../Window.cpp" line="1632"/> + <location filename="../Window.cpp" line="1634"/> <source>Autofire L</source> <translation>Autofeuer L</translation> </message> <message> - <location filename="../Window.cpp" line="1637"/> + <location filename="../Window.cpp" line="1639"/> <source>Autofire R</source> <translation>Autofeuer R</translation> </message> <message> - <location filename="../Window.cpp" line="1642"/> + <location filename="../Window.cpp" line="1644"/> <source>Autofire Start</source> <translation>Autofeuer Start</translation> </message> <message> - <location filename="../Window.cpp" line="1647"/> + <location filename="../Window.cpp" line="1649"/> <source>Autofire Select</source> <translation>Autofeuer Select</translation> </message> <message> - <location filename="../Window.cpp" line="1652"/> + <location filename="../Window.cpp" line="1654"/> <source>Autofire Up</source> <translation>Autofeuer nach oben</translation> </message> <message> - <location filename="../Window.cpp" line="1657"/> + <location filename="../Window.cpp" line="1659"/> <source>Autofire Right</source> <translation>Autofeuer rechts</translation> </message> <message> - <location filename="../Window.cpp" line="1662"/> + <location filename="../Window.cpp" line="1664"/> <source>Autofire Down</source> <translation>Autofeuer nach unten</translation> </message> <message> - <location filename="../Window.cpp" line="1667"/> + <location filename="../Window.cpp" line="1669"/> <source>Autofire Left</source> <translation>Autofeuer links</translation> </message>

@@ -4504,7 +4612,7 @@ <translation>Überspringe</translation>

</message> <message> <location filename="../SettingsView.ui" line="362"/> - <location filename="../SettingsView.ui" line="786"/> + <location filename="../SettingsView.ui" line="803"/> <source>frames</source> <translation>Bild(er)</translation> </message>

@@ -4575,177 +4683,182 @@ <source>Tree view</source>

<translation>Baumansicht</translation> </message> <message> - <location filename="../SettingsView.ui" line="568"/> + <location filename="../SettingsView.ui" line="582"/> <source>Show FPS in title bar</source> <translation>Bildwiederholrate in der Titelleiste anzeigen</translation> </message> <message> - <location filename="../SettingsView.ui" line="592"/> + <location filename="../SettingsView.ui" line="633"/> <source>Automatically save cheats</source> <translation>Cheats automatisch speichern</translation> </message> <message> - <location filename="../SettingsView.ui" line="602"/> + <location filename="../SettingsView.ui" line="643"/> <source>Automatically load cheats</source> <translation>Cheats automatisch laden</translation> </message> <message> - <location filename="../SettingsView.ui" line="612"/> + <location filename="../SettingsView.ui" line="606"/> <source>Automatically save state</source> <translation>Zustand (Savestate) automatisch speichern</translation> </message> <message> - <location filename="../SettingsView.ui" line="622"/> + <location filename="../SettingsView.ui" line="616"/> <source>Automatically load state</source> <translation>Zustand (Savestate) automatisch laden</translation> </message> <message> - <location filename="../SettingsView.ui" line="632"/> + <location filename="../SettingsView.ui" line="592"/> <source>Enable Discord Rich Presence</source> <translation>Discord-Integration aktivieren</translation> </message> <message> - <location filename="../SettingsView.ui" line="639"/> + <location filename="../SettingsView.ui" line="568"/> <source>Pause when minimized</source> <translation>Pause, wenn minimiert</translation> </message> <message> - <location filename="../SettingsView.ui" line="696"/> + <location filename="../SettingsView.ui" line="653"/> + <source>Show OSD messages</source> + <translation>Bildschirmmeldungen anzeigen</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="713"/> <source>Fast forward (held) speed:</source> <translation>Vorlauf-Geschwindigkeit (halten):</translation> </message> <message> - <location filename="../SettingsView.ui" line="921"/> + <location filename="../SettingsView.ui" line="938"/> <source>Video renderer:</source> <translation>Video-Renderer:</translation> </message> <message> - <location filename="../SettingsView.ui" line="929"/> + <location filename="../SettingsView.ui" line="946"/> <source>Software</source> <translation>Software</translation> </message> <message> - <location filename="../SettingsView.ui" line="934"/> + <location filename="../SettingsView.ui" line="951"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../SettingsView.ui" line="942"/> + <location filename="../SettingsView.ui" line="959"/> <source>OpenGL enhancements</source> <translation>OpenGL-Verbesserungen</translation> </message> <message> - <location filename="../SettingsView.ui" line="948"/> + <location filename="../SettingsView.ui" line="965"/> <source>High-resolution scale:</source> <translation>Hochauflösende Skalierung:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1011"/> + <location filename="../SettingsView.ui" line="1028"/> <source>XQ GBA audio (experimental)</source> <translation>XQ GBA-Audio (experimentell)</translation> </message> <message> - <location filename="../SettingsView.ui" line="1350"/> + <location filename="../SettingsView.ui" line="1367"/> <source>Cheats</source> <translation>Cheats</translation> </message> <message> - <location filename="../SettingsView.ui" line="1407"/> + <location filename="../SettingsView.ui" line="1424"/> <source>Log to file</source> <translation>In Datei protokollieren</translation> </message> <message> - <location filename="../SettingsView.ui" line="1414"/> + <location filename="../SettingsView.ui" line="1431"/> <source>Log to console</source> <translation>Auf die Konsole protokollieren</translation> </message> <message> - <location filename="../SettingsView.ui" line="1428"/> + <location filename="../SettingsView.ui" line="1445"/> <source>Select Log File</source> <translation>Protokoll-Datei auswählen</translation> </message> <message> - <location filename="../SettingsView.ui" line="1855"/> + <location filename="../SettingsView.ui" line="1872"/> <source>Camera:</source> <translation>Kamera:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1449"/> - <location filename="../SettingsView.ui" line="1485"/> - <location filename="../SettingsView.ui" line="1521"/> + <location filename="../SettingsView.ui" line="1466"/> + <location filename="../SettingsView.ui" line="1502"/> + <location filename="../SettingsView.ui" line="1538"/> <source>Autodetect</source> <translation>Automatisch erkennen</translation> </message> <message> - <location filename="../SettingsView.ui" line="1454"/> - <location filename="../SettingsView.ui" line="1490"/> - <location filename="../SettingsView.ui" line="1526"/> + <location filename="../SettingsView.ui" line="1471"/> + <location filename="../SettingsView.ui" line="1507"/> + <location filename="../SettingsView.ui" line="1543"/> <source>Game Boy (DMG)</source> <translation>Game Boy (DMG)</translation> </message> <message> - <location filename="../SettingsView.ui" line="1459"/> - <location filename="../SettingsView.ui" line="1495"/> - <location filename="../SettingsView.ui" line="1531"/> + <location filename="../SettingsView.ui" line="1476"/> + <location filename="../SettingsView.ui" line="1512"/> + <location filename="../SettingsView.ui" line="1548"/> <source>Super Game Boy (SGB)</source> <translation>Super Game Boy (SGB)</translation> </message> <message> - <location filename="../SettingsView.ui" line="1464"/> - <location filename="../SettingsView.ui" line="1500"/> - <location filename="../SettingsView.ui" line="1536"/> + <location filename="../SettingsView.ui" line="1481"/> + <location filename="../SettingsView.ui" line="1517"/> + <location filename="../SettingsView.ui" line="1553"/> <source>Game Boy Color (CGB)</source> <translation>Game Boy Color (CGB)</translation> </message> <message> - <location filename="../SettingsView.ui" line="1469"/> - <location filename="../SettingsView.ui" line="1505"/> - <location filename="../SettingsView.ui" line="1541"/> + <location filename="../SettingsView.ui" line="1486"/> + <location filename="../SettingsView.ui" line="1522"/> + <location filename="../SettingsView.ui" line="1558"/> <source>Game Boy Advance (AGB)</source> <translation>Game Boy Advance (AGB)</translation> </message> <message> - <location filename="../SettingsView.ui" line="1556"/> + <location filename="../SettingsView.ui" line="1573"/> <source>Default BG colors:</source> <translation>Standard-Hintergrundfarben:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1834"/> + <location filename="../SettingsView.ui" line="1851"/> <source>Default sprite colors 1:</source> <translation>Standard-Sprite-Farben 1:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1841"/> + <location filename="../SettingsView.ui" line="1858"/> <source>Default sprite colors 2:</source> <translation>Standard-Sprite-Farben 2:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1848"/> + <location filename="../SettingsView.ui" line="1865"/> <source>Use GBC colors in GB games</source> <translation>Verwende GBC-Farben in GB-Spielen</translation> </message> <message> - <location filename="../SettingsView.ui" line="1723"/> + <location filename="../SettingsView.ui" line="1740"/> <source>Super Game Boy borders</source> <translation>Super Game Boy-Rahmen</translation> </message> <message> - <location filename="../SettingsView.ui" line="1441"/> + <location filename="../SettingsView.ui" line="1458"/> <source>Game Boy model:</source> <translation>Game Boy-Modell:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1477"/> + <location filename="../SettingsView.ui" line="1494"/> <source>Super Game Boy model:</source> <translation>Super Game Boy-Modell:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1513"/> + <location filename="../SettingsView.ui" line="1530"/> <source>Game Boy Color model:</source> <translation>Game Boy Color-Modell:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1737"/> + <location filename="../SettingsView.ui" line="1754"/> <source>Camera driver:</source> <translation>Kamera-Treiber:</translation> </message>

@@ -4765,26 +4878,26 @@ <source>Clear cache</source>

<translation>Cache leeren</translation> </message> <message> - <location filename="../SettingsView.ui" line="653"/> + <location filename="../SettingsView.ui" line="670"/> <source>Fast forward speed:</source> <translation>Vorlauf-Geschwindigkeit:</translation> </message> <message> - <location filename="../SettingsView.ui" line="828"/> + <location filename="../SettingsView.ui" line="845"/> <source>Preload entire ROM into memory</source> <translation>ROM-Datei vollständig in Arbeitsspeicher vorladen</translation> </message> <message> - <location filename="../SettingsView.ui" line="1041"/> - <location filename="../SettingsView.ui" line="1079"/> - <location filename="../SettingsView.ui" line="1114"/> - <location filename="../SettingsView.ui" line="1142"/> - <location filename="../SettingsView.ui" line="1183"/> - <location filename="../SettingsView.ui" line="1231"/> - <location filename="../SettingsView.ui" line="1279"/> - <location filename="../SettingsView.ui" line="1327"/> - <location filename="../SettingsView.ui" line="1375"/> + <location filename="../SettingsView.ui" line="1058"/> + <location filename="../SettingsView.ui" line="1096"/> + <location filename="../SettingsView.ui" line="1131"/> + <location filename="../SettingsView.ui" line="1159"/> + <location filename="../SettingsView.ui" line="1200"/> + <location filename="../SettingsView.ui" line="1248"/> + <location filename="../SettingsView.ui" line="1296"/> + <location filename="../SettingsView.ui" line="1344"/> + <location filename="../SettingsView.ui" line="1392"/> <source>Browse</source> <translation>Durchsuchen</translation> </message>

@@ -4799,26 +4912,26 @@ <source>DS BIOS 9 file:</source>

<translation>DS-BIOS 9:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1050"/> + <location filename="../SettingsView.ui" line="1067"/> <source>Use BIOS file if found</source> <translation>BIOS-Datei verwenden, wenn vorhanden</translation> </message> <message> - <location filename="../SettingsView.ui" line="1060"/> + <location filename="../SettingsView.ui" line="1077"/> <source>Skip BIOS intro</source> <translation>BIOS-Intro überspringen</translation> </message> <message> - <location filename="../SettingsView.ui" line="665"/> - <location filename="../SettingsView.ui" line="708"/> - <location filename="../SettingsView.ui" line="957"/> + <location filename="../SettingsView.ui" line="682"/> + <location filename="../SettingsView.ui" line="725"/> + <location filename="../SettingsView.ui" line="974"/> <source>×</source> <translation>×</translation> </message> <message> - <location filename="../SettingsView.ui" line="684"/> - <location filename="../SettingsView.ui" line="727"/> + <location filename="../SettingsView.ui" line="701"/> + <location filename="../SettingsView.ui" line="744"/> <source>Unbounded</source> <translation>unbegrenzt</translation> </message>

@@ -4838,17 +4951,17 @@ <source>Pause when inactive</source>

<translation>Pause, wenn inaktiv</translation> </message> <message> - <location filename="../SettingsView.ui" line="810"/> + <location filename="../SettingsView.ui" line="827"/> <source>Run all</source> <translation>Alle ausführen</translation> </message> <message> - <location filename="../SettingsView.ui" line="815"/> + <location filename="../SettingsView.ui" line="832"/> <source>Remove known</source> <translation>Bekannte entfernen</translation> </message> <message> - <location filename="../SettingsView.ui" line="820"/> + <location filename="../SettingsView.ui" line="837"/> <source>Detect and remove</source> <translation>Erkennen und entfernen</translation> </message>

@@ -4858,25 +4971,25 @@ <source>Allow opposing input directions</source>

<translation>Gegensätzliche Eingaberichtungen erlauben</translation> </message> <message> - <location filename="../SettingsView.ui" line="849"/> - <location filename="../SettingsView.ui" line="893"/> + <location filename="../SettingsView.ui" line="866"/> + <location filename="../SettingsView.ui" line="910"/> <source>Screenshot</source> <translation>Screenshot</translation> </message> <message> - <location filename="../SettingsView.ui" line="859"/> - <location filename="../SettingsView.ui" line="903"/> + <location filename="../SettingsView.ui" line="876"/> + <location filename="../SettingsView.ui" line="920"/> <source>Save data</source> <translation>Speicherdaten</translation> </message> <message> - <location filename="../SettingsView.ui" line="869"/> - <location filename="../SettingsView.ui" line="910"/> + <location filename="../SettingsView.ui" line="886"/> + <location filename="../SettingsView.ui" line="927"/> <source>Cheat codes</source> <translation>Cheat-Codes</translation> </message> <message> - <location filename="../SettingsView.ui" line="763"/> + <location filename="../SettingsView.ui" line="780"/> <source>Enable rewind</source> <translation>Rücklauf aktivieren</translation> </message>

@@ -4886,47 +4999,47 @@ <source>Bilinear filtering</source>

<translation>Bilineare Filterung</translation> </message> <message> - <location filename="../SettingsView.ui" line="770"/> + <location filename="../SettingsView.ui" line="787"/> <source>Rewind history:</source> <translation>Rücklauf-Verlauf:</translation> </message> <message> - <location filename="../SettingsView.ui" line="802"/> + <location filename="../SettingsView.ui" line="819"/> <source>Idle loops:</source> <translation>Leerlaufprozesse:</translation> </message> <message> - <location filename="../SettingsView.ui" line="842"/> + <location filename="../SettingsView.ui" line="859"/> <source>Savestate extra data:</source> <translation>Zusätzliche Savestate-Daten:</translation> </message> <message> - <location filename="../SettingsView.ui" line="886"/> + <location filename="../SettingsView.ui" line="903"/> <source>Load extra data:</source> <translation>Lade zusätzliche Daten:</translation> </message> <message> - <location filename="../SettingsView.ui" line="739"/> + <location filename="../SettingsView.ui" line="756"/> <source>Autofire interval:</source> <translation>Autofeuer-Intervall:</translation> </message> <message> - <location filename="../SettingsView.ui" line="986"/> + <location filename="../SettingsView.ui" line="1003"/> <source>(240×160)</source> <translation>(240×160)</translation> </message> <message> - <location filename="../SettingsView.ui" line="1022"/> + <location filename="../SettingsView.ui" line="1039"/> <source>GB BIOS file:</source> <translation>Datei mit GB-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1088"/> + <location filename="../SettingsView.ui" line="1105"/> <source>GBA BIOS file:</source> <translation>Datei mit GBA-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1095"/> + <location filename="../SettingsView.ui" line="1112"/> <source>GBC BIOS file:</source> <translation>Datei mit GBC-BIOS:</translation> </message>

@@ -4936,36 +5049,36 @@ <source>DS firmware file:</source>

<translation>DS-Firmware:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1123"/> + <location filename="../SettingsView.ui" line="1140"/> <source>SGB BIOS file:</source> <translation>Datei mit SGB-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1158"/> + <location filename="../SettingsView.ui" line="1175"/> <source>Save games</source> <translation>Spielstände</translation> </message> <message> - <location filename="../SettingsView.ui" line="1192"/> - <location filename="../SettingsView.ui" line="1240"/> - <location filename="../SettingsView.ui" line="1288"/> - <location filename="../SettingsView.ui" line="1336"/> - <location filename="../SettingsView.ui" line="1384"/> + <location filename="../SettingsView.ui" line="1209"/> + <location filename="../SettingsView.ui" line="1257"/> + <location filename="../SettingsView.ui" line="1305"/> + <location filename="../SettingsView.ui" line="1353"/> + <location filename="../SettingsView.ui" line="1401"/> <source>Same directory as the ROM</source> <translation>Verzeichnis der ROM-Datei</translation> </message> <message> - <location filename="../SettingsView.ui" line="1206"/> + <location filename="../SettingsView.ui" line="1223"/> <source>Save states</source> <translation>Savestates</translation> </message> <message> - <location filename="../SettingsView.ui" line="1254"/> + <location filename="../SettingsView.ui" line="1271"/> <source>Screenshots</source> <translation>Screenshots</translation> </message> <message> - <location filename="../SettingsView.ui" line="1302"/> + <location filename="../SettingsView.ui" line="1319"/> <source>Patches</source> <translation>Patches</translation> </message>

@@ -5039,34 +5152,49 @@ <source>Tiles</source>

<translation>Tiles</translation> </message> <message> - <location filename="../TileView.ui" line="29"/> + <location filename="../TileView.ui" line="20"/> + <source>Export Selected</source> + <translation>Auswahl exportieren</translation> + </message> + <message> + <location filename="../TileView.ui" line="27"/> + <source>Export All</source> + <translation>Alle exportieren</translation> + </message> + <message> + <location filename="../TileView.ui" line="43"/> <source>256 colors</source> <translation>256 Farben</translation> </message> <message> - <location filename="../TileView.ui" line="42"/> + <location filename="../TileView.ui" line="56"/> <source>×</source> <translation>×</translation> </message> <message> - <location filename="../TileView.ui" line="55"/> + <location filename="../TileView.ui" line="69"/> <source>Magnification</source> <translation>Vergrößerung</translation> </message> <message> - <location filename="../TileView.ui" line="78"/> + <location filename="../TileView.ui" line="92"/> <source>Tiles per row</source> <translation>Tiles pro Zeile</translation> </message> <message> - <location filename="../TileView.ui" line="85"/> + <location filename="../TileView.ui" line="99"/> <source>Fit to window</source> <translation>An Fenster anpassen</translation> </message> <message> - <location filename="../TileView.ui" line="113"/> - <source>Export</source> - <translation>Exportieren</translation> + <location filename="../TileView.ui" line="192"/> + <source>Copy Selected</source> + <translation>Auswahl kopieren</translation> + </message> + <message> + <location filename="../TileView.ui" line="199"/> + <source>Copy All</source> + <translation>Alle kopieren</translation> </message> </context> <context>
M src/platform/qt/ts/medusa-emu-es.tssrc/platform/qt/ts/medusa-emu-es.ts

@@ -232,14 +232,19 @@ <source>Load</source>

<translation>Cargar</translation> </message> <message> - <location filename="../CheatsView.ui" line="69"/> + <location filename="../CheatsView.ui" line="48"/> <source>Add New Set</source> <translation>Agregar nuevo conjunto</translation> </message> <message> - <location filename="../CheatsView.ui" line="76"/> + <location filename="../CheatsView.ui" line="55"/> <source>Add</source> <translation>Agregar</translation> + </message> + <message> + <location filename="../CheatsView.ui" line="95"/> + <source>Enter codes here...</source> + <translation>Ingresa los códigos aquí...</translation> </message> </context> <context>

@@ -261,6 +266,49 @@ <translation>Entrar a depuración</translation>

</message> </context> <context> + <name>FrameView</name> + <message> + <location filename="../FrameView.ui" line="14"/> + <source>Inspect frame</source> + <translation>Inspeccionar cuadro</translation> + </message> + <message> + <location filename="../FrameView.ui" line="28"/> + <source>×</source> + <translation>×</translation> + </message> + <message> + <location filename="../FrameView.ui" line="41"/> + <source>Magnification</source> + <translation>Ampliación</translation> + </message> + <message> + <location filename="../FrameView.ui" line="50"/> + <source>Freeze frame</source> + <translation>Congelar cuadro</translation> + </message> + <message> + <location filename="../FrameView.ui" line="84"/> + <source>Backdrop color</source> + <translation>Color de telón de fondo (backdrop)</translation> + </message> + <message> + <location filename="../FrameView.ui" line="132"/> + <source>Disable scanline effects</source> + <translation>Desactivar efectos de línea de trazado</translation> + </message> + <message> + <location filename="../FrameView.ui" line="145"/> + <source>Export</source> + <translation>Exportar</translation> + </message> + <message> + <location filename="../FrameView.ui" line="152"/> + <source>Reset</source> + <translation>Reinicializar</translation> + </message> +</context> +<context> <name>GIFView</name> <message> <location filename="../GIFView.ui" line="14"/>

@@ -268,34 +316,32 @@ <source>Record GIF</source>

<translation>Grabar GIF</translation> </message> <message> - <location filename="../GIFView.ui" line="34"/> + <location filename="../GIFView.ui" line="68"/> <source>Start</source> <translation>Iniciar</translation> </message> <message> - <location filename="../GIFView.ui" line="50"/> + <location filename="../GIFView.ui" line="84"/> <source>Stop</source> <translation>Detener</translation> </message> <message> - <location filename="../GIFView.ui" line="63"/> + <location filename="../GIFView.ui" line="110"/> <source>Select File</source> <translation>Seleccionar archivo</translation> </message> <message> - <location filename="../GIFView.ui" line="101"/> + <location filename="../GIFView.ui" line="36"/> <source>Frameskip</source> <translation>Salto</translation> </message> <message> - <location filename="../GIFView.ui" line="115"/> <source>Frame delay (ms)</source> - <translation>Retraso (ms)</translation> + <translation type="vanished">Retraso (ms)</translation> </message> <message> - <location filename="../GIFView.ui" line="122"/> <source>Automatic</source> - <translation>Automático</translation> + <translation type="vanished">Automático</translation> </message> </context> <context>

@@ -423,13 +469,13 @@ <context>

<name>LoadSaveState</name> <message> <location filename="../LoadSaveState.ui" line="14"/> - <location filename="../LoadSaveState.ui" line="88"/> + <location filename="../LoadSaveState.ui" line="66"/> <source>%1 State</source> <translation>%1 estado</translation> </message> <message> <location filename="../LoadSaveState.ui" line="41"/> - <location filename="../LoadSaveState.ui" line="63"/> + <location filename="../LoadSaveState.ui" line="85"/> <location filename="../LoadSaveState.ui" line="107"/> <location filename="../LoadSaveState.ui" line="129"/> <location filename="../LoadSaveState.ui" line="151"/>

@@ -441,17 +487,22 @@ <source>No Save</source>

<translation>Sin estado</translation> </message> <message> - <location filename="../LoadSaveState.ui" line="50"/> + <location filename="../LoadSaveState.ui" line="160"/> <source>1</source> <translation>1</translation> </message> <message> - <location filename="../LoadSaveState.ui" line="72"/> + <location filename="../LoadSaveState.ui" line="248"/> <source>2</source> <translation>2</translation> </message> <message> - <location filename="../LoadSaveState.ui" line="116"/> + <location filename="../LoadSaveState.ui" line="261"/> + <source>Cancel</source> + <translation>Cancelar</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="182"/> <source>3</source> <translation>3</translation> </message>

@@ -461,12 +512,12 @@ <source>4</source>

<translation>4</translation> </message> <message> - <location filename="../LoadSaveState.ui" line="160"/> + <location filename="../LoadSaveState.ui" line="50"/> <source>5</source> <translation>5</translation> </message> <message> - <location filename="../LoadSaveState.ui" line="182"/> + <location filename="../LoadSaveState.ui" line="94"/> <source>6</source> <translation>6</translation> </message>

@@ -476,12 +527,12 @@ <source>7</source>

<translation>7</translation> </message> <message> - <location filename="../LoadSaveState.ui" line="226"/> + <location filename="../LoadSaveState.ui" line="116"/> <source>8</source> <translation>8</translation> </message> <message> - <location filename="../LoadSaveState.ui" line="248"/> + <location filename="../LoadSaveState.ui" line="226"/> <source>9</source> <translation>9</translation> </message>

@@ -541,7 +592,7 @@ </message>

<message> <location filename="../LogView.ui" line="130"/> <source>Max Lines</source> - <translation>Líneas max.</translation> + <translation>Líneas max</translation> </message> </context> <context>

@@ -552,142 +603,230 @@ <source>Maps</source>

<translation>Mapas</translation> </message> <message> - <location filename="../MapView.ui" line="101"/> + <location filename="../MapView.ui" line="30"/> <source>×</source> <translation>x</translation> </message> <message> - <location filename="../MapView.ui" line="114"/> + <location filename="../MapView.ui" line="43"/> <source>Magnification</source> <translation>Ampliación</translation> </message> <message> - <location filename="../MapView.ui" line="123"/> + <location filename="../MapView.ui" line="124"/> <source>Export</source> <translation>Exportar</translation> </message> + <message> + <location filename="../MapView.ui" line="139"/> + <source>Copy</source> + <translation>Copiar</translation> + </message> +</context> +<context> + <name>MemoryDump</name> + <message> + <location filename="../MemoryDump.ui" line="14"/> + <source>Save Memory Range</source> + <translation>Volcar rango de memoria</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="20"/> + <source>Start Address:</source> + <translation>Dirección de inicio:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="42"/> + <source>:</source> + <translation>:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="58"/> + <location filename="../MemoryDump.ui" line="89"/> + <source>0x</source> + <translation>0x</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="76"/> + <source>Byte Count:</source> + <translation>Cantidad de bytes:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="108"/> + <source>Dump across banks</source> + <translation>Volcar entre bancos de memoria</translation> + </message> </context> <context> <name>MemorySearch</name> <message> - <location filename="../MemorySearch.ui" line="20"/> + <location filename="../MemorySearch.ui" line="26"/> <source>Memory Search</source> <translation>Búsqueda en la memoria</translation> </message> <message> - <location filename="../MemorySearch.ui" line="45"/> + <location filename="../MemorySearch.ui" line="51"/> <source>Address</source> <translation>Dirección</translation> </message> <message> - <location filename="../MemorySearch.ui" line="50"/> + <location filename="../MemorySearch.ui" line="56"/> <source>Current Value</source> <translation>Valor actual</translation> </message> <message> - <location filename="../MemorySearch.ui" line="55"/> - <location filename="../MemorySearch.ui" line="75"/> + <location filename="../MemorySearch.ui" line="61"/> + <location filename="../MemorySearch.ui" line="81"/> <source>Type</source> <translation>Tipo</translation> </message> <message> - <location filename="../MemorySearch.ui" line="65"/> + <location filename="../MemorySearch.ui" line="71"/> <source>Value</source> <translation>Valor</translation> </message> <message> - <location filename="../MemorySearch.ui" line="82"/> + <location filename="../MemorySearch.ui" line="88"/> <source>Numeric</source> <translation>Numérico</translation> </message> <message> - <location filename="../MemorySearch.ui" line="95"/> + <location filename="../MemorySearch.ui" line="101"/> <source>Text</source> <translation>Texto</translation> </message> <message> - <location filename="../MemorySearch.ui" line="112"/> + <location filename="../MemorySearch.ui" line="118"/> <source>Width</source> <translation>Ancho</translation> </message> <message> - <location filename="../MemorySearch.ui" line="132"/> + <location filename="../MemorySearch.ui" line="138"/> <source>1 Byte (8-bit)</source> <translation>1 byte (8 bits)</translation> </message> <message> - <location filename="../MemorySearch.ui" line="142"/> + <location filename="../MemorySearch.ui" line="148"/> <source>2 Bytes (16-bit)</source> <translation>2 bytes (16 bits)</translation> </message> <message> - <location filename="../MemorySearch.ui" line="152"/> + <location filename="../MemorySearch.ui" line="158"/> <source>4 Bytes (32-bit)</source> <translation>4 bytes (32 bits)</translation> </message> <message> - <location filename="../MemorySearch.ui" line="172"/> + <location filename="../MemorySearch.ui" line="178"/> <source>Number type</source> <translation>Tipo de número</translation> </message> <message> - <location filename="../MemorySearch.ui" line="196"/> + <location filename="../MemorySearch.ui" line="202"/> <source>Hexadecimal</source> <translation>Hexadecimal</translation> </message> <message> - <location filename="../MemorySearch.ui" line="189"/> + <location filename="../MemorySearch.ui" line="216"/> + <source>Search type</source> + <translation>Tipo de búsqueda</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="223"/> + <source>Equal to value</source> + <translation>Igual a valor</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="236"/> + <source>Greater than value</source> + <translation>Mayor que valor</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="246"/> + <source>Less than value</source> + <translation>Menor que valor</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="256"/> + <source>Unknown/changed</source> + <translation>Desconocido/cambiado</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="269"/> + <source>Changed by value</source> + <translation>Cambiado a valor</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="282"/> + <source>Unchanged</source> + <translation>Sin cambios</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="295"/> + <source>Increased</source> + <translation>Aumentado</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="308"/> + <source>Decreased</source> + <translation>Disminuido</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="318"/> + <source>Search ROM</source> + <translation>Buscar ROM</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="336"/> + <source>New Search</source> + <translation>Nueva búsqueda</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="195"/> <source>Decimal</source> <translation>Decimal</translation> </message> <message> - <location filename="../MemorySearch.ui" line="119"/> - <location filename="../MemorySearch.ui" line="179"/> + <location filename="../MemorySearch.ui" line="125"/> + <location filename="../MemorySearch.ui" line="185"/> <source>Guess</source> <translation>Adivinar</translation> </message> <message> - <location filename="../MemorySearch.ui" line="210"/> <source>Compare</source> - <translation>Comparar</translation> + <translation type="vanished">Comparar</translation> </message> <message> - <location filename="../MemorySearch.ui" line="217"/> <source>Equal</source> - <translation>Igual a</translation> + <translation type="vanished">Igual a</translation> </message> <message> - <location filename="../MemorySearch.ui" line="230"/> <source>Greater</source> - <translation>Mayor que</translation> + <translation type="vanished">Mayor que</translation> </message> <message> - <location filename="../MemorySearch.ui" line="240"/> <source>Less</source> - <translation>Menor que</translation> + <translation type="vanished">Menor que</translation> </message> <message> - <location filename="../MemorySearch.ui" line="253"/> <source>Delta</source> - <translation>Diferencia</translation> + <translation type="vanished">Diferencia</translation> </message> <message> - <location filename="../MemorySearch.ui" line="274"/> <source>Search</source> - <translation>Buscar</translation> + <translation type="vanished">Buscar</translation> </message> <message> - <location filename="../MemorySearch.ui" line="281"/> + <location filename="../MemorySearch.ui" line="343"/> <source>Search Within</source> <translation>Buscar dentro</translation> </message> <message> - <location filename="../MemorySearch.ui" line="288"/> + <location filename="../MemorySearch.ui" line="350"/> <source>Open in Memory Viewer</source> <translation>Abrir en el Visor de memoria</translation> </message> <message> - <location filename="../MemorySearch.ui" line="295"/> + <location filename="../MemorySearch.ui" line="357"/> <source>Refresh</source> <translation>Actualizar</translation> </message>

@@ -705,12 +844,17 @@ <source>Inspect Address:</source>

<translation>Inspeccionar dirección:</translation> </message> <message> - <location filename="../MemoryView.ui" line="61"/> + <location filename="../MemoryView.ui" line="58"/> + <source>:</source> + <translation>:</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="68"/> <source>0x</source> <translation>0x</translation> </message> <message> - <location filename="../MemoryView.ui" line="81"/> + <location filename="../MemoryView.ui" line="88"/> <source>Set Alignment:</source> <translation>Alinear a:</translation> </message>

@@ -727,57 +871,62 @@ <source>4 Bytes</source>

<translation type="vanished">4 bytes</translation> </message> <message> - <location filename="../MemoryView.ui" line="101"/> + <location filename="../MemoryView.ui" line="108"/> <source>&amp;1 Byte</source> <translation></translation> </message> <message> - <location filename="../MemoryView.ui" line="124"/> + <location filename="../MemoryView.ui" line="131"/> <source>&amp;2 Bytes</source> <translation></translation> </message> <message> - <location filename="../MemoryView.ui" line="144"/> + <location filename="../MemoryView.ui" line="151"/> <source>&amp;4 Bytes</source> <translation></translation> </message> <message> - <location filename="../MemoryView.ui" line="180"/> + <location filename="../MemoryView.ui" line="187"/> <source>Unsigned Integer:</source> <translation>Entero sin signo:</translation> </message> <message> - <location filename="../MemoryView.ui" line="198"/> + <location filename="../MemoryView.ui" line="205"/> <source>Signed Integer:</source> <translation>Entero con signo:</translation> </message> <message> - <location filename="../MemoryView.ui" line="216"/> + <location filename="../MemoryView.ui" line="223"/> <source>String:</source> <translation>Cadena de texto:</translation> </message> <message> - <location filename="../MemoryView.ui" line="230"/> + <location filename="../MemoryView.ui" line="237"/> <source>Load TBL</source> <translation>Cargar TBL</translation> </message> <message> - <location filename="../MemoryView.ui" line="243"/> + <location filename="../MemoryView.ui" line="250"/> <source>Copy Selection</source> <translation>Copiar selección</translation> </message> <message> - <location filename="../MemoryView.ui" line="250"/> + <location filename="../MemoryView.ui" line="257"/> <source>Paste</source> <translation>Pegar</translation> </message> <message> - <location filename="../MemoryView.ui" line="270"/> + <location filename="../MemoryView.ui" line="277"/> <source>Save Selection</source> <translation>Guardar selección</translation> </message> <message> - <location filename="../MemoryView.ui" line="277"/> + <location filename="../MemoryView.ui" line="284"/> + <source>Save Range</source> + <translation>Guardar rango</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="291"/> <source>Load</source> <translation>Cargar</translation> </message>

@@ -790,140 +939,145 @@ <source>Sprites</source>

<translation>Sprites</translation> </message> <message> - <location filename="../ObjView.ui" line="56"/> - <location filename="../ObjView.ui" line="506"/> + <location filename="../ObjView.ui" line="137"/> + <location filename="../ObjView.ui" line="568"/> <source>×</source> <translation>x</translation> </message> <message> - <location filename="../ObjView.ui" line="69"/> + <location filename="../ObjView.ui" line="581"/> <source>Magnification</source> <translation>Ampliación</translation> </message> <message> - <location filename="../ObjView.ui" line="76"/> + <location filename="../ObjView.ui" line="212"/> <source>Export</source> <translation>Esportar</translation> </message> <message> - <location filename="../ObjView.ui" line="85"/> + <location filename="../ObjView.ui" line="219"/> <source>Attributes</source> <translation>Atributos</translation> </message> <message> - <location filename="../ObjView.ui" line="93"/> + <location filename="../ObjView.ui" line="227"/> <source>Transform</source> <translation>Transform</translation> </message> <message> - <location filename="../ObjView.ui" line="113"/> + <location filename="../ObjView.ui" line="247"/> <source>Off</source> <translation>No</translation> </message> <message> - <location filename="../ObjView.ui" line="124"/> + <location filename="../ObjView.ui" line="258"/> <source>Palette</source> <translation>Paleta</translation> </message> <message> - <location filename="../ObjView.ui" line="144"/> - <location filename="../ObjView.ui" line="374"/> - <location filename="../ObjView.ui" line="430"/> - <location filename="../ObjView.ui" line="456"/> + <location filename="../ObjView.ui" line="61"/> + <location filename="../ObjView.ui" line="87"/> + <location filename="../ObjView.ui" line="278"/> + <location filename="../ObjView.ui" line="508"/> <source>0</source> <translation>0</translation> </message> <message> - <location filename="../ObjView.ui" line="158"/> + <location filename="../ObjView.ui" line="20"/> + <source>Copy</source> + <translation>Copiar</translation> + </message> + <message> + <location filename="../ObjView.ui" line="292"/> <source>Double Size</source> <translation>Tamaño doble</translation> </message> <message> - <location filename="../ObjView.ui" line="184"/> - <location filename="../ObjView.ui" line="228"/> - <location filename="../ObjView.ui" line="241"/> - <location filename="../ObjView.ui" line="309"/> + <location filename="../ObjView.ui" line="318"/> + <location filename="../ObjView.ui" line="362"/> + <location filename="../ObjView.ui" line="375"/> + <location filename="../ObjView.ui" line="443"/> <source>Return, Ctrl+R</source> <translation>Volver, Ctrl+R</translation> </message> <message> - <location filename="../ObjView.ui" line="202"/> + <location filename="../ObjView.ui" line="336"/> <source>Flipped</source> <translation>Volteo</translation> </message> <message> - <location filename="../ObjView.ui" line="225"/> + <location filename="../ObjView.ui" line="359"/> <source>H</source> <translation>H</translation> </message> <message> - <location filename="../ObjView.ui" line="238"/> + <location filename="../ObjView.ui" line="372"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../ObjView.ui" line="252"/> + <location filename="../ObjView.ui" line="386"/> <source>Mode</source> <translation>Modo</translation> </message> <message> - <location filename="../ObjView.ui" line="272"/> + <location filename="../ObjView.ui" line="406"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../ObjView.ui" line="283"/> + <location filename="../ObjView.ui" line="417"/> <source>Mosaic</source> <translation>Mosaico</translation> </message> <message> - <location filename="../ObjView.ui" line="320"/> + <location filename="../ObjView.ui" line="454"/> <source>Enabled</source> <translation>Habilitado</translation> </message> <message> - <location filename="../ObjView.ui" line="354"/> + <location filename="../ObjView.ui" line="488"/> <source>Priority</source> <translation>Prioridad</translation> </message> <message> - <location filename="../ObjView.ui" line="389"/> + <location filename="../ObjView.ui" line="205"/> <source>Tile</source> <translation>Tile</translation> </message> <message> - <location filename="../ObjView.ui" line="396"/> + <location filename="../ObjView.ui" line="27"/> <source>Geometry</source> <translation>Geometría</translation> </message> <message> - <location filename="../ObjView.ui" line="404"/> + <location filename="../ObjView.ui" line="35"/> <source>Position</source> <translation>Posición</translation> </message> <message> - <location filename="../ObjView.ui" line="440"/> + <location filename="../ObjView.ui" line="71"/> <source>, </source> <translation>, </translation> </message> <message> - <location filename="../ObjView.ui" line="470"/> + <location filename="../ObjView.ui" line="101"/> <source>Dimensions</source> <translation>Dimensiones</translation> </message> <message> - <location filename="../ObjView.ui" line="496"/> - <location filename="../ObjView.ui" line="522"/> + <location filename="../ObjView.ui" line="127"/> + <location filename="../ObjView.ui" line="153"/> <source>8</source> <translation>8</translation> </message> <message> - <location filename="../ObjView.ui" line="552"/> + <location filename="../ObjView.ui" line="538"/> <source>Address</source> <translation>Dirección</translation> </message> <message> - <location filename="../ObjView.ui" line="559"/> + <location filename="../ObjView.ui" line="545"/> <source>0x07000000</source> <translation>0x07000000</translation> </message>

@@ -1081,36 +1235,51 @@ <translation>MBC5 + Rumble</translation>

</message> <message> <location filename="../OverrideView.ui" line="324"/> + <source>MBC6</source> + <translation>MBC6</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="329"/> <source>MBC7</source> <translation>MBC7</translation> </message> <message> - <location filename="../OverrideView.ui" line="329"/> + <location filename="../OverrideView.ui" line="334"/> + <source>MMM01</source> + <translation></translation> + </message> + <message> + <location filename="../OverrideView.ui" line="339"/> <source>Pocket Cam</source> <translation></translation> </message> <message> - <location filename="../OverrideView.ui" line="334"/> + <location filename="../OverrideView.ui" line="344"/> <source>TAMA5</source> <translation></translation> </message> <message> - <location filename="../OverrideView.ui" line="339"/> + <location filename="../OverrideView.ui" line="349"/> + <source>HuC-1</source> + <translation>HuC-1</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="354"/> <source>HuC-3</source> <translation>HuC-3</translation> </message> <message> - <location filename="../OverrideView.ui" line="347"/> + <location filename="../OverrideView.ui" line="362"/> <source>Background Colors</source> <translation>Colores de fondo</translation> </message> <message> - <location filename="../OverrideView.ui" line="434"/> + <location filename="../OverrideView.ui" line="449"/> <source>Sprite Colors 1</source> <translation>Colores de sprite 1</translation> </message> <message> - <location filename="../OverrideView.ui" line="441"/> + <location filename="../OverrideView.ui" line="456"/> <source>Sprite Colors 2</source> <translation>Colores de sprite 2</translation> </message>

@@ -1240,27 +1409,37 @@ <source>Game Boy Printer</source>

<translation>Game Boy Printer</translation> </message> <message> - <location filename="../PrinterView.ui" line="96"/> + <location filename="../PrinterView.ui" line="130"/> <source>Hurry up!</source> <translation>¡Apúrate!</translation> </message> <message> - <location filename="../PrinterView.ui" line="103"/> + <location filename="../PrinterView.ui" line="137"/> <source>Tear off</source> <translation>Arrancar papel</translation> </message> + <message> + <location filename="../PrinterView.ui" line="167"/> + <source>×</source> + <translation></translation> + </message> + <message> + <location filename="../PrinterView.ui" line="180"/> + <source>Magnification</source> + <translation>Ampliación</translation> + </message> </context> <context> <name>QGBA::AssetTile</name> <message> - <location filename="../AssetTile.cpp" line="112"/> + <location filename="../AssetTile.cpp" line="104"/> <source>%0%1%2</source> <translation>%0%1%2</translation> </message> <message> - <location filename="../AssetTile.cpp" line="148"/> - <location filename="../AssetTile.cpp" line="149"/> - <location filename="../AssetTile.cpp" line="150"/> + <location filename="../AssetTile.cpp" line="143"/> + <location filename="../AssetTile.cpp" line="144"/> + <location filename="../AssetTile.cpp" line="145"/> <source>0x%0 (%1)</source> <translation>0x%0 (%1)</translation> </message>

@@ -1374,22 +1553,22 @@ </context>

<context> <name>QGBA::CoreController</name> <message> - <location filename="../CoreController.cpp" line="568"/> + <location filename="../CoreController.cpp" line="593"/> <source>Failed to open save file: %1</source> <translation>Error al abrir el archivo de guardado: %1</translation> </message> <message> - <location filename="../CoreController.cpp" line="597"/> + <location filename="../CoreController.cpp" line="622"/> <source>Failed to open game file: %1</source> <translation>Error al abrir el archivo del juego: %1</translation> </message> <message> - <location filename="../CoreController.cpp" line="662"/> + <location filename="../CoreController.cpp" line="690"/> <source>Failed to open snapshot file for reading: %1</source> <translation>Error al leer del archivo de captura: %1</translation> </message> <message> - <location filename="../CoreController.cpp" line="678"/> + <location filename="../CoreController.cpp" line="706"/> <source>Failed to open snapshot file for writing: %1</source> <translation>Error al escribir al archivo de captura: %1</translation> </message>

@@ -1403,6 +1582,49 @@ <translation>Error al abrir el archivo del juego: %1</translation>

</message> </context> <context> + <name>QGBA::FrameView</name> + <message> + <location filename="../FrameView.cpp" line="430"/> + <source>Export frame</source> + <translation>Exportar cuadro</translation> + </message> + <message> + <location filename="../FrameView.cpp" line="431"/> + <source>Portable Network Graphics (*.png)</source> + <translation>Gráficos de red portátiles (*.png)</translation> + </message> + <message> + <location filename="../FrameView.cpp" line="449"/> + <source>None</source> + <translation>Ninguno</translation> + </message> + <message> + <location filename="../FrameView.cpp" line="451"/> + <source>Background</source> + <translation>Fondo (BG)</translation> + </message> + <message> + <location filename="../FrameView.cpp" line="454"/> + <source>Window</source> + <translation>Ventana (WIN)</translation> + </message> + <message> + <location filename="../FrameView.cpp" line="457"/> + <source>Sprite</source> + <translation>Sprite</translation> + </message> + <message> + <location filename="../FrameView.cpp" line="460"/> + <source>Backdrop</source> + <translation>Telón de fondo (backdrop)</translation> + </message> + <message> + <location filename="../FrameView.cpp" line="466"/> + <source>%1 %2</source> + <translation>%1× {1 %2?}</translation> + </message> +</context> +<context> <name>QGBA::GBAApp</name> <message> <location filename="../GBAApp.cpp" line="69"/>

@@ -1479,17 +1701,17 @@ </context>

<context> <name>QGBA::GIFView</name> <message> - <location filename="../GIFView.cpp" line="53"/> + <location filename="../GIFView.cpp" line="49"/> <source>Failed to open output GIF file: %1</source> <translation>Error al abrir el archivo GIF de salida: %1</translation> </message> <message> - <location filename="../GIFView.cpp" line="71"/> + <location filename="../GIFView.cpp" line="67"/> <source>Select output file</source> <translation>Seleccionar archivo de salida</translation> </message> <message> - <location filename="../GIFView.cpp" line="71"/> + <location filename="../GIFView.cpp" line="67"/> <source>Graphics Interchange Format (*.gif)</source> <translation>Graphics Interchange Format (*.gif)</translation> </message>

@@ -2897,27 +3119,27 @@ </context>

<context> <name>QGBA::LoadSaveState</name> <message> - <location filename="../LoadSaveState.cpp" line="73"/> + <location filename="../LoadSaveState.cpp" line="74"/> <source>Load State</source> <translation>Cargar estado</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="73"/> + <location filename="../LoadSaveState.cpp" line="74"/> <source>Save State</source> <translation>Guardar estado</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="182"/> + <location filename="../LoadSaveState.cpp" line="183"/> <source>Empty</source> <translation>Vacío</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="191"/> + <location filename="../LoadSaveState.cpp" line="192"/> <source>Corrupted</source> <translation>Dañado</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="220"/> + <location filename="../LoadSaveState.cpp" line="221"/> <source>Slot %1</source> <translation>Espacio %1</translation> </message>

@@ -3017,49 +3239,101 @@ </context>

<context> <name>QGBA::MapView</name> <message> - <location filename="../MapView.cpp" line="87"/> + <location filename="../MapView.cpp" line="48"/> + <source>Priority</source> + <translation>Prioridad</translation> + </message> + <message> + <location filename="../MapView.cpp" line="49"/> + <location filename="../MapView.cpp" line="61"/> + <source>Map base</source> + <translation>Base mapas</translation> + </message> + <message> + <location filename="../MapView.cpp" line="50"/> + <location filename="../MapView.cpp" line="62"/> + <source>Tile base</source> + <translation>Base tiles</translation> + </message> + <message> + <location filename="../MapView.cpp" line="51"/> + <source>Size</source> + <translation>Tamaño</translation> + </message> + <message> + <location filename="../MapView.cpp" line="52"/> + <location filename="../MapView.cpp" line="63"/> + <source>Offset</source> + <translation>Posición</translation> + </message> + <message> + <location filename="../MapView.cpp" line="53"/> + <source>Xform</source> + <translation>Xform</translation> + </message> + <message> + <location filename="../MapView.cpp" line="107"/> <source>Map Addr.</source> - <translation>Dir de mapa</translation> + <translation>Dir. de mapa</translation> </message> <message> - <location filename="../MapView.cpp" line="88"/> + <location filename="../MapView.cpp" line="108"/> <source>Mirror</source> <translation>Espejar</translation> </message> <message> - <location filename="../MapView.cpp" line="116"/> + <location filename="../MapView.cpp" line="136"/> <source>None</source> <translation>Ninguno</translation> </message> <message> - <location filename="../MapView.cpp" line="118"/> + <location filename="../MapView.cpp" line="138"/> <source>Both</source> <translation>Ambos</translation> </message> <message> - <location filename="../MapView.cpp" line="120"/> + <location filename="../MapView.cpp" line="140"/> <source>Horizontal</source> <translation>Horizontal</translation> </message> <message> - <location filename="../MapView.cpp" line="122"/> + <location filename="../MapView.cpp" line="142"/> <source>Vertical</source> <translation>Vertical</translation> </message> <message> - <location filename="../MapView.cpp" line="194"/> + <location filename="../MapView.cpp" line="168"/> + <location filename="../MapView.cpp" line="169"/> + <location filename="../MapView.cpp" line="213"/> + <source>N/A</source> + <translation>n/d</translation> + </message> + <message> + <location filename="../MapView.cpp" line="256"/> <source>Export map</source> <translation>Exportar mapa</translation> </message> <message> - <location filename="../MapView.cpp" line="195"/> + <location filename="../MapView.cpp" line="257"/> <source>Portable Network Graphics (*.png)</source> <translation>Gráficos de red portátiles (*.png)</translation> </message> <message> - <location filename="../MapView.cpp" line="198"/> <source>Failed to open output PNG file: %1</source> - <translation>Error al abrir el archivo PNG de salida: %1</translation> + <translation type="vanished">Error al abrir el archivo PNG de salida: %1</translation> + </message> +</context> +<context> + <name>QGBA::MemoryDump</name> + <message> + <location filename="../MemoryDump.cpp" line="24"/> + <source>Save memory region</source> + <translation>Guardar región de memoria</translation> + </message> + <message> + <location filename="../MemoryDump.cpp" line="30"/> + <source>Failed to open output file: %1</source> + <translation>Error al abrir el archivo de salida: %1</translation> </message> </context> <context>

@@ -3128,22 +3402,22 @@ </context>

<context> <name>QGBA::MemorySearch</name> <message> - <location filename="../MemorySearch.cpp" line="200"/> + <location filename="../MemorySearch.cpp" line="221"/> <source> (%0/%1×)</source> <translation> (%0/%1×)</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="202"/> + <location filename="../MemorySearch.cpp" line="223"/> <source> (⅟%0×)</source> <translation> (⅟%0×)</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="205"/> + <location filename="../MemorySearch.cpp" line="226"/> <source> (%0×)</source> <translation> (%0×)</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="209"/> + <location filename="../MemorySearch.cpp" line="230"/> <source>%1 byte%2</source> <translation>%1 byte%2</translation> </message>

@@ -3163,56 +3437,55 @@ </context>

<context> <name>QGBA::ObjView</name> <message> - <location filename="../ObjView.cpp" line="148"/> - <location filename="../ObjView.cpp" line="242"/> + <location filename="../ObjView.cpp" line="150"/> + <location filename="../ObjView.cpp" line="224"/> <source>0x%0</source> <translation>0x%0</translation> </message> <message> - <location filename="../ObjView.cpp" line="159"/> + <location filename="../ObjView.cpp" line="161"/> <source>Off</source> <translation>No</translation> </message> <message> - <location filename="../ObjView.cpp" line="164"/> + <location filename="../ObjView.cpp" line="166"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../ObjView.cpp" line="167"/> + <location filename="../ObjView.cpp" line="169"/> <source>Trans</source> <translation>Trans</translation> </message> <message> - <location filename="../ObjView.cpp" line="170"/> + <location filename="../ObjView.cpp" line="172"/> <source>OBJWIN</source> <translation>OBJWIN</translation> </message> <message> - <location filename="../ObjView.cpp" line="173"/> + <location filename="../ObjView.cpp" line="175"/> <source>Invalid</source> <translation>Inválido</translation> </message> <message> - <location filename="../ObjView.cpp" line="249"/> - <location filename="../ObjView.cpp" line="250"/> + <location filename="../ObjView.cpp" line="231"/> + <location filename="../ObjView.cpp" line="232"/> <source>N/A</source> <translation>n/d</translation> </message> <message> - <location filename="../ObjView.cpp" line="256"/> + <location filename="../ObjView.cpp" line="257"/> <source>Export sprite</source> <translation>Exportar sprite</translation> </message> <message> - <location filename="../ObjView.cpp" line="257"/> + <location filename="../ObjView.cpp" line="258"/> <source>Portable Network Graphics (*.png)</source> <translation>Portable Network Graphics (*.png)</translation> </message> <message> - <location filename="../ObjView.cpp" line="260"/> <source>Failed to open output PNG file: %1</source> - <translation>Error al abrir el archivo PNG de salida: %1</translation> + <translation type="vanished">Error al abrir el archivo PNG de salida: %1</translation> </message> </context> <context>

@@ -3258,12 +3531,12 @@ </context>

<context> <name>QGBA::PrinterView</name> <message> - <location filename="../PrinterView.cpp" line="35"/> + <location filename="../PrinterView.cpp" line="52"/> <source>Save Printout</source> <translation>Guardar impresión</translation> </message> <message> - <location filename="../PrinterView.cpp" line="35"/> + <location filename="../PrinterView.cpp" line="52"/> <source>Portable Network Graphics (*.png)</source> <translation>Gráficos de red portátiles (*.png)</translation> </message>

@@ -3294,61 +3567,66 @@ </context>

<context> <name>QGBA::SettingsView</name> <message> - <location filename="../SettingsView.cpp" line="144"/> - <location filename="../SettingsView.cpp" line="187"/> + <location filename="../SettingsView.cpp" line="148"/> + <location filename="../SettingsView.cpp" line="191"/> <source>Qt Multimedia</source> <translation>Qt Multimedia</translation> </message> <message> - <location filename="../SettingsView.cpp" line="151"/> + <location filename="../SettingsView.cpp" line="155"/> <source>SDL</source> <translation>SDL</translation> </message> <message> - <location filename="../SettingsView.cpp" line="159"/> + <location filename="../SettingsView.cpp" line="163"/> <source>Software (Qt)</source> <translation>Software (Qt)</translation> </message> <message> - <location filename="../SettingsView.cpp" line="165"/> + <location filename="../SettingsView.cpp" line="169"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../SettingsView.cpp" line="172"/> + <location filename="../SettingsView.cpp" line="176"/> <source>OpenGL (force version 1.x)</source> <translation>OpenGL (forzar versión 1.x)</translation> </message> <message> - <location filename="../SettingsView.cpp" line="180"/> + <location filename="../SettingsView.cpp" line="184"/> <source>None (Still Image)</source> <translation>Nada (imagen estática)</translation> </message> <message> - <location filename="../SettingsView.cpp" line="271"/> + <location filename="../SettingsView.cpp" line="275"/> <source>Keyboard</source> <translation>Teclado</translation> </message> <message> - <location filename="../SettingsView.cpp" line="280"/> + <location filename="../SettingsView.cpp" line="284"/> <source>Controllers</source> <translation>Controladores</translation> </message> <message> - <location filename="../SettingsView.cpp" line="324"/> + <location filename="../SettingsView.cpp" line="328"/> <source>Shortcuts</source> <translation>Atajos de teclado</translation> </message> <message> - <location filename="../SettingsView.cpp" line="336"/> - <location filename="../SettingsView.cpp" line="346"/> + <location filename="../SettingsView.cpp" line="340"/> + <location filename="../SettingsView.cpp" line="350"/> <source>Shaders</source> <translation>Shaders</translation> </message> <message> - <location filename="../SettingsView.cpp" line="353"/> + <location filename="../SettingsView.cpp" line="357"/> <source>Select BIOS</source> <translation>Seleccionar BIOS</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="658"/> + <source>(%1×%2)</source> + <translation></translation> </message> </context> <context>

@@ -3415,6 +3693,25 @@ <message>

<location filename="../ShortcutModel.cpp" line="71"/> <source>Gamepad</source> <translation>Mando</translation> + </message> +</context> +<context> + <name>QGBA::TileView</name> + <message> + <location filename="../TileView.cpp" line="178"/> + <source>Export tiles</source> + <translation>Exportar tiles</translation> + </message> + <message> + <location filename="../TileView.cpp" line="179"/> + <location filename="../TileView.cpp" line="191"/> + <source>Portable Network Graphics (*.png)</source> + <translation>Gráficos de red portátiles (*.png)</translation> + </message> + <message> + <location filename="../TileView.cpp" line="190"/> + <source>Export tile</source> + <translation>Exportar tile</translation> </message> </context> <context>

@@ -3534,12 +3831,12 @@ <source>Video logs (*.mvl)</source>

<translation>Video-registros (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="831"/> + <location filename="../Window.cpp" line="854"/> <source>Crash</source> <translation>Error fatal</translation> </message> <message> - <location filename="../Window.cpp" line="832"/> + <location filename="../Window.cpp" line="855"/> <source>The game has crashed with the following error: %1</source>

@@ -3548,146 +3845,156 @@

%1</translation> </message> <message> - <location filename="../Window.cpp" line="839"/> + <location filename="../Window.cpp" line="862"/> <source>Couldn&apos;t Load</source> <translation>No se pudo cargar</translation> </message> <message> - <location filename="../Window.cpp" line="840"/> + <location filename="../Window.cpp" line="863"/> <source>Could not load game. Are you sure it&apos;s in the correct format?</source> <translation>No se pudo cargar el juego. ¿Estás seguro de que está en el formato correcto?</translation> </message> <message> - <location filename="../Window.cpp" line="853"/> + <location filename="../Window.cpp" line="876"/> <source>Unimplemented BIOS call</source> <translation>Llamada a BIOS no implementada</translation> </message> <message> - <location filename="../Window.cpp" line="854"/> + <location filename="../Window.cpp" line="877"/> <source>This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience.</source> <translation>Este juego utiliza una llamada al BIOS que no se ha implementado. Utiliza el BIOS oficial para obtener la mejor experiencia.</translation> </message> <message> - <location filename="../Window.cpp" line="937"/> + <location filename="../Window.cpp" line="964"/> <source>Really make portable?</source> <translation>¿Hacer &quot;portable&quot;?</translation> </message> <message> - <location filename="../Window.cpp" line="938"/> + <location filename="../Window.cpp" line="965"/> <source>This will make the emulator load its configuration from the same directory as the executable. Do you want to continue?</source> <translation>Esto hará que el emulador cargue su configuración desde el mismo directorio que el ejecutable. ¿Quieres continuar?</translation> </message> <message> - <location filename="../Window.cpp" line="946"/> + <location filename="../Window.cpp" line="977"/> <source>Restart needed</source> <translation>Reinicio necesario</translation> </message> <message> - <location filename="../Window.cpp" line="947"/> + <location filename="../Window.cpp" line="978"/> <source>Some changes will not take effect until the emulator is restarted.</source> <translation>Algunos cambios no surtirán efecto hasta que se reinicie el emulador.</translation> </message> <message> - <location filename="../Window.cpp" line="995"/> + <location filename="../Window.cpp" line="1026"/> <source> - Player %1 of %2</source> <translation> - Jugador %1 de %2</translation> </message> <message> - <location filename="../Window.cpp" line="1006"/> + <location filename="../Window.cpp" line="1037"/> <source>%1 - %2</source> <translation>%1 - %2</translation> </message> <message> - <location filename="../Window.cpp" line="1008"/> + <location filename="../Window.cpp" line="1039"/> <source>%1 - %2 - %3</source> <translation>%1 - %2 - %3</translation> </message> <message> - <location filename="../Window.cpp" line="1010"/> + <location filename="../Window.cpp" line="1041"/> <source>%1 - %2 (%3 fps) - %4</source> <translation>%1 - %2 (%3 fps) - %4</translation> </message> <message> - <location filename="../Window.cpp" line="1048"/> + <location filename="../Window.cpp" line="1082"/> <source>&amp;File</source> <translation>&amp;Archivo</translation> </message> <message> - <location filename="../Window.cpp" line="1050"/> + <location filename="../Window.cpp" line="1084"/> <source>Load &amp;ROM...</source> <translation>Cargar &amp;ROM...</translation> </message> <message> - <location filename="../Window.cpp" line="1053"/> + <location filename="../Window.cpp" line="1087"/> <source>Load ROM in archive...</source> <translation>Cargar ROM desde contenedor...</translation> </message> <message> - <location filename="../Window.cpp" line="1054"/> + <location filename="../Window.cpp" line="1088"/> <source>Add folder to library...</source> <translation>Agregar carpeta a la biblioteca...</translation> </message> <message> - <location filename="../Window.cpp" line="1057"/> + <location filename="../Window.cpp" line="1091"/> <source>Load alternate save...</source> <translation>Cargar guardado alternativo...</translation> </message> <message> - <location filename="../Window.cpp" line="1060"/> + <location filename="../Window.cpp" line="1094"/> <source>Load temporary save...</source> <translation>Cargar guardado temporal...</translation> </message> <message> - <location filename="../Window.cpp" line="1064"/> + <location filename="../Window.cpp" line="1098"/> <source>Load &amp;patch...</source> <translation>Cargar &amp;parche...</translation> </message> <message> - <location filename="../Window.cpp" line="1067"/> + <location filename="../Window.cpp" line="1101"/> <source>Boot BIOS</source> <translation>Arrancar BIOS</translation> </message> <message> - <location filename="../Window.cpp" line="1072"/> + <location filename="../Window.cpp" line="1106"/> <source>Replace ROM...</source> <translation>Reemplazar ROM...</translation> </message> <message> - <location filename="../Window.cpp" line="1074"/> + <location filename="../Window.cpp" line="1108"/> <source>ROM &amp;info...</source> <translation>&amp;Información de la ROM...</translation> </message> <message> - <location filename="../Window.cpp" line="1076"/> + <location filename="../Window.cpp" line="1110"/> <source>Recent</source> <translation>Recientes</translation> </message> <message> - <location filename="../Window.cpp" line="1079"/> + <location filename="../Window.cpp" line="1113"/> <source>Make portable</source> <translation>Hacer &quot;portable&quot;</translation> </message> <message> - <location filename="../Window.cpp" line="1082"/> + <location filename="../Window.cpp" line="1116"/> <source>&amp;Load state</source> <translation>Ca&amp;rgar estado</translation> </message> <message> - <location filename="../Window.cpp" line="1164"/> + <location filename="../Window.cpp" line="1198"/> <source>About...</source> <translation>Acerca de...</translation> </message> <message> + <location filename="../Window.cpp" line="1467"/> + <source>Game Pak sensors...</source> + <translation>Sensores del cartucho...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1723"/> + <source>Clear</source> + <translation>Limpiar</translation> + </message> + <message> <source>F10</source> <translation type="vanished">F10</translation> </message> <message> - <location filename="../Window.cpp" line="1087"/> + <location filename="../Window.cpp" line="1121"/> <source>Load state file...</source> <translation>Cargar archivo de estado...</translation> </message> <message> - <location filename="../Window.cpp" line="1092"/> + <location filename="../Window.cpp" line="1126"/> <source>&amp;Save state</source> <translation>Guardar e&amp;stado</translation> </message>

@@ -3696,32 +4003,32 @@ <source>Shift+F10</source>

<translation type="vanished">Shift+F10</translation> </message> <message> - <location filename="../Window.cpp" line="1097"/> + <location filename="../Window.cpp" line="1131"/> <source>Save state file...</source> <translation>Guardar archivo de estado...</translation> </message> <message> - <location filename="../Window.cpp" line="1102"/> + <location filename="../Window.cpp" line="1136"/> <source>Quick load</source> <translation>Cargado rápido</translation> </message> <message> - <location filename="../Window.cpp" line="1103"/> + <location filename="../Window.cpp" line="1137"/> <source>Quick save</source> <translation>Guardado rápido</translation> </message> <message> - <location filename="../Window.cpp" line="1105"/> + <location filename="../Window.cpp" line="1139"/> <source>Load recent</source> <translation>Cargar reciente</translation> </message> <message> - <location filename="../Window.cpp" line="1110"/> + <location filename="../Window.cpp" line="1144"/> <source>Save recent</source> <translation>Guardar reciente</translation> </message> <message> - <location filename="../Window.cpp" line="1118"/> + <location filename="../Window.cpp" line="1152"/> <source>Undo load state</source> <translation>Deshacer cargar estado</translation> </message>

@@ -3730,7 +4037,7 @@ <source>F11</source>

<translation type="vanished">F11</translation> </message> <message> - <location filename="../Window.cpp" line="1123"/> + <location filename="../Window.cpp" line="1157"/> <source>Undo save state</source> <translation>Deshacer guardar estado</translation> </message>

@@ -3739,8 +4046,8 @@ <source>Shift+F11</source>

<translation type="vanished">Shift+F11</translation> </message> <message> - <location filename="../Window.cpp" line="1132"/> - <location filename="../Window.cpp" line="1137"/> + <location filename="../Window.cpp" line="1166"/> + <location filename="../Window.cpp" line="1171"/> <source>State &amp;%1</source> <translation>Estado &amp;%1</translation> </message>

@@ -3753,22 +4060,22 @@ <source>Shift+F%1</source>

<translation type="vanished">Shift+F%1</translation> </message> <message> - <location filename="../Window.cpp" line="1144"/> + <location filename="../Window.cpp" line="1178"/> <source>Load camera image...</source> <translation>Cargar imagen para la cámara...</translation> </message> <message> - <location filename="../Window.cpp" line="1148"/> + <location filename="../Window.cpp" line="1182"/> <source>Import GameShark Save</source> <translation>Importar guardado de GameShark</translation> </message> <message> - <location filename="../Window.cpp" line="1151"/> + <location filename="../Window.cpp" line="1185"/> <source>Export GameShark Save</source> <translation>Exportar guardado de GameShark</translation> </message> <message> - <location filename="../Window.cpp" line="1156"/> + <location filename="../Window.cpp" line="1190"/> <source>New multiplayer window</source> <translation>Nueva ventana multijugador</translation> </message>

@@ -3777,17 +4084,17 @@ <source>About</source>

<translation type="vanished">Acerca de</translation> </message> <message> - <location filename="../Window.cpp" line="1167"/> + <location filename="../Window.cpp" line="1201"/> <source>E&amp;xit</source> <translation>Salir (&amp;X)</translation> </message> <message> - <location filename="../Window.cpp" line="1170"/> + <location filename="../Window.cpp" line="1204"/> <source>&amp;Emulation</source> <translation>&amp;Emulación</translation> </message> <message> - <location filename="../Window.cpp" line="1171"/> + <location filename="../Window.cpp" line="1205"/> <source>&amp;Reset</source> <translation>&amp;Reinicializar</translation> </message>

@@ -3796,17 +4103,17 @@ <source>Ctrl+R</source>

<translation type="vanished">Ctrl+R</translation> </message> <message> - <location filename="../Window.cpp" line="1175"/> + <location filename="../Window.cpp" line="1209"/> <source>Sh&amp;utdown</source> <translation>Apagar (&amp;U)</translation> </message> <message> - <location filename="../Window.cpp" line="1180"/> + <location filename="../Window.cpp" line="1213"/> <source>Yank game pak</source> <translation>Tirar del cartucho</translation> </message> <message> - <location filename="../Window.cpp" line="1187"/> + <location filename="../Window.cpp" line="1219"/> <source>&amp;Pause</source> <translation>&amp;Pausar</translation> </message>

@@ -3815,7 +4122,7 @@ <source>Ctrl+P</source>

<translation type="vanished">Ctrl+P</translation> </message> <message> - <location filename="../Window.cpp" line="1196"/> + <location filename="../Window.cpp" line="1228"/> <source>&amp;Next frame</source> <translation>Cuadro siguie&amp;nte</translation> </message>

@@ -3824,12 +4131,12 @@ <source>Ctrl+N</source>

<translation type="vanished">Ctrl+N</translation> </message> <message> - <location filename="../Window.cpp" line="1202"/> + <location filename="../Window.cpp" line="1234"/> <source>Fast forward (held)</source> <translation>Avance rápido (mantener)</translation> </message> <message> - <location filename="../Window.cpp" line="1208"/> + <location filename="../Window.cpp" line="1240"/> <source>&amp;Fast forward</source> <translation>&amp;Avance rápido</translation> </message>

@@ -3838,27 +4145,27 @@ <source>Shift+Tab</source>

<translation type="vanished">Shift+Tab</translation> </message> <message> - <location filename="../Window.cpp" line="1212"/> + <location filename="../Window.cpp" line="1244"/> <source>Fast forward speed</source> <translation>Velocidad de avance rápido</translation> </message> <message> - <location filename="../Window.cpp" line="1217"/> + <location filename="../Window.cpp" line="1249"/> <source>Unbounded</source> <translation>Sin límite</translation> </message> <message> - <location filename="../Window.cpp" line="1221"/> + <location filename="../Window.cpp" line="1253"/> <source>%0x</source> <translation>%0x</translation> </message> <message> - <location filename="../Window.cpp" line="1225"/> + <location filename="../Window.cpp" line="1257"/> <source>Rewind (held)</source> <translation>Rebobinar (mantener)</translation> </message> <message> - <location filename="../Window.cpp" line="1232"/> + <location filename="../Window.cpp" line="1264"/> <source>Re&amp;wind</source> <translation>Re&amp;bobinar</translation> </message>

@@ -3867,7 +4174,7 @@ <source>~</source>

<translation type="vanished">~</translation> </message> <message> - <location filename="../Window.cpp" line="1237"/> + <location filename="../Window.cpp" line="1269"/> <source>Step backwards</source> <translation>Paso hacia atrás</translation> </message>

@@ -3876,52 +4183,52 @@ <source>Ctrl+B</source>

<translation type="vanished">Ctrl+B</translation> </message> <message> - <location filename="../Window.cpp" line="1243"/> + <location filename="../Window.cpp" line="1275"/> <source>Sync to &amp;video</source> <translation>Sincronizar a &amp;video</translation> </message> <message> - <location filename="../Window.cpp" line="1250"/> + <location filename="../Window.cpp" line="1282"/> <source>Sync to &amp;audio</source> <translation>Sincronizar a au&amp;dio</translation> </message> <message> - <location filename="../Window.cpp" line="1258"/> + <location filename="../Window.cpp" line="1290"/> <source>Solar sensor</source> <translation>Sensor solar</translation> </message> <message> - <location filename="../Window.cpp" line="1259"/> + <location filename="../Window.cpp" line="1291"/> <source>Increase solar level</source> <translation>Subir nivel</translation> </message> <message> - <location filename="../Window.cpp" line="1260"/> + <location filename="../Window.cpp" line="1292"/> <source>Decrease solar level</source> <translation>Bajar nivel</translation> </message> <message> - <location filename="../Window.cpp" line="1261"/> + <location filename="../Window.cpp" line="1293"/> <source>Brightest solar level</source> <translation>Más claro</translation> </message> <message> - <location filename="../Window.cpp" line="1264"/> + <location filename="../Window.cpp" line="1296"/> <source>Darkest solar level</source> <translation>Más oscuro</translation> </message> <message> - <location filename="../Window.cpp" line="1270"/> + <location filename="../Window.cpp" line="1302"/> <source>Brightness %1</source> <translation>Brillo %1</translation> </message> <message> - <location filename="../Window.cpp" line="1289"/> + <location filename="../Window.cpp" line="1321"/> <source>Audio/&amp;Video</source> <translation>Audio/&amp;video</translation> </message> <message> - <location filename="../Window.cpp" line="1290"/> + <location filename="../Window.cpp" line="1322"/> <source>Frame size</source> <translation>Tamaño del cuadro</translation> </message>

@@ -3930,42 +4237,42 @@ <source>%1x</source>

<translation type="vanished">%1x</translation> </message> <message> - <location filename="../Window.cpp" line="1317"/> + <location filename="../Window.cpp" line="1349"/> <source>Toggle fullscreen</source> <translation>Pantalla completa</translation> </message> <message> - <location filename="../Window.cpp" line="1320"/> + <location filename="../Window.cpp" line="1352"/> <source>Lock aspect ratio</source> <translation>Bloquear proporción de aspecto</translation> </message> <message> - <location filename="../Window.cpp" line="1332"/> + <location filename="../Window.cpp" line="1364"/> <source>Force integer scaling</source> <translation>Forzar escala a enteros</translation> </message> <message> - <location filename="../Window.cpp" line="1344"/> + <location filename="../Window.cpp" line="1385"/> <source>Bilinear filtering</source> <translation>Filtro bilineal</translation> </message> <message> - <location filename="../Window.cpp" line="1352"/> + <location filename="../Window.cpp" line="1393"/> <source>Frame&amp;skip</source> <translation>&amp;Salto de cuadros</translation> </message> <message> - <location filename="../Window.cpp" line="1365"/> + <location filename="../Window.cpp" line="1406"/> <source>Mute</source> <translation>Silenciar</translation> </message> <message> - <location filename="../Window.cpp" line="1371"/> + <location filename="../Window.cpp" line="1413"/> <source>FPS target</source> <translation>Objetivo de FPS</translation> </message> <message> - <location filename="../Window.cpp" line="1379"/> + <location filename="../Window.cpp" line="1421"/> <source>Native (59.7275)</source> <translation>Nativo (59,7275)</translation> </message>

@@ -4002,12 +4309,12 @@ <source>240</source>

<translation type="vanished">240</translation> </message> <message> - <location filename="../Window.cpp" line="1394"/> + <location filename="../Window.cpp" line="1436"/> <source>Take &amp;screenshot</source> <translation>Tomar pan&amp;tallazo</translation> </message> <message> - <location filename="../Window.cpp" line="1396"/> + <location filename="../Window.cpp" line="1438"/> <source>F12</source> <translation>F12</translation> </message>

@@ -4016,7 +4323,7 @@ <source>Record output...</source>

<translation type="vanished">Grabar salida...</translation> </message> <message> - <location filename="../Window.cpp" line="1404"/> + <location filename="../Window.cpp" line="1443"/> <source>Record GIF...</source> <translation>Grabar GIF...</translation> </message>

@@ -4029,187 +4336,196 @@ <source>Stop video log</source>

<translation type="vanished">Detener video-registro</translation> </message> <message> - <location filename="../Window.cpp" line="1276"/> + <location filename="../Window.cpp" line="1308"/> <source>Game Boy Printer...</source> <translation>Game Boy Printer...</translation> </message> <message> - <location filename="../Window.cpp" line="1285"/> + <location filename="../Window.cpp" line="1317"/> <source>BattleChip Gate...</source> <translation>BattleChip Gate...</translation> </message> <message> - <location filename="../Window.cpp" line="1292"/> + <location filename="../Window.cpp" line="1324"/> <source>%1×</source> <translation>%1×</translation> </message> <message> - <location filename="../Window.cpp" line="1400"/> + <location filename="../Window.cpp" line="1376"/> + <source>Interframe blending</source> + <translation>Mezcla entre cuadros</translation> + </message> + <message> + <location filename="../Window.cpp" line="1442"/> <source>Record A/V...</source> <translation>Grabar A/V...</translation> </message> <message> - <location filename="../Window.cpp" line="1408"/> + <location filename="../Window.cpp" line="1447"/> <source>Video layers</source> <translation>Capas de video</translation> </message> <message> - <location filename="../Window.cpp" line="1409"/> + <location filename="../Window.cpp" line="1448"/> <source>Audio channels</source> <translation>Canales de audio</translation> </message> <message> - <location filename="../Window.cpp" line="1411"/> + <location filename="../Window.cpp" line="1450"/> <source>Adjust layer placement...</source> <translation>Ajustar ubicación de capas...</translation> </message> <message> - <location filename="../Window.cpp" line="1413"/> + <location filename="../Window.cpp" line="1452"/> <source>&amp;Tools</source> <translation>Herramien&amp;tas</translation> </message> <message> - <location filename="../Window.cpp" line="1414"/> + <location filename="../Window.cpp" line="1453"/> <source>View &amp;logs...</source> <translation>Ver re&amp;gistros...</translation> </message> <message> - <location filename="../Window.cpp" line="1416"/> + <location filename="../Window.cpp" line="1455"/> <source>Game &amp;overrides...</source> <translation>Ajustes específic&amp;os por juego...</translation> </message> <message> - <location filename="../Window.cpp" line="1428"/> <source>Game &amp;Pak sensors...</source> - <translation>Sensores del Game &amp;Pak...</translation> + <translation type="vanished">Sensores del Game &amp;Pak...</translation> </message> <message> - <location filename="../Window.cpp" line="1439"/> + <location filename="../Window.cpp" line="1478"/> <source>&amp;Cheats...</source> <translation>Tru&amp;cos...</translation> </message> <message> - <location filename="../Window.cpp" line="1442"/> + <location filename="../Window.cpp" line="1481"/> <source>Settings...</source> <translation>Ajustes...</translation> </message> <message> - <location filename="../Window.cpp" line="1446"/> + <location filename="../Window.cpp" line="1485"/> <source>Open debugger console...</source> <translation>Abrir consola de depuración...</translation> </message> <message> - <location filename="../Window.cpp" line="1448"/> + <location filename="../Window.cpp" line="1487"/> <source>Start &amp;GDB server...</source> <translation>Iniciar servidor &amp;GDB...</translation> </message> <message> - <location filename="../Window.cpp" line="1454"/> + <location filename="../Window.cpp" line="1493"/> <source>View &amp;palette...</source> <translation>Ver &amp;paleta...</translation> </message> <message> - <location filename="../Window.cpp" line="1455"/> + <location filename="../Window.cpp" line="1494"/> <source>View &amp;sprites...</source> <translation>Ver &amp;sprites...</translation> </message> <message> - <location filename="../Window.cpp" line="1456"/> + <location filename="../Window.cpp" line="1495"/> <source>View &amp;tiles...</source> <translation>Ver &amp;tiles...</translation> </message> <message> - <location filename="../Window.cpp" line="1457"/> + <location filename="../Window.cpp" line="1496"/> <source>View &amp;map...</source> <translation>Ver &amp;mapa...</translation> </message> <message> - <location filename="../Window.cpp" line="1458"/> + <location filename="../Window.cpp" line="1499"/> + <source>&amp;Frame inspector...</source> + <translation>Inspec&amp;tor de cuadros...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1517"/> <source>View memory...</source> <translation>Ver memoria...</translation> </message> <message> - <location filename="../Window.cpp" line="1459"/> + <location filename="../Window.cpp" line="1518"/> <source>Search memory...</source> <translation>Buscar memoria...</translation> </message> <message> - <location filename="../Window.cpp" line="1462"/> + <location filename="../Window.cpp" line="1521"/> <source>View &amp;I/O registers...</source> <translation>Ver registros &amp;I/O...</translation> </message> <message> - <location filename="../Window.cpp" line="1467"/> + <location filename="../Window.cpp" line="1526"/> <source>Record debug video log...</source> <translation>Grabar registro de depuración de video...</translation> </message> <message> - <location filename="../Window.cpp" line="1468"/> + <location filename="../Window.cpp" line="1527"/> <source>Stop debug video log</source> <translation>Detener registro de depuración de video</translation> </message> <message> - <location filename="../Window.cpp" line="1549"/> + <location filename="../Window.cpp" line="1615"/> <source>Exit fullscreen</source> <translation>Salir de pantalla completa</translation> </message> <message> - <location filename="../Window.cpp" line="1551"/> + <location filename="../Window.cpp" line="1617"/> <source>GameShark Button (held)</source> <translation>Botón GameShark (mantener)</translation> </message> <message> - <location filename="../Window.cpp" line="1557"/> + <location filename="../Window.cpp" line="1623"/> <source>Autofire</source> <translation>Disparo automático</translation> </message> <message> - <location filename="../Window.cpp" line="1558"/> + <location filename="../Window.cpp" line="1624"/> <source>Autofire A</source> <translation>Disparo automático A</translation> </message> <message> - <location filename="../Window.cpp" line="1563"/> + <location filename="../Window.cpp" line="1629"/> <source>Autofire B</source> <translation>Disparo automático B</translation> </message> <message> - <location filename="../Window.cpp" line="1568"/> + <location filename="../Window.cpp" line="1634"/> <source>Autofire L</source> <translation>Disparo automático L</translation> </message> <message> - <location filename="../Window.cpp" line="1573"/> + <location filename="../Window.cpp" line="1639"/> <source>Autofire R</source> <translation>Disparo automático R</translation> </message> <message> - <location filename="../Window.cpp" line="1578"/> + <location filename="../Window.cpp" line="1644"/> <source>Autofire Start</source> <translation>Disparo automático Start</translation> </message> <message> - <location filename="../Window.cpp" line="1583"/> + <location filename="../Window.cpp" line="1649"/> <source>Autofire Select</source> <translation>Disparo automático Select</translation> </message> <message> - <location filename="../Window.cpp" line="1588"/> + <location filename="../Window.cpp" line="1654"/> <source>Autofire Up</source> <translation>Disparo automático Arriba</translation> </message> <message> - <location filename="../Window.cpp" line="1593"/> + <location filename="../Window.cpp" line="1659"/> <source>Autofire Right</source> <translation>Disparo automático Derecha</translation> </message> <message> - <location filename="../Window.cpp" line="1598"/> + <location filename="../Window.cpp" line="1664"/> <source>Autofire Down</source> <translation>Disparo automático Abajo</translation> </message> <message> - <location filename="../Window.cpp" line="1603"/> + <location filename="../Window.cpp" line="1669"/> <source>Autofire Left</source> <translation>Disparo automático Izquierda</translation> </message>

@@ -4527,7 +4843,7 @@ <translation>Saltar cada</translation>

</message> <message> <location filename="../SettingsView.ui" line="362"/> - <location filename="../SettingsView.ui" line="722"/> + <location filename="../SettingsView.ui" line="803"/> <source>frames</source> <translation>cuadros</translation> </message>

@@ -4567,42 +4883,72 @@ <source>Bilinear filtering</source>

<translation>Filtro bilineal</translation> </message> <message> - <location filename="../SettingsView.ui" line="1303"/> + <location filename="../SettingsView.ui" line="458"/> + <source>Native (59.7275)</source> + <translation>Nativo (59,7275)</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="465"/> + <source>Interframe blending</source> + <translation>Mezcla entre cuadros</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="568"/> + <source>Pause when minimized</source> + <translation>Pausar al estar minimizado</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="653"/> + <source>Show OSD messages</source> + <translation>Mostrar mensajes en el OSD</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="713"/> + <source>Fast forward (held) speed:</source> + <translation>Avance rápido (mantenido):</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1003"/> + <source>(240×160)</source> + <translation>(240×160)</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1424"/> <source>Log to file</source> <translation>Guardar a archivo</translation> </message> <message> - <location filename="../SettingsView.ui" line="1310"/> + <location filename="../SettingsView.ui" line="1431"/> <source>Log to console</source> <translation>Guardar a consola</translation> </message> <message> - <location filename="../SettingsView.ui" line="1324"/> + <location filename="../SettingsView.ui" line="1445"/> <source>Select Log File</source> <translation>Seleccionar</translation> </message> <message> - <location filename="../SettingsView.ui" line="1337"/> + <location filename="../SettingsView.ui" line="1458"/> <source>Game Boy model:</source> <translation>Modelo de Game Boy:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1373"/> + <location filename="../SettingsView.ui" line="1494"/> <source>Super Game Boy model:</source> <translation>Modelo de Super Game Boy:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1409"/> + <location filename="../SettingsView.ui" line="1530"/> <source>Game Boy Color model:</source> <translation>Modelo de Game Boy Color:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1744"/> + <location filename="../SettingsView.ui" line="1865"/> <source>Use GBC colors in GB games</source> <translation>Usar colores de GBC en juegos GB</translation> </message> <message> - <location filename="../SettingsView.ui" line="1751"/> + <location filename="../SettingsView.ui" line="1872"/> <source>Camera:</source> <translation>Cámara:</translation> </message>

@@ -4612,156 +4958,158 @@ <source>Force integer scaling</source>

<translation>Forzar escalado a valores enteros</translation> </message> <message> - <location filename="../SettingsView.ui" line="462"/> + <location filename="../SettingsView.ui" line="476"/> <source>Language</source> <translation>Idioma</translation> </message> <message> - <location filename="../SettingsView.ui" line="470"/> + <location filename="../SettingsView.ui" line="484"/> <source>English</source> <translation>English</translation> </message> <message> - <location filename="../SettingsView.ui" line="485"/> + <location filename="../SettingsView.ui" line="499"/> <source>Library:</source> <translation>Biblioteca:</translation> </message> <message> - <location filename="../SettingsView.ui" line="493"/> + <location filename="../SettingsView.ui" line="507"/> <source>List view</source> <translation>Lista</translation> </message> <message> - <location filename="../SettingsView.ui" line="498"/> + <location filename="../SettingsView.ui" line="512"/> <source>Tree view</source> <translation>Árbol</translation> </message> <message> - <location filename="../SettingsView.ui" line="506"/> + <location filename="../SettingsView.ui" line="520"/> <source>Show when no game open</source> <translation>Mostrar cuando no haya un juego abierto</translation> </message> <message> - <location filename="../SettingsView.ui" line="516"/> + <location filename="../SettingsView.ui" line="530"/> <source>Clear cache</source> <translation>Limpiar caché</translation> </message> <message> - <location filename="../SettingsView.ui" line="530"/> + <location filename="../SettingsView.ui" line="544"/> <source>Allow opposing input directions</source> <translation>Permitir direcciones opuestas al mismo tiempo</translation> </message> <message> - <location filename="../SettingsView.ui" line="537"/> + <location filename="../SettingsView.ui" line="551"/> <source>Suspend screensaver</source> <translation>Suspender protector de pantalla</translation> </message> <message> - <location filename="../SettingsView.ui" line="547"/> + <location filename="../SettingsView.ui" line="561"/> <source>Pause when inactive</source> <translation>Pausar al no estar activo</translation> </message> <message> - <location filename="../SettingsView.ui" line="554"/> + <location filename="../SettingsView.ui" line="582"/> <source>Show FPS in title bar</source> <translation>Mostrar FPS en la barra de título</translation> </message> <message> - <location filename="../SettingsView.ui" line="578"/> + <location filename="../SettingsView.ui" line="633"/> <source>Automatically save cheats</source> <translation>Guardar trucos automáticamente</translation> </message> <message> - <location filename="../SettingsView.ui" line="588"/> + <location filename="../SettingsView.ui" line="643"/> <source>Automatically load cheats</source> <translation>Cargar trucos automáticamente</translation> </message> <message> - <location filename="../SettingsView.ui" line="598"/> + <location filename="../SettingsView.ui" line="606"/> <source>Automatically save state</source> <translation>Guardar estado automáticamente</translation> </message> <message> - <location filename="../SettingsView.ui" line="608"/> + <location filename="../SettingsView.ui" line="616"/> <source>Automatically load state</source> <translation>Cargar estado automáticamente</translation> </message> <message> - <location filename="../SettingsView.ui" line="618"/> + <location filename="../SettingsView.ui" line="592"/> <source>Enable Discord Rich Presence</source> <translation>Hablitar Rich Presence en Discord</translation> </message> <message> - <location filename="../SettingsView.ui" line="632"/> + <location filename="../SettingsView.ui" line="670"/> <source>Fast forward speed:</source> <translation>Avance rápido:</translation> </message> <message> - <location filename="../SettingsView.ui" line="644"/> - <location filename="../SettingsView.ui" line="891"/> + <location filename="../SettingsView.ui" line="682"/> + <location filename="../SettingsView.ui" line="725"/> + <location filename="../SettingsView.ui" line="974"/> <source>×</source> <translation>×</translation> </message> <message> - <location filename="../SettingsView.ui" line="663"/> + <location filename="../SettingsView.ui" line="701"/> + <location filename="../SettingsView.ui" line="744"/> <source>Unbounded</source> <translation>Sin límite</translation> </message> <message> - <location filename="../SettingsView.ui" line="699"/> + <location filename="../SettingsView.ui" line="780"/> <source>Enable rewind</source> <translation>Habilitar el rebobinar</translation> </message> <message> - <location filename="../SettingsView.ui" line="706"/> + <location filename="../SettingsView.ui" line="787"/> <source>Rewind history:</source> <translation>Hist. de rebobinado:</translation> </message> <message> - <location filename="../SettingsView.ui" line="738"/> + <location filename="../SettingsView.ui" line="819"/> <source>Idle loops:</source> <translation>Bucles inactivos:</translation> </message> <message> - <location filename="../SettingsView.ui" line="746"/> + <location filename="../SettingsView.ui" line="827"/> <source>Run all</source> <translation>Ejecutarlos todos</translation> </message> <message> - <location filename="../SettingsView.ui" line="751"/> + <location filename="../SettingsView.ui" line="832"/> <source>Remove known</source> <translation>Eliminar los conocidos</translation> </message> <message> - <location filename="../SettingsView.ui" line="756"/> + <location filename="../SettingsView.ui" line="837"/> <source>Detect and remove</source> <translation>Detectar y eliminar</translation> </message> <message> - <location filename="../SettingsView.ui" line="778"/> + <location filename="../SettingsView.ui" line="859"/> <source>Savestate extra data:</source> <translation>Guardar datos extra:</translation> </message> <message> - <location filename="../SettingsView.ui" line="785"/> - <location filename="../SettingsView.ui" line="829"/> + <location filename="../SettingsView.ui" line="866"/> + <location filename="../SettingsView.ui" line="910"/> <source>Screenshot</source> <translation>Pantallazo</translation> </message> <message> - <location filename="../SettingsView.ui" line="795"/> - <location filename="../SettingsView.ui" line="839"/> + <location filename="../SettingsView.ui" line="876"/> + <location filename="../SettingsView.ui" line="920"/> <source>Save data</source> <translation>Datos de guardado</translation> </message> <message> - <location filename="../SettingsView.ui" line="805"/> - <location filename="../SettingsView.ui" line="846"/> + <location filename="../SettingsView.ui" line="886"/> + <location filename="../SettingsView.ui" line="927"/> <source>Cheat codes</source> <translation>Trucos</translation> </message> <message> - <location filename="../SettingsView.ui" line="822"/> + <location filename="../SettingsView.ui" line="903"/> <source>Load extra data:</source> <translation>Cargar datos extra:</translation> </message>

@@ -4770,119 +5118,119 @@ <source>Rewind affects save data</source>

<translation type="vanished">El rebobinar afecta los datos de guardado</translation> </message> <message> - <location filename="../SettingsView.ui" line="764"/> + <location filename="../SettingsView.ui" line="845"/> <source>Preload entire ROM into memory</source> <translation>Cargar ROM completa a la memoria</translation> </message> <message> - <location filename="../SettingsView.ui" line="675"/> + <location filename="../SettingsView.ui" line="756"/> <source>Autofire interval:</source> <translation>Intervalo de turbo:</translation> </message> <message> - <location filename="../SettingsView.ui" line="857"/> + <location filename="../SettingsView.ui" line="938"/> <source>Video renderer:</source> <translation>Renderizador de video:</translation> </message> <message> - <location filename="../SettingsView.ui" line="865"/> + <location filename="../SettingsView.ui" line="946"/> <source>Software</source> <translation>Software</translation> </message> <message> - <location filename="../SettingsView.ui" line="870"/> + <location filename="../SettingsView.ui" line="951"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../SettingsView.ui" line="878"/> + <location filename="../SettingsView.ui" line="959"/> <source>OpenGL enhancements</source> <translation>Mejoras para OpenGL</translation> </message> <message> - <location filename="../SettingsView.ui" line="884"/> + <location filename="../SettingsView.ui" line="965"/> <source>High-resolution scale:</source> <translation>Escala de alta resolución:</translation> </message> <message> - <location filename="../SettingsView.ui" line="907"/> + <location filename="../SettingsView.ui" line="1028"/> <source>XQ GBA audio (experimental)</source> <translation>Mejorar audio GBA (experimental)</translation> </message> <message> - <location filename="../SettingsView.ui" line="918"/> + <location filename="../SettingsView.ui" line="1039"/> <source>GB BIOS file:</source> <translation>Archivo BIOS GB:</translation> </message> <message> - <location filename="../SettingsView.ui" line="937"/> - <location filename="../SettingsView.ui" line="975"/> - <location filename="../SettingsView.ui" line="1010"/> - <location filename="../SettingsView.ui" line="1038"/> - <location filename="../SettingsView.ui" line="1079"/> - <location filename="../SettingsView.ui" line="1127"/> - <location filename="../SettingsView.ui" line="1175"/> - <location filename="../SettingsView.ui" line="1223"/> - <location filename="../SettingsView.ui" line="1271"/> + <location filename="../SettingsView.ui" line="1058"/> + <location filename="../SettingsView.ui" line="1096"/> + <location filename="../SettingsView.ui" line="1131"/> + <location filename="../SettingsView.ui" line="1159"/> + <location filename="../SettingsView.ui" line="1200"/> + <location filename="../SettingsView.ui" line="1248"/> + <location filename="../SettingsView.ui" line="1296"/> + <location filename="../SettingsView.ui" line="1344"/> + <location filename="../SettingsView.ui" line="1392"/> <source>Browse</source> <translation>Examinar</translation> </message> <message> - <location filename="../SettingsView.ui" line="946"/> + <location filename="../SettingsView.ui" line="1067"/> <source>Use BIOS file if found</source> <translation>Usar archivo BIOS si fue encontrado</translation> </message> <message> - <location filename="../SettingsView.ui" line="956"/> + <location filename="../SettingsView.ui" line="1077"/> <source>Skip BIOS intro</source> <translation>Saltar animación de entrada del BIOS</translation> </message> <message> - <location filename="../SettingsView.ui" line="984"/> + <location filename="../SettingsView.ui" line="1105"/> <source>GBA BIOS file:</source> <translation>Archivo BIOS GBA:</translation> </message> <message> - <location filename="../SettingsView.ui" line="991"/> + <location filename="../SettingsView.ui" line="1112"/> <source>GBC BIOS file:</source> <translation>Archivo BIOS GBC:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1019"/> + <location filename="../SettingsView.ui" line="1140"/> <source>SGB BIOS file:</source> <translation>Archivo BIOS SGB:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1054"/> + <location filename="../SettingsView.ui" line="1175"/> <source>Save games</source> <translation>Datos de guardado</translation> </message> <message> - <location filename="../SettingsView.ui" line="1088"/> - <location filename="../SettingsView.ui" line="1136"/> - <location filename="../SettingsView.ui" line="1184"/> - <location filename="../SettingsView.ui" line="1232"/> - <location filename="../SettingsView.ui" line="1280"/> + <location filename="../SettingsView.ui" line="1209"/> + <location filename="../SettingsView.ui" line="1257"/> + <location filename="../SettingsView.ui" line="1305"/> + <location filename="../SettingsView.ui" line="1353"/> + <location filename="../SettingsView.ui" line="1401"/> <source>Same directory as the ROM</source> <translation>Al mismo directorio que la ROM</translation> </message> <message> - <location filename="../SettingsView.ui" line="1102"/> + <location filename="../SettingsView.ui" line="1223"/> <source>Save states</source> <translation>Estados de guardado</translation> </message> <message> - <location filename="../SettingsView.ui" line="1150"/> + <location filename="../SettingsView.ui" line="1271"/> <source>Screenshots</source> <translation>Pantallazos</translation> </message> <message> - <location filename="../SettingsView.ui" line="1198"/> + <location filename="../SettingsView.ui" line="1319"/> <source>Patches</source> <translation>Parches</translation> </message> <message> - <location filename="../SettingsView.ui" line="1246"/> + <location filename="../SettingsView.ui" line="1367"/> <source>Cheats</source> <translation>Trucos</translation> </message>

@@ -4891,37 +5239,37 @@ <source>Game Boy model</source>

<translation type="vanished">Modelo de Game Boy</translation> </message> <message> - <location filename="../SettingsView.ui" line="1345"/> - <location filename="../SettingsView.ui" line="1381"/> - <location filename="../SettingsView.ui" line="1417"/> + <location filename="../SettingsView.ui" line="1466"/> + <location filename="../SettingsView.ui" line="1502"/> + <location filename="../SettingsView.ui" line="1538"/> <source>Autodetect</source> <translation>Detección automática</translation> </message> <message> - <location filename="../SettingsView.ui" line="1350"/> - <location filename="../SettingsView.ui" line="1386"/> - <location filename="../SettingsView.ui" line="1422"/> + <location filename="../SettingsView.ui" line="1471"/> + <location filename="../SettingsView.ui" line="1507"/> + <location filename="../SettingsView.ui" line="1543"/> <source>Game Boy (DMG)</source> <translation>Game Boy (DMG)</translation> </message> <message> - <location filename="../SettingsView.ui" line="1355"/> - <location filename="../SettingsView.ui" line="1391"/> - <location filename="../SettingsView.ui" line="1427"/> + <location filename="../SettingsView.ui" line="1476"/> + <location filename="../SettingsView.ui" line="1512"/> + <location filename="../SettingsView.ui" line="1548"/> <source>Super Game Boy (SGB)</source> <translation></translation> </message> <message> - <location filename="../SettingsView.ui" line="1360"/> - <location filename="../SettingsView.ui" line="1396"/> - <location filename="../SettingsView.ui" line="1432"/> + <location filename="../SettingsView.ui" line="1481"/> + <location filename="../SettingsView.ui" line="1517"/> + <location filename="../SettingsView.ui" line="1553"/> <source>Game Boy Color (CGB)</source> <translation>Game Boy Color (CGB)</translation> </message> <message> - <location filename="../SettingsView.ui" line="1365"/> - <location filename="../SettingsView.ui" line="1401"/> - <location filename="../SettingsView.ui" line="1437"/> + <location filename="../SettingsView.ui" line="1486"/> + <location filename="../SettingsView.ui" line="1522"/> + <location filename="../SettingsView.ui" line="1558"/> <source>Game Boy Advance (AGB)</source> <translation>Game Boy Advance (AGB)</translation> </message>

@@ -4934,27 +5282,27 @@ <source>Game Boy Color model</source>

<translation type="vanished">Modelo de Game Boy Color</translation> </message> <message> - <location filename="../SettingsView.ui" line="1452"/> + <location filename="../SettingsView.ui" line="1573"/> <source>Default BG colors:</source> <translation>Colores de fondo por defecto:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1619"/> + <location filename="../SettingsView.ui" line="1740"/> <source>Super Game Boy borders</source> <translation>Bordes de Super Game Boy</translation> </message> <message> - <location filename="../SettingsView.ui" line="1633"/> + <location filename="../SettingsView.ui" line="1754"/> <source>Camera driver:</source> <translation>Controlador de cámara:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1730"/> + <location filename="../SettingsView.ui" line="1851"/> <source>Default sprite colors 1:</source> <translation>Colores de sprite 1 por defecto:</translation> </message> <message> - <location filename="../SettingsView.ui" line="1737"/> + <location filename="../SettingsView.ui" line="1858"/> <source>Default sprite colors 2:</source> <translation>Colores de sprite 2 por defecto:</translation> </message>

@@ -5028,29 +5376,49 @@ <source>Tiles</source>

<translation>Tiles</translation> </message> <message> - <location filename="../TileView.ui" line="110"/> + <location filename="../TileView.ui" line="20"/> + <source>Export Selected</source> + <translation>Exportar seleccionados</translation> + </message> + <message> + <location filename="../TileView.ui" line="27"/> + <source>Export All</source> + <translation>Exportar todos</translation> + </message> + <message> + <location filename="../TileView.ui" line="43"/> <source>256 colors</source> <translation>256 colores</translation> </message> <message> - <location filename="../TileView.ui" line="123"/> + <location filename="../TileView.ui" line="56"/> <source>×</source> <translation>×</translation> </message> <message> - <location filename="../TileView.ui" line="136"/> + <location filename="../TileView.ui" line="69"/> <source>Magnification</source> <translation>Ampliación</translation> </message> <message> - <location filename="../TileView.ui" line="159"/> + <location filename="../TileView.ui" line="92"/> <source>Tiles per row</source> <translation>Tiles por fila</translation> </message> <message> - <location filename="../TileView.ui" line="166"/> + <location filename="../TileView.ui" line="99"/> <source>Fit to window</source> <translation>Ajustar a ventana</translation> + </message> + <message> + <location filename="../TileView.ui" line="192"/> + <source>Copy Selected</source> + <translation>Copiar seleccionados</translation> + </message> + <message> + <location filename="../TileView.ui" line="199"/> + <source>Copy All</source> + <translation>Copiar todos</translation> </message> </context> <context>
M src/platform/qt/ts/mgba-zh_CN.tssrc/platform/qt/ts/mgba-zh_CN.ts

@@ -310,34 +310,24 @@ <source>Record GIF</source>

<translation>录制 GIF</translation> </message> <message> - <location filename="../GIFView.ui" line="34"/> + <location filename="../GIFView.ui" line="36"/> + <source>Frameskip</source> + <translation>跳帧</translation> + </message> + <message> + <location filename="../GIFView.ui" line="68"/> <source>Start</source> <translation>开始</translation> </message> <message> - <location filename="../GIFView.ui" line="50"/> + <location filename="../GIFView.ui" line="84"/> <source>Stop</source> <translation>停止</translation> </message> <message> - <location filename="../GIFView.ui" line="63"/> + <location filename="../GIFView.ui" line="110"/> <source>Select File</source> <translation>选择文件</translation> - </message> - <message> - <location filename="../GIFView.ui" line="101"/> - <source>Frameskip</source> - <translation>跳帧</translation> - </message> - <message> - <location filename="../GIFView.ui" line="115"/> - <source>Frame delay (ms)</source> - <translation>帧延迟 (ms)</translation> - </message> - <message> - <location filename="../GIFView.ui" line="122"/> - <source>Automatic</source> - <translation>自动设置</translation> </message> </context> <context>

@@ -615,6 +605,40 @@ <translation>缩放率</translation>

</message> </context> <context> + <name>MemoryDump</name> + <message> + <location filename="../MemoryDump.ui" line="14"/> + <source>Save Memory Range</source> + <translation>保存内存范围</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="20"/> + <source>Start Address:</source> + <translation>起始地址:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="42"/> + <source>:</source> + <translation>:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="58"/> + <location filename="../MemoryDump.ui" line="89"/> + <source>0x</source> + <translation>0x</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="76"/> + <source>Byte Count:</source> + <translation>字节数:</translation> + </message> + <message> + <location filename="../MemoryDump.ui" line="108"/> + <source>Dump across banks</source> + <translation>跨 bank 转储</translation> + </message> +</context> +<context> <name>MemorySearch</name> <message> <location filename="../MemorySearch.ui" line="20"/>

@@ -815,6 +839,11 @@ <message>

<location filename="../MemoryView.ui" line="277"/> <source>Load</source> <translation>载入</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="284"/> + <source>Save Range</source> + <translation>保存范围</translation> </message> </context> <context>

@@ -1405,22 +1434,22 @@ </context>

<context> <name>QGBA::CoreController</name> <message> - <location filename="../CoreController.cpp" line="592"/> + <location filename="../CoreController.cpp" line="593"/> <source>Failed to open save file: %1</source> <translation>无法打开存档: %1</translation> </message> <message> - <location filename="../CoreController.cpp" line="621"/> + <location filename="../CoreController.cpp" line="622"/> <source>Failed to open game file: %1</source> <translation>无法打开游戏文件: %1</translation> </message> <message> - <location filename="../CoreController.cpp" line="689"/> + <location filename="../CoreController.cpp" line="690"/> <source>Failed to open snapshot file for reading: %1</source> <translation>无法读取快照文件: %1</translation> </message> <message> - <location filename="../CoreController.cpp" line="705"/> + <location filename="../CoreController.cpp" line="706"/> <source>Failed to open snapshot file for writing: %1</source> <translation>无法写入快照文件: %1</translation> </message>

@@ -1553,17 +1582,17 @@ </context>

<context> <name>QGBA::GIFView</name> <message> - <location filename="../GIFView.cpp" line="53"/> + <location filename="../GIFView.cpp" line="49"/> <source>Failed to open output GIF file: %1</source> <translation>无法打开输出的 GIF 文件: %1</translation> </message> <message> - <location filename="../GIFView.cpp" line="71"/> + <location filename="../GIFView.cpp" line="67"/> <source>Select output file</source> <translation>选择输出文件</translation> </message> <message> - <location filename="../GIFView.cpp" line="71"/> + <location filename="../GIFView.cpp" line="67"/> <source>Graphics Interchange Format (*.gif)</source> <translation>图形交换格式 (*.gif)</translation> </message>

@@ -3445,12 +3474,12 @@ </message>

<message> <location filename="../ShaderSelector.cpp" line="105"/> <source>No shader loaded</source> - <translation>未载入着色器</translation> + <translation>不载入着色器</translation> </message> <message> <location filename="../ShaderSelector.cpp" line="113"/> <source>by %1</source> - <translation>by %1</translation> + <translation>由 %1</translation> </message> <message> <location filename="../ShaderSelector.cpp" line="128"/>

@@ -3460,7 +3489,7 @@ </message>

<message> <location filename="../ShaderSelector.cpp" line="135"/> <source>Pass %1</source> - <translation>Pass %1</translation> + <translation>通道 %1</translation> </message> </context> <context>

@@ -3515,108 +3544,108 @@ </context>

<context> <name>QGBA::Window</name> <message> - <location filename="../Window.cpp" line="295"/> + <location filename="../Window.cpp" line="292"/> <source>Game Boy Advance ROMs (%1)</source> <translation>Game Boy Advance ROM (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="312"/> + <location filename="../Window.cpp" line="309"/> <source>Game Boy ROMs (%1)</source> <translation>Game Boy ROM (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="316"/> + <location filename="../Window.cpp" line="313"/> <source>All ROMs (%1)</source> <translation>所有 ROM (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="317"/> + <location filename="../Window.cpp" line="314"/> <source>%1 Video Logs (*.mvl)</source> <translation>%1 视频日志 (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="332"/> + <location filename="../Window.cpp" line="329"/> <source>Archives (%1)</source> <translation>压缩文件 (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="337"/> - <location filename="../Window.cpp" line="345"/> - <location filename="../Window.cpp" line="372"/> + <location filename="../Window.cpp" line="334"/> + <location filename="../Window.cpp" line="342"/> + <location filename="../Window.cpp" line="369"/> <source>Select ROM</source> <translation>选择 ROM</translation> </message> <message> - <location filename="../Window.cpp" line="363"/> + <location filename="../Window.cpp" line="360"/> <source>Select folder</source> <translation>选择文件夹</translation> </message> <message> - <location filename="../Window.cpp" line="380"/> + <location filename="../Window.cpp" line="377"/> <source>Game Boy Advance save files (%1)</source> <translation>Game Boy Advance 存档文件 (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="381"/> - <location filename="../Window.cpp" line="442"/> - <location filename="../Window.cpp" line="449"/> + <location filename="../Window.cpp" line="378"/> + <location filename="../Window.cpp" line="439"/> + <location filename="../Window.cpp" line="446"/> <source>Select save</source> <translation>选择存档</translation> </message> <message> - <location filename="../Window.cpp" line="389"/> + <location filename="../Window.cpp" line="386"/> <source>mGBA savestate files (%1)</source> <translation>mGBA 即时存档文件 (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="391"/> - <location filename="../Window.cpp" line="396"/> + <location filename="../Window.cpp" line="388"/> + <location filename="../Window.cpp" line="393"/> <source>Select savestate</source> <translation>选择即时存档</translation> </message> <message> - <location filename="../Window.cpp" line="418"/> + <location filename="../Window.cpp" line="415"/> <source>Select patch</source> <translation>选择补丁</translation> </message> <message> - <location filename="../Window.cpp" line="418"/> + <location filename="../Window.cpp" line="415"/> <source>Patches (*.ips *.ups *.bps)</source> <translation>补丁文件 (*.ips *.ups *.bps)</translation> </message> <message> - <location filename="../Window.cpp" line="435"/> + <location filename="../Window.cpp" line="432"/> <source>Select image</source> <translation>选择图片</translation> </message> <message> - <location filename="../Window.cpp" line="435"/> + <location filename="../Window.cpp" line="432"/> <source>Image file (*.png *.gif *.jpg *.jpeg);;All files (*)</source> <translation>图像文件 (*.png *.gif *.jpg *.jpeg);;所有文件 (*)</translation> </message> <message> - <location filename="../Window.cpp" line="442"/> - <location filename="../Window.cpp" line="449"/> + <location filename="../Window.cpp" line="439"/> + <location filename="../Window.cpp" line="446"/> <source>GameShark saves (*.sps *.xps)</source> <translation>GameShark 存档 (*.sps *.xps)</translation> </message> <message> - <location filename="../Window.cpp" line="476"/> + <location filename="../Window.cpp" line="473"/> <source>Select video log</source> <translation>选择视频日志</translation> </message> <message> - <location filename="../Window.cpp" line="476"/> + <location filename="../Window.cpp" line="473"/> <source>Video logs (*.mvl)</source> <translation>视频日志文件 (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="858"/> + <location filename="../Window.cpp" line="853"/> <source>Crash</source> <translation>崩溃</translation> </message> <message> - <location filename="../Window.cpp" line="859"/> + <location filename="../Window.cpp" line="854"/> <source>The game has crashed with the following error: %1</source>

@@ -3625,578 +3654,578 @@

%1</translation> </message> <message> - <location filename="../Window.cpp" line="866"/> + <location filename="../Window.cpp" line="861"/> <source>Couldn&apos;t Load</source> <translation>无法载入</translation> </message> <message> - <location filename="../Window.cpp" line="867"/> + <location filename="../Window.cpp" line="862"/> <source>Could not load game. Are you sure it&apos;s in the correct format?</source> <translation>无法载入游戏。请确认游戏格式是否无误。</translation> </message> <message> - <location filename="../Window.cpp" line="880"/> + <location filename="../Window.cpp" line="875"/> <source>Unimplemented BIOS call</source> <translation>未实现的 BIOS 调用</translation> </message> <message> - <location filename="../Window.cpp" line="881"/> + <location filename="../Window.cpp" line="876"/> <source>This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience.</source> <translation>该游戏使用了尚未实现的 BIOS 调用。请使用官方 BIOS 以获得最佳游戏体验。</translation> </message> <message> - <location filename="../Window.cpp" line="966"/> + <location filename="../Window.cpp" line="961"/> <source>Really make portable?</source> <translation>确定进行程序便携化?</translation> </message> <message> - <location filename="../Window.cpp" line="967"/> + <location filename="../Window.cpp" line="962"/> <source>This will make the emulator load its configuration from the same directory as the executable. Do you want to continue?</source> <translation>进行此操作后,模拟器将从模拟器可执行文件所在目录内加载模拟器配置。您想继续吗?</translation> </message> <message> - <location filename="../Window.cpp" line="979"/> + <location filename="../Window.cpp" line="974"/> <source>Restart needed</source> <translation>需要重新启动</translation> </message> <message> - <location filename="../Window.cpp" line="980"/> + <location filename="../Window.cpp" line="975"/> <source>Some changes will not take effect until the emulator is restarted.</source> <translation>更改将在模拟器下次启动时生效。</translation> </message> <message> - <location filename="../Window.cpp" line="1028"/> + <location filename="../Window.cpp" line="1022"/> <source> - Player %1 of %2</source> <translation> - 玩家 %1 共 %2</translation> </message> <message> - <location filename="../Window.cpp" line="1039"/> + <location filename="../Window.cpp" line="1034"/> <source>%1 - %2</source> <translation>%1 - %2</translation> </message> <message> - <location filename="../Window.cpp" line="1041"/> + <location filename="../Window.cpp" line="1036"/> <source>%1 - %2 - %3</source> <translation>%1 - %2 - %3</translation> </message> <message> - <location filename="../Window.cpp" line="1043"/> + <location filename="../Window.cpp" line="1038"/> <source>%1 - %2 (%3 fps) - %4</source> <translation>%1 - %2 (%3 fps) - %4</translation> </message> <message> - <location filename="../Window.cpp" line="1084"/> + <location filename="../Window.cpp" line="1079"/> <source>&amp;File</source> <translation>文件(&amp;F)</translation> </message> <message> - <location filename="../Window.cpp" line="1086"/> + <location filename="../Window.cpp" line="1081"/> <source>Load &amp;ROM...</source> <translation>载入 ROM(&amp;R)...</translation> </message> <message> - <location filename="../Window.cpp" line="1089"/> + <location filename="../Window.cpp" line="1083"/> <source>Load ROM in archive...</source> <translation>从压缩文件中载入 ROM...</translation> </message> <message> - <location filename="../Window.cpp" line="1090"/> + <location filename="../Window.cpp" line="1085"/> <source>Add folder to library...</source> <translation>将文件夹添加到库中...</translation> </message> <message> - <location filename="../Window.cpp" line="1093"/> + <location filename="../Window.cpp" line="1088"/> <source>Load alternate save...</source> <translation>读取其他的存档...</translation> </message> <message> - <location filename="../Window.cpp" line="1096"/> + <location filename="../Window.cpp" line="1091"/> <source>Load temporary save...</source> <translation>读取临时存档...</translation> </message> <message> - <location filename="../Window.cpp" line="1100"/> + <location filename="../Window.cpp" line="1095"/> <source>Load &amp;patch...</source> <translation>载入补丁文件(&amp;P)...</translation> </message> <message> - <location filename="../Window.cpp" line="1103"/> + <location filename="../Window.cpp" line="1098"/> <source>Boot BIOS</source> <translation>引导 BIOS</translation> </message> <message> - <location filename="../Window.cpp" line="1107"/> + <location filename="../Window.cpp" line="1102"/> <source>Replace ROM...</source> <translation>替换 ROM...</translation> </message> <message> - <location filename="../Window.cpp" line="1110"/> + <location filename="../Window.cpp" line="1105"/> <source>ROM &amp;info...</source> <translation>ROM 信息(&amp;I)...</translation> </message> <message> - <location filename="../Window.cpp" line="1112"/> + <location filename="../Window.cpp" line="1107"/> <source>Recent</source> <translation>最近打开</translation> </message> <message> - <location filename="../Window.cpp" line="1115"/> + <location filename="../Window.cpp" line="1110"/> <source>Make portable</source> <translation>程序便携化</translation> </message> <message> - <location filename="../Window.cpp" line="1118"/> + <location filename="../Window.cpp" line="1113"/> <source>&amp;Load state</source> <translation>读取即时存档(&amp;L)</translation> </message> <message> - <location filename="../Window.cpp" line="1123"/> + <location filename="../Window.cpp" line="1118"/> <source>Load state file...</source> <translation>载入即时存档文件...</translation> </message> <message> - <location filename="../Window.cpp" line="1128"/> + <location filename="../Window.cpp" line="1123"/> <source>&amp;Save state</source> <translation>保存即时存档(&amp;S)</translation> </message> <message> - <location filename="../Window.cpp" line="1133"/> + <location filename="../Window.cpp" line="1128"/> <source>Save state file...</source> <translation>保存即时存档文件...</translation> </message> <message> - <location filename="../Window.cpp" line="1138"/> + <location filename="../Window.cpp" line="1133"/> <source>Quick load</source> <translation>快速读档</translation> </message> <message> - <location filename="../Window.cpp" line="1139"/> + <location filename="../Window.cpp" line="1134"/> <source>Quick save</source> <translation>快速存档</translation> </message> <message> - <location filename="../Window.cpp" line="1141"/> + <location filename="../Window.cpp" line="1136"/> <source>Load recent</source> <translation>载入最近</translation> </message> <message> - <location filename="../Window.cpp" line="1146"/> + <location filename="../Window.cpp" line="1141"/> <source>Save recent</source> <translation>保存最近</translation> </message> <message> - <location filename="../Window.cpp" line="1154"/> + <location filename="../Window.cpp" line="1149"/> <source>Undo load state</source> <translation>撤消读档</translation> </message> <message> - <location filename="../Window.cpp" line="1159"/> + <location filename="../Window.cpp" line="1154"/> <source>Undo save state</source> <translation>撤消存档</translation> </message> <message> + <location filename="../Window.cpp" line="1163"/> <location filename="../Window.cpp" line="1168"/> - <location filename="../Window.cpp" line="1173"/> <source>State &amp;%1</source> <translation>即时存档 1(&amp;1)</translation> </message> <message> - <location filename="../Window.cpp" line="1180"/> + <location filename="../Window.cpp" line="1175"/> <source>Load camera image...</source> <translation>读取相机图片...</translation> </message> <message> - <location filename="../Window.cpp" line="1184"/> + <location filename="../Window.cpp" line="1179"/> <source>Import GameShark Save</source> <translation>导入 GameShark 存档</translation> </message> <message> - <location filename="../Window.cpp" line="1187"/> + <location filename="../Window.cpp" line="1182"/> <source>Export GameShark Save</source> <translation>导出 GameShark 存档</translation> </message> <message> - <location filename="../Window.cpp" line="1192"/> + <location filename="../Window.cpp" line="1187"/> <source>New multiplayer window</source> <translation>新建多人游戏窗口</translation> </message> <message> - <location filename="../Window.cpp" line="1200"/> + <location filename="../Window.cpp" line="1195"/> <source>About...</source> <translation>关于...</translation> </message> <message> - <location filename="../Window.cpp" line="1203"/> + <location filename="../Window.cpp" line="1198"/> <source>E&amp;xit</source> <translation>退出(&amp;X)</translation> </message> <message> - <location filename="../Window.cpp" line="1206"/> + <location filename="../Window.cpp" line="1201"/> <source>&amp;Emulation</source> <translation>模拟(&amp;E)</translation> </message> <message> - <location filename="../Window.cpp" line="1207"/> + <location filename="../Window.cpp" line="1202"/> <source>&amp;Reset</source> <translation>复位(&amp;R)</translation> </message> <message> - <location filename="../Window.cpp" line="1211"/> + <location filename="../Window.cpp" line="1206"/> <source>Sh&amp;utdown</source> <translation>关机(&amp;U)</translation> </message> <message> - <location filename="../Window.cpp" line="1215"/> + <location filename="../Window.cpp" line="1210"/> <source>Yank game pak</source> <translation>快速抽出游戏卡带</translation> </message> <message> - <location filename="../Window.cpp" line="1221"/> + <location filename="../Window.cpp" line="1216"/> <source>&amp;Pause</source> <translation>暂停(&amp;P)</translation> </message> <message> - <location filename="../Window.cpp" line="1230"/> + <location filename="../Window.cpp" line="1225"/> <source>&amp;Next frame</source> <translation>下一帧(&amp;N)</translation> </message> <message> - <location filename="../Window.cpp" line="1236"/> + <location filename="../Window.cpp" line="1231"/> <source>Fast forward (held)</source> <translation>快进 (长按)</translation> </message> <message> - <location filename="../Window.cpp" line="1242"/> + <location filename="../Window.cpp" line="1237"/> <source>&amp;Fast forward</source> <translation>快进(&amp;F)</translation> </message> <message> - <location filename="../Window.cpp" line="1246"/> + <location filename="../Window.cpp" line="1241"/> <source>Fast forward speed</source> <translation>快进速度</translation> </message> <message> - <location filename="../Window.cpp" line="1251"/> + <location filename="../Window.cpp" line="1246"/> <source>Unbounded</source> <translation>不限制</translation> </message> <message> - <location filename="../Window.cpp" line="1255"/> + <location filename="../Window.cpp" line="1250"/> <source>%0x</source> <translation>%0x</translation> </message> <message> - <location filename="../Window.cpp" line="1259"/> + <location filename="../Window.cpp" line="1254"/> <source>Rewind (held)</source> <translation>回退 (长按)</translation> </message> <message> - <location filename="../Window.cpp" line="1266"/> + <location filename="../Window.cpp" line="1261"/> <source>Re&amp;wind</source> <translation>回退(&amp;W)</translation> </message> <message> - <location filename="../Window.cpp" line="1271"/> + <location filename="../Window.cpp" line="1266"/> <source>Step backwards</source> <translation>后退</translation> </message> <message> - <location filename="../Window.cpp" line="1277"/> + <location filename="../Window.cpp" line="1272"/> <source>Sync to &amp;video</source> <translation>视频同步(&amp;V)</translation> </message> <message> - <location filename="../Window.cpp" line="1284"/> + <location filename="../Window.cpp" line="1279"/> <source>Sync to &amp;audio</source> <translation>音频同步(&amp;A)</translation> </message> <message> - <location filename="../Window.cpp" line="1292"/> + <location filename="../Window.cpp" line="1287"/> <source>Solar sensor</source> <translation>光线传感器</translation> </message> <message> - <location filename="../Window.cpp" line="1293"/> + <location filename="../Window.cpp" line="1288"/> <source>Increase solar level</source> <translation>增加光线级别</translation> </message> <message> - <location filename="../Window.cpp" line="1294"/> + <location filename="../Window.cpp" line="1289"/> <source>Decrease solar level</source> <translation>降低光线级别</translation> </message> <message> - <location filename="../Window.cpp" line="1295"/> + <location filename="../Window.cpp" line="1290"/> <source>Brightest solar level</source> <translation>光线级别为最亮</translation> </message> <message> - <location filename="../Window.cpp" line="1298"/> + <location filename="../Window.cpp" line="1293"/> <source>Darkest solar level</source> <translation>光线级别为最暗</translation> </message> <message> - <location filename="../Window.cpp" line="1304"/> + <location filename="../Window.cpp" line="1299"/> <source>Brightness %1</source> <translation>亮度 %1</translation> </message> <message> - <location filename="../Window.cpp" line="1310"/> + <location filename="../Window.cpp" line="1305"/> <source>Game Boy Printer...</source> - <translation>Game Boy 打印机..</translation> + <translation>Game Boy 打印机...</translation> </message> <message> - <location filename="../Window.cpp" line="1321"/> + <location filename="../Window.cpp" line="1314"/> <source>BattleChip Gate...</source> <translation>BattleChip Gate...</translation> </message> <message> - <location filename="../Window.cpp" line="1323"/> + <location filename="../Window.cpp" line="1318"/> <source>Audio/&amp;Video</source> <translation>音频/视频(&amp;V)</translation> </message> <message> - <location filename="../Window.cpp" line="1324"/> + <location filename="../Window.cpp" line="1319"/> <source>Frame size</source> <translation>帧率</translation> </message> <message> - <location filename="../Window.cpp" line="1326"/> + <location filename="../Window.cpp" line="1321"/> <source>%1×</source> <translation>%1×</translation> </message> <message> - <location filename="../Window.cpp" line="1351"/> + <location filename="../Window.cpp" line="1346"/> <source>Toggle fullscreen</source> <translation>切换全屏</translation> </message> <message> - <location filename="../Window.cpp" line="1354"/> + <location filename="../Window.cpp" line="1349"/> <source>Lock aspect ratio</source> <translation>锁定纵横比</translation> </message> <message> - <location filename="../Window.cpp" line="1366"/> + <location filename="../Window.cpp" line="1361"/> <source>Force integer scaling</source> <translation>强制整数缩放</translation> </message> <message> - <location filename="../Window.cpp" line="1378"/> + <location filename="../Window.cpp" line="1373"/> <source>Interframe blending</source> <translation>帧间混合</translation> </message> <message> - <location filename="../Window.cpp" line="1387"/> + <location filename="../Window.cpp" line="1382"/> <source>Bilinear filtering</source> <translation>双线性过滤</translation> </message> <message> - <location filename="../Window.cpp" line="1395"/> + <location filename="../Window.cpp" line="1390"/> <source>Frame&amp;skip</source> <translation>跳帧(&amp;S)</translation> </message> <message> - <location filename="../Window.cpp" line="1408"/> + <location filename="../Window.cpp" line="1403"/> <source>Mute</source> <translation>静音</translation> </message> <message> - <location filename="../Window.cpp" line="1415"/> + <location filename="../Window.cpp" line="1410"/> <source>FPS target</source> <translation>目标 FPS</translation> </message> <message> - <location filename="../Window.cpp" line="1423"/> + <location filename="../Window.cpp" line="1418"/> <source>Native (59.7275)</source> <translation>原生 (59.7275)</translation> </message> <message> - <location filename="../Window.cpp" line="1438"/> + <location filename="../Window.cpp" line="1433"/> <source>Take &amp;screenshot</source> <translation>截图(&amp;S)</translation> </message> <message> - <location filename="../Window.cpp" line="1444"/> + <location filename="../Window.cpp" line="1439"/> <source>Record A/V...</source> <translation>录制音频/视频...</translation> </message> <message> - <location filename="../Window.cpp" line="1448"/> + <location filename="../Window.cpp" line="1440"/> <source>Record GIF...</source> <translation>录制 GIF...</translation> </message> <message> - <location filename="../Window.cpp" line="1452"/> + <location filename="../Window.cpp" line="1444"/> <source>Video layers</source> <translation>视频图层</translation> </message> <message> - <location filename="../Window.cpp" line="1453"/> + <location filename="../Window.cpp" line="1445"/> <source>Audio channels</source> <translation>音频通道</translation> </message> <message> - <location filename="../Window.cpp" line="1455"/> + <location filename="../Window.cpp" line="1447"/> <source>Adjust layer placement...</source> - <translation>调整图层布局</translation> + <translation>调整图层布局...</translation> </message> <message> - <location filename="../Window.cpp" line="1457"/> + <location filename="../Window.cpp" line="1449"/> <source>&amp;Tools</source> <translation>工具(&amp;T)</translation> </message> <message> - <location filename="../Window.cpp" line="1458"/> + <location filename="../Window.cpp" line="1450"/> <source>View &amp;logs...</source> <translation>查看日志(&amp;L)...</translation> </message> <message> - <location filename="../Window.cpp" line="1460"/> + <location filename="../Window.cpp" line="1452"/> <source>Game &amp;overrides...</source> <translation>覆盖游戏(&amp;O)...</translation> </message> <message> - <location filename="../Window.cpp" line="1472"/> - <source>Game &amp;Pak sensors...</source> - <translation>游戏卡带传感器(&amp;P)...</translation> + <location filename="../Window.cpp" line="1464"/> + <source>Game Pak sensors...</source> + <translation>游戏卡带传感器...</translation> </message> <message> - <location filename="../Window.cpp" line="1483"/> + <location filename="../Window.cpp" line="1475"/> <source>&amp;Cheats...</source> <translation>作弊码(&amp;C)...</translation> </message> <message> - <location filename="../Window.cpp" line="1486"/> + <location filename="../Window.cpp" line="1478"/> <source>Settings...</source> <translation>设置...</translation> </message> <message> - <location filename="../Window.cpp" line="1492"/> + <location filename="../Window.cpp" line="1482"/> <source>Open debugger console...</source> <translation>打开调试器控制台...</translation> </message> <message> - <location filename="../Window.cpp" line="1494"/> + <location filename="../Window.cpp" line="1484"/> <source>Start &amp;GDB server...</source> <translation>打开 GDB 服务器(&amp;G)...</translation> </message> <message> - <location filename="../Window.cpp" line="1498"/> + <location filename="../Window.cpp" line="1490"/> <source>View &amp;palette...</source> <translation>查看调色板(&amp;P)...</translation> </message> <message> - <location filename="../Window.cpp" line="1499"/> + <location filename="../Window.cpp" line="1491"/> <source>View &amp;sprites...</source> - <translation>查看精灵图(&amp;S)</translation> + <translation>查看精灵图(&amp;S)...</translation> </message> <message> - <location filename="../Window.cpp" line="1500"/> + <location filename="../Window.cpp" line="1492"/> <source>View &amp;tiles...</source> - <translation>查看瓷贴(&amp;T)</translation> + <translation>查看瓷贴(&amp;T)...</translation> </message> <message> - <location filename="../Window.cpp" line="1501"/> + <location filename="../Window.cpp" line="1493"/> <source>View &amp;map...</source> - <translation>查看映射(&amp;M)</translation> + <translation>查看映射(&amp;M)...</translation> </message> <message> - <location filename="../Window.cpp" line="1504"/> - <source>Frame inspector</source> - <translation>框架检查</translation> + <location filename="../Window.cpp" line="1506"/> + <source>&amp;Frame inspector</source> + <translation>框架检查(&amp;F)</translation> </message> <message> - <location filename="../Window.cpp" line="1522"/> + <location filename="../Window.cpp" line="1514"/> <source>View memory...</source> <translation>查看内存...</translation> </message> <message> - <location filename="../Window.cpp" line="1523"/> + <location filename="../Window.cpp" line="1515"/> <source>Search memory...</source> <translation>搜索内存...</translation> </message> <message> - <location filename="../Window.cpp" line="1526"/> + <location filename="../Window.cpp" line="1518"/> <source>View &amp;I/O registers...</source> <translation>查看 I/O 寄存器(&amp;I)...</translation> </message> <message> - <location filename="../Window.cpp" line="1531"/> - <source>Record video log...</source> - <translation>记录视频日志...</translation> + <location filename="../Window.cpp" line="1523"/> + <source>Record debug video log...</source> + <translation>记录调试视频日志...</translation> </message> <message> - <location filename="../Window.cpp" line="1532"/> - <source>Stop video log</source> - <translation>停止记录视频日志</translation> + <location filename="../Window.cpp" line="1524"/> + <source>Stop debug video log</source> + <translation>停止记录调试视频日志</translation> </message> <message> - <location filename="../Window.cpp" line="1613"/> + <location filename="../Window.cpp" line="1605"/> <source>Exit fullscreen</source> <translation>退出全屏</translation> </message> <message> - <location filename="../Window.cpp" line="1615"/> + <location filename="../Window.cpp" line="1607"/> <source>GameShark Button (held)</source> <translation>GameShark 键 (长按)</translation> </message> <message> - <location filename="../Window.cpp" line="1621"/> + <location filename="../Window.cpp" line="1613"/> <source>Autofire</source> <translation>连发</translation> </message> <message> - <location filename="../Window.cpp" line="1622"/> + <location filename="../Window.cpp" line="1614"/> <source>Autofire A</source> <translation>连发 A</translation> </message> <message> - <location filename="../Window.cpp" line="1627"/> + <location filename="../Window.cpp" line="1619"/> <source>Autofire B</source> <translation>连发 B</translation> </message> <message> - <location filename="../Window.cpp" line="1632"/> + <location filename="../Window.cpp" line="1624"/> <source>Autofire L</source> <translation>连发 L</translation> </message> <message> - <location filename="../Window.cpp" line="1637"/> + <location filename="../Window.cpp" line="1629"/> <source>Autofire R</source> <translation>连发 R</translation> </message> <message> - <location filename="../Window.cpp" line="1642"/> + <location filename="../Window.cpp" line="1634"/> <source>Autofire Start</source> <translation>连发 Start</translation> </message> <message> - <location filename="../Window.cpp" line="1647"/> + <location filename="../Window.cpp" line="1639"/> <source>Autofire Select</source> <translation>连发 Select</translation> </message> <message> - <location filename="../Window.cpp" line="1652"/> + <location filename="../Window.cpp" line="1644"/> <source>Autofire Up</source> <translation>连发 上</translation> </message> <message> - <location filename="../Window.cpp" line="1657"/> + <location filename="../Window.cpp" line="1649"/> <source>Autofire Right</source> <translation>连发 右</translation> </message> <message> - <location filename="../Window.cpp" line="1662"/> + <location filename="../Window.cpp" line="1654"/> <source>Autofire Down</source> <translation>连发 下</translation> </message> <message> - <location filename="../Window.cpp" line="1667"/> + <location filename="../Window.cpp" line="1659"/> <source>Autofire Left</source> <translation>连发 左</translation> </message> <message> - <location filename="../Window.cpp" line="1723"/> + <location filename="../Window.cpp" line="1713"/> <source>Clear</source> <translation>清除</translation> </message>

@@ -4649,6 +4678,11 @@ <source>Enable Discord Rich Presence</source>

<translation>启用 Enable Discord Rich Presence</translation> </message> <message> + <location filename="../SettingsView.ui" line="639"/> + <source>Pause when minimized</source> + <translation>最小化时暂停</translation> + </message> + <message> <location filename="../SettingsView.ui" line="653"/> <source>Fast forward speed:</source> <translation>快进速度:</translation>

@@ -4667,8 +4701,8 @@ <source>Unbounded</source>

<translation>不限制</translation> </message> <message> - <location filename="../SettingsView.ui" line="695"/> - <source>Fast forward (held) speed::</source> + <location filename="../SettingsView.ui" line="696"/> + <source>Fast forward (held) speed:</source> <translation>快进 (按住) 速度:</translation> </message> <message>

@@ -4694,7 +4728,7 @@ </message>

<message> <location filename="../SettingsView.ui" line="810"/> <source>Run all</source> - <translation>运行所有</translation> + <translation>运行全部</translation> </message> <message> <location filename="../SettingsView.ui" line="815"/>

@@ -4949,7 +4983,7 @@ </message>

<message> <location filename="../SettingsView.ui" line="1855"/> <source>Camera:</source> - <translation>相机</translation> + <translation>相机:</translation> </message> </context> <context>

@@ -4982,7 +5016,7 @@ </message>

<message> <location filename="../ShaderSelector.ui" line="88"/> <source>Unload Shader</source> - <translation>未载入着色器</translation> + <translation>卸载着色器</translation> </message> <message> <location filename="../ShaderSelector.ui" line="95"/>

@@ -5130,11 +5164,6 @@ <source>MKV</source>

<translation>MKV</translation> </message> <message> - <location filename="../VideoView.ui" line="237"/> - <source>WebM</source> - <translation>WebM</translation> - </message> - <message> <location filename="../VideoView.ui" line="242"/> <source>AVI</source> <translation>AVI</translation>

@@ -5211,12 +5240,12 @@ <translation>未压缩</translation>

</message> <message> <location filename="../VideoView.ui" line="337"/> - <source>Bitrate (kbps)</source> + <source> Bitrate (kbps)</source> <translation>比特率 (kbps)</translation> </message> <message> <location filename="../VideoView.ui" line="343"/> - <source>VBR</source> + <source>VBR </source> <translation>VBR</translation> </message> <message>
M src/platform/switch/main.csrc/platform/switch/main.c

@@ -20,7 +20,7 @@ #include <GLES3/gl3.h>

#include <GLES3/gl31.h> #define AUTO_INPUT 0x4E585031 -#define SAMPLES 0x400 +#define SAMPLES 0x200 #define BUFFER_SIZE 0x1000 #define N_BUFFERS 4 #define ANALOG_DEADZONE 0x4000

@@ -281,6 +281,8 @@ unsigned mode;

if (mCoreConfigGetUIntValue(&runner->config, "screenMode", &mode) && mode < SM_MAX) { screenMode = mode; } + + runner->core->setAudioBufferSize(runner->core, SAMPLES); } static void _gameLoaded(struct mGUIRunner* runner) {

@@ -539,6 +541,11 @@ }

if (enqueuedBuffers >= N_BUFFERS - 1 && R_SUCCEEDED(audoutWaitPlayFinish(&releasedBuffers, &audoutNReleasedBuffers, 10000000))) { enqueuedBuffers -= audoutNReleasedBuffers; } + if (enqueuedBuffers >= N_BUFFERS) { + blip_clear(left); + blip_clear(right); + return; + } struct GBAStereoSample* samples = audioBuffer[audioBufferActive]; blip_read_samples(left, &samples[0].left, SAMPLES, true);

@@ -754,7 +761,7 @@ for (i = 0; i < N_BUFFERS; ++i) {

audoutBuffer[i].next = NULL; audoutBuffer[i].buffer = audioBuffer[i]; audoutBuffer[i].buffer_size = BUFFER_SIZE; - audoutBuffer[i].data_size = BUFFER_SIZE; + audoutBuffer[i].data_size = SAMPLES * 4; audoutBuffer[i].data_offset = 0; }