Merge branch 'master' into translations

This commit is contained in:
Vicki Pfau 2025-01-11 15:00:21 -08:00
commit 618907586f
66 changed files with 12487 additions and 9440 deletions

10
CHANGES
View File

@ -18,9 +18,12 @@ Emulation fixes:
Other fixes:
- Core: Fix inconsistencies with setting game-specific overrides (fixes mgba.io/i/2963)
- Debugger: Fix writing to specific segment in command-line debugger
- GB Serialize: Prevent loading invalid states where LY >= 144 in modes other than 1
- GBA Hardware: Fix loading states unconditionally overwriting GPIO memory
- FFmpeg: Fix failing to record videos with CRF video (fixes mgba.io/i/3368)
- GB Core: Fix cloning savedata when backing file is outdated (fixes mgba.io/i/3388)
- GBA: Fix getting game info for multiboot ROMs
- GBA Core: Fix booting into BIOS when skip BIOS is enabled
- GBA Hardware: Fix loading states unconditionally overwriting GPIO memory
- mGUI: Load parent directory if last used directory is missing (fixes mgba.io/i/3379)
- Qt: Fix savestate preview sizes with different scales (fixes mgba.io/i/2560)
- Qt: Fix potential crash when configuring shortcuts
Misc:
@ -38,13 +41,16 @@ Misc:
- Libretro: Add Super Game Boy Color support (closes mgba.io/i/3188)
- mGUI: Enable auto-softpatching (closes mgba.io/i/2899)
- mGUI: Persist fast forwarding after closing menu (fixes mgba.io/i/2414)
- mGUI: Wrap around menu cursor when navigating past end (closes mgba.io/i/3356)
- Qt: Handle multiple save game files for disparate games separately (fixes mgba.io/i/2887)
- Qt: Remove maligned double-click-to-fullscreen shortcut (closes mgba.io/i/2632)
- Qt: Pass logging context through to video proxy thread (fixes mgba.io/i/3095)
- Qt: Show maker code and game version in ROM info
- Qt: Show a dummy shader settings tab if shaders aren't supported
- Qt: Allow passing multiple games on command line for multiplayer (closes mgba.io/i/3061)
- Res: Port NSO-gba-colors shader (closes mgba.io/i/2834)
- Scripting: Add `callbacks:oneshot` for single-call callbacks
- Updater: Fix rewriting folders and files on Windows (fixes mgba.io/i/3384)
0.10.4: (2024-12-07)
Emulation fixes:

View File

@ -72,7 +72,7 @@ if(NOT LIBMGBA_ONLY)
set(BUILD_TEST OFF CACHE BOOL "Build testing harness")
set(BUILD_SUITE OFF CACHE BOOL "Build test suite")
set(BUILD_CINEMA OFF CACHE BOOL "Build video tests suite")
set(BUILD_ROM_TEST OFF CACHE BOOL "Build ROM test tool")
set(BUILD_HEADLESS OFF CACHE BOOL "Build headless tool")
set(BUILD_EXAMPLE OFF CACHE BOOL "Build example frontends")
set(BUILD_PYTHON OFF CACHE BOOL "Build Python bindings")
set(BUILD_STATIC OFF CACHE BOOL "Build a static library")
@ -158,6 +158,7 @@ endif()
include(FindFeature)
include(FindFunction)
include(DebugStrip)
# Version information
add_custom_target(${BINARY_NAME}-version-info ALL
@ -948,6 +949,14 @@ if(NOT SKIP_LIBRARY)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/mgba-util)
if(BUILD_STATIC)
# Some versions of CMake are remarkably bad about deduplicating this list,
# leading to issues with static linking. Let's do it manually.
list(REVERSE DEPENDENCY_LIB)
list(REMOVE_DUPLICATES DEPENDENCY_LIB)
list(REVERSE DEPENDENCY_LIB)
endif()
target_link_libraries(${BINARY_NAME} ${DEBUGGER_LIB} ${DEPENDENCY_LIB} ${OS_LIB})
install(TARGETS ${BINARY_NAME} LIBRARY DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME} NAMELINK_SKIP ARCHIVE DESTINATION ${LIBDIR} RUNTIME DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME})
if(BUILD_SHARED)
@ -1037,6 +1046,14 @@ if(BUILD_QT)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/qt ${CMAKE_CURRENT_BINARY_DIR}/qt)
endif()
if(BUILD_HEADLESS)
add_executable(${BINARY_NAME}-headless ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/headless-main.c)
target_link_libraries(${BINARY_NAME}-headless ${PLATFORM_LIBRARY} ${BINARY_NAME})
debug_strip(${BINARY_NAME}-headless)
target_compile_definitions(${BINARY_NAME}-headless PRIVATE "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}")
install(TARGETS ${BINARY_NAME}-headless DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${BINARY_NAME}-headless)
endif()
if(NOT USE_CMOCKA)
set(BUILD_SUITE OFF)
endif()
@ -1234,6 +1251,11 @@ if(SDL_FOUND)
cpack_add_component(${BINARY_NAME}-sdl GROUP sdl)
endif()
if(BUILD_HEADLESS)
cpack_add_component_group(headless PARENT_GROUP base)
cpack_add_component(${BINARY_NAME}-headless GROUP headless)
endif()
if(DISTBUILD)
cpack_add_component_group(debug PARENT_GROUP dev)
if(BUILD_SHARED AND NOT IS_EMBEDDED)
@ -1248,6 +1270,9 @@ if(DISTBUILD)
if(SDL_FOUND)
cpack_add_component(${BINARY_NAME}-sdl-dbg GROUP debug)
endif()
if(BUILD_HEADLESS)
cpack_add_component(${BINARY_NAME}-headless-dbg GROUP debug)
endif()
if(WIN32)
cpack_add_component_group(installer PARENT_GROUP base)
endif()
@ -1318,6 +1343,7 @@ if(NOT QUIET AND NOT LIBMGBA_ONLY)
message(STATUS "Frontends:")
message(STATUS " Qt: ${BUILD_QT}")
message(STATUS " SDL (${SDL_VERSION}): ${BUILD_SDL}")
message(STATUS " Headless: ${BUILD_HEADLESS}")
message(STATUS " Python bindings: ${BUILD_PYTHON}")
message(STATUS " Examples: ${BUILD_EXAMPLE}")
message(STATUS "Test tools:")
@ -1325,7 +1351,6 @@ if(NOT QUIET AND NOT LIBMGBA_ONLY)
message(STATUS " Test harness: ${BUILD_TEST}")
message(STATUS " Test suite: ${BUILD_SUITE}")
message(STATUS " Video test suite: ${BUILD_CINEMA}")
message(STATUS " ROM tester: ${BUILD_ROM_TEST}")
message(STATUS "Cores:")
message(STATUS " Libretro core: ${BUILD_LIBRETRO}")
message(STATUS "Libraries:")

View File

@ -17,7 +17,9 @@
CXX_GUARD_START
#ifdef _WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
// Require Windows 7 or newer
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0601

View File

@ -10,9 +10,12 @@
CXX_GUARD_START
#include <mgba/core/log.h>
#include <mgba-util/gui.h>
#include <mgba-util/vector.h>
mLOG_DECLARE_CATEGORY(GUI_MENU);
#define GUI_V_V (struct GUIVariant) { .type = GUI_VARIANT_VOID }
#define GUI_V_U(U) (struct GUIVariant) { .type = GUI_VARIANT_UNSIGNED, .v.u = (U) }
#define GUI_V_I(I) (struct GUIVariant) { .type = GUI_VARIANT_INT, .v.i = (I) }

View File

@ -44,6 +44,7 @@ struct mSubParser {
bool (*parse)(struct mSubParser* parser, int option, const char* arg);
bool (*parseLong)(struct mSubParser* parser, const char* option, const char* arg);
void (*apply)(struct mSubParser* parser, struct mCoreConfig* config);
bool (*handleExtraArg)(struct mSubParser* parser, const char* arg);
const char* extraOptions;
const struct mOption* longOptions;
void* opts;

View File

@ -350,6 +350,9 @@ static struct mScriptValue* _mScriptCoreChecksum(const struct mCore* core, int t
case mCHECKSUM_CRC32:
size = 4;
break;
case mCHECKSUM_MD5:
size = 16;
break;
}
if (!size) {
return &mScriptValueNull;
@ -769,7 +772,7 @@ static int64_t _addCallbackToBreakpoint(struct mScriptDebugger* debugger, struct
return cbid;
}
static void _runCallbacks(struct mScriptDebugger* debugger, struct mScriptBreakpoint* point) {
static void _runCallbacks(struct mScriptDebugger* debugger, struct mScriptBreakpoint* point, struct mScriptValue* info) {
struct TableIterator iter;
if (!HashTableIteratorStart(&point->callbacks, &iter)) {
return;
@ -778,6 +781,7 @@ static void _runCallbacks(struct mScriptDebugger* debugger, struct mScriptBreakp
struct mScriptValue* fn = HashTableIteratorGetValue(&point->callbacks, &iter);
struct mScriptFrame frame;
mScriptFrameInit(&frame);
mSCRIPT_PUSH(&frame.stack, WTABLE, info);
mScriptContextInvoke(debugger->p->context, fn, &frame);
mScriptFrameDeinit(&frame);
} while (HashTableIteratorNext(&point->callbacks, &iter));
@ -826,7 +830,50 @@ static void _scriptDebuggerEntered(struct mDebuggerModule* debugger, enum mDebug
return;
}
_runCallbacks(scriptDebugger, point);
struct mScriptValue cbInfo = {
.refs = mSCRIPT_VALUE_UNREF,
.flags = 0,
.type = mSCRIPT_TYPE_MS_TABLE,
};
cbInfo.type->alloc(&cbInfo);
static struct mScriptValue keyAddress = mSCRIPT_CHARP("address");
static struct mScriptValue keyWidth = mSCRIPT_CHARP("width");
static struct mScriptValue keySegment = mSCRIPT_CHARP("segment");
static struct mScriptValue keyOldValue = mSCRIPT_CHARP("oldValue");
static struct mScriptValue keyNewValue = mSCRIPT_CHARP("newValue");
static struct mScriptValue keyAccessType = mSCRIPT_CHARP("accessType");
struct mScriptValue valAddress = mSCRIPT_MAKE_U32(info->address);
struct mScriptValue valWidth = mSCRIPT_MAKE_S32(info->width);
struct mScriptValue valSegment = mSCRIPT_MAKE_S32(info->segment);
struct mScriptValue valOldValue;
struct mScriptValue valNewValue;
struct mScriptValue valAccessType;
mScriptTableInsert(&cbInfo, &keyAddress, &valAddress);
if (info->width > 0) {
mScriptTableInsert(&cbInfo, &keyWidth, &valWidth);
}
if (info->segment >= 0) {
mScriptTableInsert(&cbInfo, &keySegment, &valSegment);
}
if (reason == DEBUGGER_ENTER_WATCHPOINT) {
valOldValue = mSCRIPT_MAKE_S32(info->type.wp.oldValue);
valNewValue = mSCRIPT_MAKE_S32(info->type.wp.newValue);
valAccessType = mSCRIPT_MAKE_S32(info->type.wp.accessType);
mScriptTableInsert(&cbInfo, &keyOldValue, &valOldValue);
if (info->type.wp.accessType != WATCHPOINT_READ) {
mScriptTableInsert(&cbInfo, &keyNewValue, &valNewValue);
}
mScriptTableInsert(&cbInfo, &keyAccessType, &valAccessType);
}
_runCallbacks(scriptDebugger, point, &cbInfo);
cbInfo.type->free(&cbInfo);
debugger->isPaused = false;
}
@ -1296,6 +1343,24 @@ static uint8_t _readLuminance(struct GBALuminanceSource* luminance) {
}
#endif
#define CALLBACK(NAME) _mScriptCoreCallback ## NAME
#define DEFINE_CALLBACK(NAME) \
void CALLBACK(NAME) (void* context) { \
struct mScriptContext* scriptContext = context; \
if (!scriptContext) { \
return; \
} \
mScriptContextTriggerCallback(scriptContext, #NAME, NULL); \
}
DEFINE_CALLBACK(frame)
DEFINE_CALLBACK(crashed)
DEFINE_CALLBACK(sleep)
DEFINE_CALLBACK(stop)
DEFINE_CALLBACK(keysRead)
DEFINE_CALLBACK(savedataUpdated)
DEFINE_CALLBACK(alarm)
void mScriptContextAttachCore(struct mScriptContext* context, struct mCore* core) {
struct mScriptValue* coreValue = mScriptValueAlloc(mSCRIPT_TYPE_MS_S(mScriptCoreAdapter));
struct mScriptCoreAdapter* adapter = calloc(1, sizeof(*adapter));
@ -1328,6 +1393,18 @@ void mScriptContextAttachCore(struct mScriptContext* context, struct mCore* core
}
#endif
struct mCoreCallbacks callbacks = {
.videoFrameEnded = CALLBACK(frame),
.coreCrashed = CALLBACK(crashed),
.sleep = CALLBACK(sleep),
.shutdown = CALLBACK(stop),
.keysRead = CALLBACK(keysRead),
.savedataUpdated = CALLBACK(savedataUpdated),
.alarm = CALLBACK(alarm),
.context = context
};
core->addCoreCallbacks(core, &callbacks);
_rebuildMemoryMap(context, adapter);
coreValue->value.opaque = adapter;

View File

@ -249,9 +249,16 @@ static int _loadPNGChunkHandler(png_structp png, png_unknown_chunkp chunk) {
}
const uint8_t* data = chunk->data;
data += sizeof(uint32_t) * 2;
uncompress((Bytef*) item.data, &len, data, chunk->size);
item.size = len;
mStateExtdataPut(extdata, tag, &item);
if (uncompress((Bytef*) item.data, &len, data, chunk->size) == Z_OK) {
if ((uLongf) item.size != len) {
mLOG(SAVESTATE, WARN, "Mismatched decompressed extdata %i size (%d vs %u)", tag, item.size, (uint32_t) len);
item.size = len;
}
mStateExtdataPut(extdata, tag, &item);
} else {
mLOG(SAVESTATE, WARN, "Failed to decompress extdata chunk");
free(item.data);
}
return 1;
}
return 0;
@ -320,7 +327,7 @@ static void* _loadPNGState(struct mCore* core, struct VFile* vf, struct mStateEx
return state;
}
static bool _loadPNGExtadata(struct VFile* vf, struct mStateExtdata* extdata) {
static bool _loadPNGExtdata(struct VFile* vf, struct mStateExtdata* extdata) {
png_structp png = PNGReadOpen(vf, PNG_HEADER_BYTES);
png_infop info = png_create_info_struct(png);
png_infop end = png_create_info_struct(png);
@ -511,7 +518,7 @@ void* mCoreExtractState(struct mCore* core, struct VFile* vf, struct mStateExtda
bool mCoreExtractExtdata(struct mCore* core, struct VFile* vf, struct mStateExtdata* extdata) {
#ifdef USE_PNG
if (isPNG(vf)) {
return _loadPNGExtadata(vf, extdata);
return _loadPNGExtdata(vf, extdata);
}
#endif
if (!core) {

View File

@ -365,8 +365,10 @@ M_TEST_DEFINE(basicBreakpointGBA) {
TEST_PROGRAM(
"hit = 0\n"
"function bkpt()\n"
"address = nil\n"
"function bkpt(info)\n"
" hit = hit + 1\n"
" address = info.address\n"
"end"
);
TEST_PROGRAM("cbid = emu:setBreakpoint(bkpt, 0x020000C4)");
@ -379,6 +381,7 @@ M_TEST_DEFINE(basicBreakpointGBA) {
assert_int_equal(debugger.state, DEBUGGER_RUNNING);
TEST_PROGRAM("assert(hit >= 1)");
TEST_PROGRAM("assert(address == 0x020000C4)");
mScriptContextDeinit(&context);
TEARDOWN_CORE;
@ -404,8 +407,10 @@ M_TEST_DEFINE(basicBreakpointGB) {
TEST_PROGRAM(
"hit = 0\n"
"function bkpt()\n"
"address = nil\n"
"function bkpt(info)\n"
" hit = hit + 1\n"
" address = info.address\n"
"end"
);
TEST_PROGRAM("cbid = emu:setBreakpoint(bkpt, 0xF0)");
@ -418,6 +423,7 @@ M_TEST_DEFINE(basicBreakpointGB) {
assert_int_equal(debugger.state, DEBUGGER_RUNNING);
TEST_PROGRAM("assert(hit >= 1)");
TEST_PROGRAM("assert(address == 0xF0)");
mScriptContextDeinit(&context);
TEARDOWN_CORE;
@ -441,11 +447,22 @@ M_TEST_DEFINE(multipleBreakpoint) {
TEST_PROGRAM(
"hit = 0\n"
"function bkpt1()\n"
"address = nil\n"
"function bkpt1(info)\n"
" hit = hit + 1\n"
" if address then\n"
" address = (address + info.address) / 2\n"
" else\n"
" address = info.address\n"
" end\n"
"end\n"
"function bkpt2()\n"
"function bkpt2(info)\n"
" hit = hit + 100\n"
" if address then\n"
" address = (address + info.address) / 2\n"
" else\n"
" address = info.address\n"
" end\n"
"end"
);
#ifdef M_CORE_GBA
@ -465,6 +482,13 @@ M_TEST_DEFINE(multipleBreakpoint) {
assert_int_equal(debugger.state, DEBUGGER_RUNNING);
TEST_PROGRAM("assert(hit >= 101)");
#ifdef M_CORE_GBA
TEST_PROGRAM("assert(address >= 0x020000C4)");
TEST_PROGRAM("assert(address <= 0x020000C8)");
#else
TEST_PROGRAM("assert(address >= 0xF0)");
TEST_PROGRAM("assert(address <= 0xF1)");
#endif
mScriptContextDeinit(&context);
TEARDOWN_CORE;
@ -479,13 +503,28 @@ M_TEST_DEFINE(basicWatchpoint) {
core->reset(core);
mScriptContextAttachCore(&context, core);
int i;
for (i = 0; i < 4; ++i) {
core->busWrite8(core, RAM_BASE + i, i + 1);
}
mDebuggerInit(&debugger);
mDebuggerAttach(&debugger, core);
TEST_PROGRAM(
"hit = 0\n"
"function bkpt()\n"
"address = nil\n"
"width = nil\n"
"oldValue = nil\n"
"newValue = nil\n"
"accessType = nil\n"
"function bkpt(info)\n"
" hit = hit + 1\n"
" address = info.address\n"
" width = info.width\n"
" oldValue = info.oldValue\n"
" newValue = info.newValue\n"
" accessType = info.accessType\n"
"end"
);
struct mScriptValue base = mSCRIPT_MAKE_S32(RAM_BASE);
@ -499,7 +538,13 @@ M_TEST_DEFINE(basicWatchpoint) {
uint8_t value;
// Read
TEST_PROGRAM("hit = 0");
TEST_PROGRAM(
"hit = 0\n"
"address = nil\n"
"width = nil\n"
"oldValue = nil\n"
"newValue = nil\n"
"accessType = nil\n");
value = core->rawRead8(core, RAM_BASE, -1);
TEST_PROGRAM("assert(hit == 0)");
core->busRead8(core, RAM_BASE);
@ -508,31 +553,71 @@ M_TEST_DEFINE(basicWatchpoint) {
TEST_PROGRAM("assert(hit == 1)");
core->busWrite8(core, RAM_BASE, ~value);
TEST_PROGRAM("assert(hit == 1)");
TEST_PROGRAM("assert(address == base)");
TEST_PROGRAM("assert(width == 1)");
TEST_PROGRAM("assert(oldValue == 1)");
TEST_PROGRAM("assert(newValue == nil)");
TEST_PROGRAM("assert(accessType == C.WATCHPOINT_TYPE.READ)");
// Write
TEST_PROGRAM("hit = 0");
TEST_PROGRAM(
"hit = 0\n"
"address = nil\n"
"width = nil\n"
"oldValue = nil\n"
"newValue = nil\n"
"accessType = nil\n");
value = core->rawRead8(core, RAM_BASE + 1, -1);
TEST_PROGRAM("assert(hit == 0)");
core->busRead8(core, RAM_BASE + 1);
TEST_PROGRAM("assert(hit == 0)");
core->busWrite8(core, RAM_BASE + 1, value);
TEST_PROGRAM("assert(hit == 1)");
TEST_PROGRAM("assert(oldValue == 2)");
TEST_PROGRAM("assert(newValue == 2)");
core->busWrite8(core, RAM_BASE + 1, ~value);
TEST_PROGRAM("assert(hit == 2)");
TEST_PROGRAM("assert(address == base + 1)");
TEST_PROGRAM("assert(width == 1)");
TEST_PROGRAM("assert(oldValue == 2)");
TEST_PROGRAM("assert(newValue == -3)");
TEST_PROGRAM("assert(accessType == C.WATCHPOINT_TYPE.WRITE)");
// RW
TEST_PROGRAM("hit = 0");
TEST_PROGRAM(
"hit = 0\n"
"address = nil\n"
"width = nil\n"
"oldValue = nil\n"
"newValue = nil\n"
"accessType = nil\n");
value = core->rawRead8(core, RAM_BASE + 2, -1);
TEST_PROGRAM("assert(hit == 0)");
core->busRead8(core, RAM_BASE + 2);
TEST_PROGRAM("assert(accessType == C.WATCHPOINT_TYPE.READ)");
TEST_PROGRAM("assert(hit == 1)");
TEST_PROGRAM("assert(oldValue == 3)");
TEST_PROGRAM("assert(newValue == nil)");
core->busWrite8(core, RAM_BASE + 2, value);
TEST_PROGRAM("assert(hit == 2)");
TEST_PROGRAM("assert(oldValue == 3)");
TEST_PROGRAM("assert(newValue == 3)");
core->busWrite8(core, RAM_BASE + 2, ~value);
TEST_PROGRAM("assert(hit == 3)");
TEST_PROGRAM("assert(address == base + 2)");
TEST_PROGRAM("assert(width == 1)");
TEST_PROGRAM("assert(oldValue == 3)");
TEST_PROGRAM("assert(newValue == -4)");
TEST_PROGRAM("assert(accessType == C.WATCHPOINT_TYPE.WRITE)");
// Change
TEST_PROGRAM("hit = 0");
TEST_PROGRAM(
"hit = 0\n"
"address = nil\n"
"width = nil\n"
"oldValue = nil\n"
"newValue = nil\n"
"accessType = nil\n");
value = core->rawRead8(core, RAM_BASE + 3, -1);
TEST_PROGRAM("assert(hit == 0)");
core->busRead8(core, RAM_BASE + 3);
@ -541,6 +626,11 @@ M_TEST_DEFINE(basicWatchpoint) {
TEST_PROGRAM("assert(hit == 0)");
core->busWrite8(core, RAM_BASE + 3, ~value);
TEST_PROGRAM("assert(hit == 1)");
TEST_PROGRAM("assert(address == base + 3)");
TEST_PROGRAM("assert(width == 1)");
TEST_PROGRAM("assert(oldValue == 4)");
TEST_PROGRAM("assert(newValue == -5)");
TEST_PROGRAM("assert(accessType == C.WATCHPOINT_TYPE.WRITE)");
mScriptContextDeinit(&context);
TEARDOWN_CORE;
@ -728,8 +818,10 @@ M_TEST_DEFINE(rangeWatchpoint) {
TEST_PROGRAM(
"hit = 0\n"
"function bkpt()\n"
"address = nil\n"
"function bkpt(info)\n"
" hit = hit + 1\n"
" address = info.address\n"
"end"
);
struct mScriptValue base = mSCRIPT_MAKE_S32(RAM_BASE);
@ -741,10 +833,13 @@ M_TEST_DEFINE(rangeWatchpoint) {
TEST_PROGRAM("assert(hit == 0)");
core->busRead8(core, RAM_BASE);
TEST_PROGRAM("assert(hit == 1)");
TEST_PROGRAM("assert(address == base)");
core->busRead8(core, RAM_BASE + 1);
TEST_PROGRAM("assert(hit == 3)");
TEST_PROGRAM("assert(address == base + 1)");
core->busRead8(core, RAM_BASE + 2);
TEST_PROGRAM("assert(hit == 4)");
TEST_PROGRAM("assert(address == base + 2)");
mScriptContextDeinit(&context);
TEARDOWN_CORE;

View File

@ -198,42 +198,6 @@ void _coreShutdown(void* context) {
MutexUnlock(&thread->impl->stateMutex);
}
#ifdef ENABLE_SCRIPTING
#define ADD_CALLBACK(NAME) \
void _script_ ## NAME(void* context) { \
struct mCoreThread* threadContext = context; \
if (!threadContext->scriptContext) { \
return; \
} \
mScriptContextTriggerCallback(threadContext->scriptContext, #NAME, NULL); \
}
ADD_CALLBACK(frame)
ADD_CALLBACK(crashed)
ADD_CALLBACK(sleep)
ADD_CALLBACK(stop)
ADD_CALLBACK(keysRead)
ADD_CALLBACK(savedataUpdated)
ADD_CALLBACK(alarm)
#undef ADD_CALLBACK
#define SCRIPT(NAME) _script_ ## NAME
static void _mCoreThreadAddCallbacks(struct mCoreThread* threadContext) {
struct mCoreCallbacks callbacks = {
.videoFrameEnded = SCRIPT(frame),
.coreCrashed = SCRIPT(crashed),
.sleep = SCRIPT(sleep),
.shutdown = SCRIPT(stop),
.keysRead = SCRIPT(keysRead),
.savedataUpdated = SCRIPT(savedataUpdated),
.alarm = SCRIPT(alarm),
.context = threadContext
};
threadContext->core->addCoreCallbacks(threadContext->core, &callbacks);
}
#endif
static THREAD_ENTRY _mCoreThreadRun(void* context) {
struct mCoreThread* threadContext = context;
#ifdef USE_PTHREADS
@ -279,7 +243,6 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
struct mScriptContext* scriptContext = threadContext->scriptContext;
if (scriptContext) {
mScriptContextAttachCore(scriptContext, core);
_mCoreThreadAddCallbacks(threadContext);
}
#endif
@ -289,12 +252,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
}
#ifdef ENABLE_SCRIPTING
// startCallback could add a script context
if (scriptContext != threadContext->scriptContext) {
scriptContext = threadContext->scriptContext;
if (scriptContext) {
_mCoreThreadAddCallbacks(threadContext);
}
}
scriptContext = threadContext->scriptContext;
if (scriptContext) {
mScriptContextTriggerCallback(scriptContext, "start", NULL);
}
@ -312,12 +270,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
#ifdef ENABLE_SCRIPTING
// resetCallback could add a script context
if (scriptContext != threadContext->scriptContext) {
scriptContext = threadContext->scriptContext;
if (scriptContext) {
_mCoreThreadAddCallbacks(threadContext);
}
}
scriptContext = threadContext->scriptContext;
if (scriptContext) {
mScriptContextTriggerCallback(scriptContext, "reset", NULL);
}
@ -372,12 +325,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
}
}
#ifdef ENABLE_SCRIPTING
if (scriptContext != threadContext->scriptContext) {
scriptContext = threadContext->scriptContext;
if (scriptContext) {
_mCoreThreadAddCallbacks(threadContext);
}
}
scriptContext = threadContext->scriptContext;
#endif
if (wasPaused && !(impl->requested & mTHREAD_REQ_PAUSE)) {
break;

View File

@ -187,7 +187,21 @@ bool mArgumentsParse(struct mArguments* args, int argc, char* const* argv, struc
argc -= optind;
argv += optind;
if (argc > 1) {
return false;
for (j = 0; j < argc; ++j) {
bool handled = false;
for (i = 0; i < nSubparsers; ++i) {
if (!subparsers[i].handleExtraArg) {
continue;
}
handled = subparsers[i].handleExtraArg(&subparsers[i], argv[j]);
if (handled) {
break;
}
}
if (!handled) {
return false;
}
}
} else if (argc == 1) {
args->fname = strdup(argv[0]);
} else {
@ -303,6 +317,7 @@ void mSubParserGraphicsInit(struct mSubParser* parser, struct mGraphicsOpts* opt
parser->apply = _applyGraphicsArgs;
parser->extraOptions = GRAPHICS_OPTIONS;
parser->longOptions = _graphicsLongOpts;
parser->handleExtraArg = NULL;
opts->multiplier = 0;
opts->fullscreen = false;
}

View File

@ -38,6 +38,10 @@ CXX_GUARD_START
#define FFMPEG_USE_NEW_CH_LAYOUT
#endif
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(61, 13, 100)
#define FFMPEG_USE_GET_SUPPORTED_CONFIG
#endif
static inline enum AVPixelFormat mColorFormatToFFmpegPixFmt(enum mColorFormat format) {
switch (format) {
#ifndef USE_LIBAV

View File

@ -134,18 +134,28 @@ bool FFmpegEncoderSetAudio(struct FFmpegEncoder* encoder, const char* acodec, un
return false;
}
if (!codec->sample_fmts) {
const enum AVSampleFormat* formats = NULL;
#ifdef FFMPEG_USE_GET_SUPPORTED_CONFIG
if (avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, (const void**) &formats, NULL) < 0) {
return false;
}
#else
formats = codec->sample_fmts;
#endif
if (!formats) {
return false;
}
size_t i;
size_t j;
int priority = INT_MAX;
encoder->sampleFormat = AV_SAMPLE_FMT_NONE;
for (i = 0; codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; ++i) {
for (i = 0; formats[i] != AV_SAMPLE_FMT_NONE; ++i) {
for (j = 0; j < sizeof(priorities) / sizeof(*priorities); ++j) {
if (codec->sample_fmts[i] == priorities[j].format && priority > priorities[j].priority) {
if (formats[i] == priorities[j].format && priority > priorities[j].priority) {
priority = priorities[j].priority;
encoder->sampleFormat = codec->sample_fmts[i];
encoder->sampleFormat = formats[i];
}
}
}
@ -153,18 +163,29 @@ bool FFmpegEncoderSetAudio(struct FFmpegEncoder* encoder, const char* acodec, un
return false;
}
encoder->sampleRate = encoder->isampleRate;
if (codec->supported_samplerates) {
const int* sampleRates = NULL;
#ifdef FFMPEG_USE_GET_SUPPORTED_CONFIG
if (avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_SAMPLE_RATE, 0, (const void**) &sampleRates, NULL) < 0) {
return false;
}
#else
sampleRates = codec->supported_samplerates;
#endif
if (sampleRates) {
bool gotSampleRate = false;
int highestSampleRate = 0;
for (i = 0; codec->supported_samplerates[i]; ++i) {
if (codec->supported_samplerates[i] > highestSampleRate) {
highestSampleRate = codec->supported_samplerates[i];
for (i = 0; sampleRates[i]; ++i) {
if (sampleRates[i] > highestSampleRate) {
highestSampleRate = sampleRates[i];
}
if (codec->supported_samplerates[i] < encoder->isampleRate) {
if (sampleRates[i] < encoder->isampleRate) {
continue;
}
if (!gotSampleRate || encoder->sampleRate > codec->supported_samplerates[i]) {
encoder->sampleRate = codec->supported_samplerates[i];
if (!gotSampleRate || encoder->sampleRate > sampleRates[i]) {
encoder->sampleRate = sampleRates[i];
gotSampleRate = true;
}
}
@ -231,11 +252,19 @@ bool FFmpegEncoderSetVideo(struct FFmpegEncoder* encoder, const char* vcodec, in
size_t j;
int priority = INT_MAX;
encoder->pixFormat = AV_PIX_FMT_NONE;
for (i = 0; codec->pix_fmts[i] != AV_PIX_FMT_NONE; ++i) {
const enum AVPixelFormat* formats;
#ifdef FFMPEG_USE_GET_SUPPORTED_CONFIG
if (avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_PIX_FORMAT, 0, (const void**) &formats, NULL) < 0) {
return false;
}
#else
formats = codec->pix_fmts;
#endif
for (i = 0; formats[i] != AV_PIX_FMT_NONE; ++i) {
for (j = 0; j < sizeof(priorities) / sizeof(*priorities); ++j) {
if (codec->pix_fmts[i] == priorities[j].format && priority > priorities[j].priority) {
if (formats[i] == priorities[j].format && priority > priorities[j].priority) {
priority = priorities[j].priority;
encoder->pixFormat = codec->pix_fmts[i];
encoder->pixFormat = formats[i];
}
}
}
@ -384,7 +413,9 @@ bool FFmpegEncoderOpen(struct FFmpegEncoder* encoder, const char* outfile) {
encoder->videoStream = avformat_new_stream(encoder->context, vcodec);
encoder->video = encoder->videoStream->codec;
#endif
encoder->video->bit_rate = encoder->videoBitrate;
if (encoder->videoBitrate >= 0) {
encoder->video->bit_rate = encoder->videoBitrate;
}
encoder->video->width = encoder->width;
encoder->video->height = encoder->height;
encoder->video->time_base = (AVRational) { encoder->frameCycles * encoder->frameskip, encoder->cycles };

View File

@ -1167,19 +1167,32 @@ static struct mCheatDevice* _GBCoreCheatDevice(struct mCore* core) {
static size_t _GBCoreSavedataClone(struct mCore* core, void** sram) {
struct GB* gb = core->board;
struct VFile* vf = gb->sramVf;
if (vf) {
*sram = malloc(vf->size(vf));
vf->seek(vf, 0, SEEK_SET);
return vf->read(vf, *sram, vf->size(vf));
size_t sramSize = gb->sramSize;
size_t vfSize = 0;
size_t size = sramSize;
uint8_t* view = NULL;
if (gb->sramVf) {
vfSize = gb->sramVf->size(gb->sramVf);
if (vfSize > size) {
size = vfSize;
}
}
if (gb->sramSize) {
*sram = malloc(gb->sramSize);
memcpy(*sram, gb->memory.sram, gb->sramSize);
return gb->sramSize;
if (!size) {
*sram = NULL;
return 0;
}
*sram = NULL;
return 0;
view = malloc(size);
if (sramSize) {
memcpy(view, gb->memory.sram, gb->sramSize);
}
if (vfSize > sramSize) {
gb->sramVf->seek(gb->sramVf, sramSize, SEEK_SET);
gb->sramVf->read(gb->sramVf, &view[sramSize], vfSize - sramSize);
}
*sram = view;
return size;
}
static bool _GBCoreSavedataRestore(struct mCore* core, const void* sram, size_t size, bool writeback) {

View File

@ -801,7 +801,7 @@ static void _GBACoreReset(struct mCore* core) {
#endif
ARMReset(core->cpu);
bool forceSkip = gba->mbVf || core->opts.skipBios;
bool forceSkip = gba->mbVf || (core->opts.skipBios && (gba->romVf || gba->memory.rom));
if (!forceSkip && (gba->romVf || gba->memory.rom) && gba->pristineRomSize >= 0xA0 && gba->biosVf) {
uint32_t crc = doCrc32(&gba->memory.rom[1], 0x9C);
if (crc != LOGO_CRC32) {

View File

@ -702,7 +702,7 @@ void GBASavedataRTCRead(struct GBASavedata* savedata) {
savedata->gpio->rtc.offset = savedata->gpio->rtc.lastLatch - rtcTime;
mLOG(GBA_SAVE, ERROR, "Savegame time offset set to %li", savedata->gpio->rtc.offset);
mLOG(GBA_SAVE, DEBUG, "Savegame time offset set to %li", savedata->gpio->rtc.offset);
}
void GBASavedataSerialize(const struct GBASavedata* savedata, struct GBASerializedState* state) {

View File

@ -0,0 +1,12 @@
function(debug_strip TARGET)
if(DISTBUILD AND NOT APPLE)
if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND "${OBJCOPY}" --only-keep-debug "$<TARGET_FILE:${TARGET}>" "$<TARGET_FILE:${TARGET}>.debug")
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND "${STRIP}" "$<TARGET_FILE:${TARGET}>")
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND "${OBJCOPY}" --add-gnu-debuglink "$<TARGET_FILE:${TARGET}>.debug" "$<TARGET_FILE:${TARGET}>")
install(FILES "$<TARGET_FILE:${TARGET}>.debug" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${TARGET}-dbg)
elseif(BUILD_STATIC AND (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel"))
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND "${STRIP}" "$<TARGET_FILE:${TARGET}>")
endif()
endif()
endfunction()

View File

@ -17,29 +17,40 @@
#ifdef M_CORE_GB
#include <mgba/internal/sm83/sm83.h>
#endif
#ifdef ENABLE_SCRIPTING
#include <mgba/script.h>
#include <mgba/core/scripting.h>
#endif
#include <mgba/feature/commandline.h>
#include <mgba-util/vector.h>
#include <mgba-util/vfs.h>
#include <errno.h>
#include <signal.h>
#define ROM_TEST_OPTIONS "S:R:"
#define ROM_TEST_USAGE \
"Additional options:\n" \
" -S SWI Run until specified SWI call before exiting\n" \
" -R REGISTER General purpose register to return as exit code\n" \
#define HEADLESS_OPTIONS "S:R:"
static const char* const headlessUsage =
"Additional options:\n"
" -S SWI Run until specified SWI call before exiting\n"
" -R REGISTER General purpose register to return as exit code\n"
#ifdef ENABLE_SCRIPTING
" --script FILE Run a script on start. Can be passed multiple times\n"
#endif
;
struct RomTestOpts {
struct HeadlessOpts {
int exitSwiImmediate;
char* returnCodeRegister;
struct StringList scripts;
};
static void _romTestShutdown(int signal);
static bool _parseRomTestOpts(struct mSubParser* parser, int option, const char* arg);
static void _headlessShutdown(int signal);
static bool _parseHeadlessOpts(struct mSubParser* parser, int option, const char* arg);
static bool _parseLongHeadlessOpts(struct mSubParser* parser, const char* option, const char* arg);
static bool _parseSwi(const char* regStr, int* oSwi);
static bool _romTestCheckResiger(void);
static bool _headlessCheckResiger(void);
static struct mCore* core;
@ -47,10 +58,10 @@ static bool _dispatchExiting = false;
static int _exitCode = 0;
static struct mStandardLogger _logger;
static void _romTestCallback(void* context);
static void _headlessCallback(void* context);
#ifdef M_CORE_GBA
static void _romTestSwi16(struct ARMCore* cpu, int immediate);
static void _romTestSwi32(struct ARMCore* cpu, int immediate);
static void _headlessSwi16(struct ARMCore* cpu, int immediate);
static void _headlessSwi32(struct ARMCore* cpu, int immediate);
static int _exitSwiImmediate;
static char* _returnCodeRegister;
@ -60,14 +71,27 @@ void (*_armSwi32)(struct ARMCore* cpu, int immediate);
#endif
int main(int argc, char * argv[]) {
signal(SIGINT, _romTestShutdown);
signal(SIGINT, _headlessShutdown);
struct RomTestOpts romTestOpts = { 3, NULL };
bool cleanExit = false;
int uncleanExit = 1;
size_t i;
struct HeadlessOpts headlessOpts = { 3, NULL };
StringListInit(&headlessOpts.scripts, 0);
struct mSubParser subparser = {
.usage = ROM_TEST_USAGE,
.parse = _parseRomTestOpts,
.extraOptions = ROM_TEST_OPTIONS,
.opts = &romTestOpts
.usage = headlessUsage,
.parse = _parseHeadlessOpts,
.parseLong = _parseLongHeadlessOpts,
.extraOptions = HEADLESS_OPTIONS,
.longOptions = (struct mOption[]) {
{
.name = "script",
.arg = true,
},
{0}
},
.opts = &headlessOpts
};
struct mArguments args;
@ -77,18 +101,20 @@ int main(int argc, char * argv[]) {
}
if (!parsed || args.showHelp) {
usage(argv[0], NULL, NULL, &subparser, 1);
return !parsed;
uncleanExit = !parsed;
goto argsExit;
}
if (args.showVersion) {
version(argv[0]);
return 0;
uncleanExit = 0;
goto argsExit;
}
core = mCoreFind(args.fname);
if (!core) {
return 1;
goto argsExit;
}
core->init(core);
mCoreInitConfig(core, "romTest");
mCoreInitConfig(core, "headless");
mArgumentsApply(&args, NULL, 0, &core->config);
mCoreConfigSetDefaultValue(&core->config, "idleOptimization", "remove");
@ -99,11 +125,10 @@ int main(int argc, char * argv[]) {
mStandardLoggerConfig(&_logger, &core->config);
mLogSetDefaultLogger(&_logger.d);
bool cleanExit = false;
struct mCoreCallbacks callbacks = {0};
_returnCodeRegister = romTestOpts.returnCodeRegister;
if (!_romTestCheckResiger()) {
_returnCodeRegister = headlessOpts.returnCodeRegister;
if (!_headlessCheckResiger()) {
goto loadError;
}
@ -111,24 +136,24 @@ int main(int argc, char * argv[]) {
#ifdef M_CORE_GBA
case mPLATFORM_GBA:
((struct GBA*) core->board)->hardCrash = false;
_exitSwiImmediate = romTestOpts.exitSwiImmediate;
_exitSwiImmediate = headlessOpts.exitSwiImmediate;
if (_exitSwiImmediate == 3) {
// Hook into SWI 3 (shutdown)
callbacks.shutdown = _romTestCallback;
callbacks.shutdown = _headlessCallback;
core->addCoreCallbacks(core, &callbacks);
} else {
// Custom SWI hooks
_armSwi16 = ((struct GBA*) core->board)->cpu->irqh.swi16;
((struct GBA*) core->board)->cpu->irqh.swi16 = _romTestSwi16;
((struct GBA*) core->board)->cpu->irqh.swi16 = _headlessSwi16;
_armSwi32 = ((struct GBA*) core->board)->cpu->irqh.swi32;
((struct GBA*) core->board)->cpu->irqh.swi32 = _romTestSwi32;
((struct GBA*) core->board)->cpu->irqh.swi32 = _headlessSwi32;
}
break;
#endif
#ifdef M_CORE_GB
case mPLATFORM_GB:
callbacks.shutdown = _romTestCallback;
callbacks.shutdown = _headlessCallback;
core->addCoreCallbacks(core, &callbacks);
break;
#endif
@ -166,6 +191,31 @@ int main(int argc, char * argv[]) {
savestate->close(savestate);
}
#ifdef ENABLE_SCRIPTING
struct mScriptContext scriptContext;
if (StringListSize(&headlessOpts.scripts)) {
mScriptContextInit(&scriptContext);
mScriptContextAttachStdlib(&scriptContext);
mScriptContextAttachImage(&scriptContext);
mScriptContextAttachLogger(&scriptContext, NULL);
mScriptContextAttachSocket(&scriptContext);
#ifdef USE_JSON_C
mScriptContextAttachStorage(&scriptContext);
#endif
mScriptContextRegisterEngines(&scriptContext);
mScriptContextAttachCore(&scriptContext, core);
for (i = 0; i < StringListSize(&headlessOpts.scripts); ++i) {
if (!mScriptContextLoadFile(&scriptContext, *StringListGetPointer(&headlessOpts.scripts, i))) {
mLOG(STATUS, ERROR, "Failed to load script \"%s\"", *StringListGetPointer(&headlessOpts.scripts, i));
goto scriptsError;
}
}
}
#endif
#ifdef ENABLE_DEBUGGERS
if (hasDebugger) {
do {
@ -176,19 +226,25 @@ int main(int argc, char * argv[]) {
do {
core->runLoop(core);
} while (!_dispatchExiting);
cleanExit = true;
scriptsError:
core->unloadROM(core);
#ifdef ENABLE_SCRIPTING
if (StringListSize(&headlessOpts.scripts)) {
mScriptContextDeinit(&scriptContext);
}
#endif
#ifdef ENABLE_DEBUGGERS
if (hasDebugger) {
core->detachDebugger(core);
mDebuggerDeinit(&debugger);
}
#endif
cleanExit = true;
loadError:
mArgumentsDeinit(&args);
mStandardLoggerDeinit(&_logger);
mCoreConfigDeinit(&core->config);
core->deinit(core);
@ -196,15 +252,22 @@ loadError:
free(_returnCodeRegister);
}
return cleanExit ? _exitCode : 1;
argsExit:
for (i = 0; i < StringListSize(&headlessOpts.scripts); ++i) {
free(*StringListGetPointer(&headlessOpts.scripts, i));
}
StringListDeinit(&headlessOpts.scripts);
mArgumentsDeinit(&args);
return cleanExit ? _exitCode : uncleanExit;
}
static void _romTestShutdown(int signal) {
static void _headlessShutdown(int signal) {
UNUSED(signal);
_dispatchExiting = true;
}
static bool _romTestCheckResiger(void) {
static bool _headlessCheckResiger(void) {
if (!_returnCodeRegister) {
return true;
}
@ -250,7 +313,7 @@ static bool _romTestCheckResiger(void) {
return true;
}
static void _romTestCallback(void* context) {
static void _headlessCallback(void* context) {
UNUSED(context);
if (_returnCodeRegister) {
core->readRegister(core, _returnCodeRegister, &_exitCode);
@ -259,7 +322,7 @@ static void _romTestCallback(void* context) {
}
#ifdef M_CORE_GBA
static void _romTestSwi16(struct ARMCore* cpu, int immediate) {
static void _headlessSwi16(struct ARMCore* cpu, int immediate) {
if (immediate == _exitSwiImmediate) {
if (_returnCodeRegister) {
core->readRegister(core, _returnCodeRegister, &_exitCode);
@ -270,7 +333,7 @@ static void _romTestSwi16(struct ARMCore* cpu, int immediate) {
_armSwi16(cpu, immediate);
}
static void _romTestSwi32(struct ARMCore* cpu, int immediate) {
static void _headlessSwi32(struct ARMCore* cpu, int immediate) {
if (immediate == _exitSwiImmediate) {
if (_returnCodeRegister) {
core->readRegister(core, _returnCodeRegister, &_exitCode);
@ -282,8 +345,8 @@ static void _romTestSwi32(struct ARMCore* cpu, int immediate) {
}
#endif
static bool _parseRomTestOpts(struct mSubParser* parser, int option, const char* arg) {
struct RomTestOpts* opts = parser->opts;
static bool _parseHeadlessOpts(struct mSubParser* parser, int option, const char* arg) {
struct HeadlessOpts* opts = parser->opts;
errno = 0;
switch (option) {
case 'S':
@ -296,6 +359,15 @@ static bool _parseRomTestOpts(struct mSubParser* parser, int option, const char*
}
}
static bool _parseLongHeadlessOpts(struct mSubParser* parser, const char* option, const char* arg) {
struct HeadlessOpts* opts = parser->opts;
if (strcmp(option, "script") == 0) {
*StringListAppend(&opts->scripts) = strdup(arg);
return true;
}
return false;
}
static bool _parseSwi(const char* swiStr, int* oSwi) {
char* parseEnd;
long swi = strtol(swiStr, &parseEnd, 0);

View File

@ -261,6 +261,7 @@ if(ENABLE_DEBUGGERS)
DebuggerController.cpp
DebuggerConsole.cpp
DebuggerConsoleController.cpp
MemoryAccessLogController.cpp
MemoryAccessLogView.cpp)
endif()
@ -517,7 +518,7 @@ if(APPLE)
set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R "${CROSS_ROOT}")
endif()
if($ENV{CODESIGN_IDENTITY})
set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -s "$ENV{CODESIGN_IDENTITY}" -E "${PROJECT_SOURCE_DIR}/res/entitlements.xml")
set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -s "$ENV{CODESIGN_IDENTITY}" -E "${PROJECT_SOURCE_DIR}/res/entitlements.plist")
endif()
install(CODE "execute_process(COMMAND \"${PROJECT_SOURCE_DIR}/tools/deploy-mac.py\" -v ${DEPLOY_OPTIONS} \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${APPDIR}/${PROJECT_NAME}.app\")")
endif()
@ -536,17 +537,7 @@ elseif(WIN32)
endif()
endif()
if(DISTBUILD AND NOT APPLE)
if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND "${OBJCOPY}" --only-keep-debug "$<TARGET_FILE:${BINARY_NAME}-qt>" "$<TARGET_FILE:${BINARY_NAME}-qt>.debug")
add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND "${STRIP}" "$<TARGET_FILE:${BINARY_NAME}-qt>")
add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND "${OBJCOPY}" --add-gnu-debuglink "$<TARGET_FILE:${BINARY_NAME}-qt>.debug" "$<TARGET_FILE:${BINARY_NAME}-qt>")
install(FILES "$<TARGET_FILE:${BINARY_NAME}-qt>.debug" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${BINARY_NAME}-qt-dbg)
elseif(BUILD_STATIC AND (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel"))
add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND "${STRIP}" "$<TARGET_FILE:${BINARY_NAME}-qt>")
endif()
endif()
debug_strip(${BINARY_NAME}-qt)
install(TARGETS ${BINARY_NAME}-qt
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${BINARY_NAME}-qt
BUNDLE DESTINATION ${APPDIR} COMPONENT ${BINARY_NAME}-qt)

View File

@ -158,8 +158,7 @@ ConfigController::ConfigController(QObject* parent)
" Can be passed multiple times for multiple cards\n"
" --mb FILE Boot a multiboot image with FILE inserted into the ROM slot"
#ifdef ENABLE_SCRIPTING
"\n --script FILE Script file to load on start\n"
" Can be passed multiple times\n"
"\n --script FILE Run a script on start. Can be passed multiple times\n"
#endif
;
@ -197,6 +196,14 @@ ConfigController::ConfigController(QObject* parent)
m_subparsers[1].extraOptions = nullptr;
m_subparsers[1].longOptions = s_frontendOptions;
m_subparsers[1].opts = this;
m_subparsers[1].handleExtraArg = [](struct mSubParser* parser, const char* arg) {
ConfigController* self = static_cast<ConfigController*>(parser->opts);
if (self->m_fnames.count() >= MAX_GBAS) {
return false;
}
self->m_fnames.append(QString::fromUtf8(arg));
return true;
};
}
ConfigController::~ConfigController() {

View File

@ -102,6 +102,7 @@ public:
const mArguments* args() const { return &m_args; }
const mGraphicsOpts* graphicsOpts() const { return &m_graphicsOpts; }
QStringList fileNames() const { return m_fnames; }
void usage(const char* arg0) const;
static const QString& configDir();
@ -129,6 +130,7 @@ private:
mArguments m_args{};
mGraphicsOpts m_graphicsOpts{};
std::array<mSubParser, 2> m_subparsers;
QStringList m_fnames;
bool m_parsed = false;
QHash<QString, QVariant> m_argvOptions;

View File

@ -8,6 +8,7 @@
#include "ConfigController.h"
#include "InputController.h"
#include "LogController.h"
#include "MemoryAccessLogController.h"
#include "MultiplayerController.h"
#include "Override.h"
@ -459,6 +460,15 @@ void CoreController::setLogger(LogController* logger) {
connect(this, &CoreController::logPosted, m_log, &LogController::postLog);
}
#ifdef ENABLE_DEBUGGERS
std::weak_ptr<MemoryAccessLogController> CoreController::memoryAccessLogController() {
if (!m_malController) {
m_malController = std::make_shared<MemoryAccessLogController>(this);
}
return m_malController;
}
#endif
void CoreController::start() {
QSize size(screenDimensions());
m_activeBuffer.resize(size.width() * size.height() * sizeof(mColor));
@ -479,6 +489,10 @@ void CoreController::start() {
void CoreController::stop() {
setSync(false);
#ifdef ENABLE_DEBUGGERS
if (m_malController) {
m_malController->stop();
}
detachDebugger();
#endif
setPaused(false);

View File

@ -40,6 +40,7 @@ namespace QGBA {
class ConfigController;
class InputController;
class LogController;
class MemoryAccessLogController;
class MultiplayerController;
class Override;
@ -113,6 +114,8 @@ public:
void detachDebugger();
void attachDebuggerModule(mDebuggerModule*, bool interrupt = true);
void detachDebuggerModule(mDebuggerModule*);
std::weak_ptr<MemoryAccessLogController> memoryAccessLogController();
#endif
void setMultiplayerController(MultiplayerController*);
@ -326,6 +329,10 @@ private:
GBASIODolphin m_dolphin;
#endif
#ifdef ENABLE_DEBUGGERS
std::shared_ptr<MemoryAccessLogController> m_malController;
#endif
mVideoLogContext* m_vl = nullptr;
VFile* m_vlVf = nullptr;

View File

@ -209,7 +209,7 @@ void DisplayQt::deinit(struct VideoBackend*) {
void DisplayQt::setLayerDimensions(struct VideoBackend* v, enum VideoLayer layer, const struct mRectangle* dims) {
DisplayQt* self = static_cast<DisplayQt*>(v->user);
if (layer > self->m_layerDims.size()) {
if (layer >= self->m_layerDims.size()) {
return;
}
self->m_layerDims[layer] = QRect(dims->x, dims->y, dims->width, dims->height);
@ -217,7 +217,7 @@ void DisplayQt::setLayerDimensions(struct VideoBackend* v, enum VideoLayer layer
void DisplayQt::layerDimensions(const struct VideoBackend* v, enum VideoLayer layer, struct mRectangle* dims) {
DisplayQt* self = static_cast<DisplayQt*>(v->user);
if (layer > self->m_layerDims.size()) {
if (layer >= self->m_layerDims.size()) {
return;
}
QRect rect = self->m_layerDims[layer];
@ -238,7 +238,7 @@ void DisplayQt::contextResized(struct VideoBackend*, unsigned, unsigned, unsigne
void DisplayQt::setImageSize(struct VideoBackend* v, enum VideoLayer layer, int w, int h) {
DisplayQt* self = static_cast<DisplayQt*>(v->user);
if (layer > self->m_layers.size()) {
if (layer >= self->m_layers.size()) {
return;
}
self->m_layers[layer] = QImage(w, h, QImage::Format_ARGB32);
@ -246,7 +246,7 @@ void DisplayQt::setImageSize(struct VideoBackend* v, enum VideoLayer layer, int
void DisplayQt::imageSize(struct VideoBackend* v, enum VideoLayer layer, int* w, int* h) {
DisplayQt* self = static_cast<DisplayQt*>(v->user);
if (layer > self->m_layers.size()) {
if (layer >= self->m_layers.size()) {
return;
}
*w = self->m_layers[layer].width();
@ -255,7 +255,7 @@ void DisplayQt::imageSize(struct VideoBackend* v, enum VideoLayer layer, int* w,
void DisplayQt::setImage(struct VideoBackend* v, enum VideoLayer layer, const void* frame) {
DisplayQt* self = static_cast<DisplayQt*>(v->user);
if (layer > self->m_layers.size()) {
if (layer >= self->m_layers.size()) {
return;
}
QImage& image = self->m_layers[layer];

View File

@ -397,6 +397,26 @@ void GBAApp::finishJob(qint64 jobId) {
m_workerJobCallbacks.remove(jobId);
}
void GBAApp::initMultiplayer() {
QStringList fnames = m_configController->fileNames();
if (fnames.count() < 2) {
return;
}
Window* w = m_windows[0];
for (const auto& fname : fnames) {
if (!w) {
w = newWindow();
}
if (!w) {
break;
}
CoreController* core = m_manager.loadGame(fname);
w->setController(core, fname);
w = nullptr;
}
}
GBAApp::WorkerJob::WorkerJob(qint64 id, std::function<void ()>&& job, GBAApp* owner)
: m_id(id)
, m_job(std::move(job))

View File

@ -82,6 +82,8 @@ public:
ApplicationUpdater* updater() { return &m_updater; }
QString invokeOnExit() { return m_invokeOnExit; }
void initMultiplayer();
public slots:
void restartForUpdate();
Window* newWindow();

View File

@ -0,0 +1,118 @@
/* Copyright (c) 2013-2025 Jeffrey Pfau
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "MemoryAccessLogController.h"
#include "GBAApp.h"
#include "LogController.h"
#include "utils.h"
#include "VFileDevice.h"
using namespace QGBA;
MemoryAccessLogController::MemoryAccessLogController(CoreController* controller, QObject* parent)
: QObject(parent)
, m_controller(controller)
{
mCore* core = m_controller->thread()->core;
const mCoreMemoryBlock* info;
size_t nBlocks = core->listMemoryBlocks(core, &info);
for (size_t i = 0; i < nBlocks; ++i) {
if (!(info[i].flags & mCORE_MEMORY_MAPPED)) {
continue;
}
m_regions.append({
QString::fromUtf8(info[i].longName),
QString::fromUtf8(info[i].internalName)
});
}
}
MemoryAccessLogController::~MemoryAccessLogController() {
stop();
}
bool MemoryAccessLogController::canExport() const {
return m_regionMapping.contains("cart0");
}
void MemoryAccessLogController::updateRegion(const QString& internalName, bool checked) {
if (checked) {
m_watchedRegions += internalName;
} else {
m_watchedRegions -= internalName;
}
if (!m_active) {
return;
}
m_regionMapping[internalName] = mDebuggerAccessLoggerWatchMemoryBlockName(&m_logger, internalName.toUtf8().constData(), activeFlags());
emit regionMappingChanged(internalName, checked);
}
void MemoryAccessLogController::setFile(const QString& path) {
m_path = path;
}
void MemoryAccessLogController::start(bool loadExisting, bool logExtra) {
int flags = O_CREAT | O_RDWR;
if (!loadExisting) {
flags |= O_TRUNC;
}
VFile* vf = VFileDevice::open(m_path, flags);
if (!vf) {
LOG(QT, ERROR) << tr("Failed to open memory log file");
return;
}
m_logExtra = logExtra;
mDebuggerAccessLoggerInit(&m_logger);
CoreController::Interrupter interrupter(m_controller);
m_controller->attachDebuggerModule(&m_logger.d);
if (!mDebuggerAccessLoggerOpen(&m_logger, vf, flags)) {
mDebuggerAccessLoggerDeinit(&m_logger);
LOG(QT, ERROR) << tr("Failed to open memory log file");
return;
}
m_active = true;
emit loggingChanged(true);
for (const auto& region : m_watchedRegions) {
m_regionMapping[region] = mDebuggerAccessLoggerWatchMemoryBlockName(&m_logger, region.toUtf8().constData(), activeFlags());
}
interrupter.resume();
}
void MemoryAccessLogController::stop() {
if (!m_active) {
return;
}
CoreController::Interrupter interrupter(m_controller);
m_controller->detachDebuggerModule(&m_logger.d);
mDebuggerAccessLoggerDeinit(&m_logger);
emit loggingChanged(false);
interrupter.resume();
m_active = false;
}
mDebuggerAccessLogRegionFlags MemoryAccessLogController::activeFlags() const {
mDebuggerAccessLogRegionFlags loggerFlags = 0;
if (m_logExtra) {
loggerFlags = mDebuggerAccessLogRegionFlagsFillHasExBlock(loggerFlags);
}
return loggerFlags;
}
void MemoryAccessLogController::exportFile(const QString& filename) {
VFile* vf = VFileDevice::open(filename, O_CREAT | O_TRUNC | O_WRONLY);
if (!vf) {
// log error
return;
}
CoreController::Interrupter interrupter(m_controller);
mDebuggerAccessLoggerCreateShadowFile(&m_logger, m_regionMapping[QString("cart0")], vf, 0);
vf->close(vf);
}

View File

@ -0,0 +1,66 @@
/* Copyright (c) 2013-2025 Jeffrey Pfau
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#pragma once
#include <QSet>
#include <QVector>
#include <memory>
#include "CoreController.h"
#include <mgba/internal/debugger/access-logger.h>
namespace QGBA {
class MemoryAccessLogController : public QObject {
Q_OBJECT
public:
struct Region {
QString longName;
QString internalName;
};
MemoryAccessLogController(CoreController* controller, QObject* parent = nullptr);
~MemoryAccessLogController();
QVector<Region> listRegions() const { return m_regions; }
QSet<QString> watchedRegions() const { return m_watchedRegions; }
bool canExport() const;
mPlatform platform() const { return m_controller->platform(); }
QString file() const { return m_path; }
bool active() const { return m_active; }
public slots:
void updateRegion(const QString& internalName, bool enable);
void setFile(const QString& path);
void start(bool loadExisting, bool logExtra);
void stop();
void exportFile(const QString& filename);
signals:
void loggingChanged(bool active);
void regionMappingChanged(const QString& internalName, bool active);
private:
bool m_logExtra = false;
QString m_path;
CoreController* m_controller;
QSet<QString> m_watchedRegions;
QHash<QString, int> m_regionMapping;
QVector<Region> m_regions;
struct mDebuggerAccessLogger m_logger{};
bool m_active = false;
mDebuggerAccessLogRegionFlags activeFlags() const;
};
}

View File

@ -9,104 +9,66 @@
#include "GBAApp.h"
#include "LogController.h"
#include "MemoryAccessLogController.h"
#include "utils.h"
#include "VFileDevice.h"
using namespace QGBA;
MemoryAccessLogView::MemoryAccessLogView(std::shared_ptr<CoreController> controller, QWidget* parent)
MemoryAccessLogView::MemoryAccessLogView(std::weak_ptr<MemoryAccessLogController> controller, QWidget* parent)
: QWidget(parent)
, m_controller(std::move(controller))
, m_controller(controller)
{
m_ui.setupUi(this);
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
connect(m_ui.browse, &QAbstractButton::clicked, this, &MemoryAccessLogView::selectFile);
connect(m_ui.exportButton, &QAbstractButton::clicked, this, &MemoryAccessLogView::exportFile);
connect(this, &MemoryAccessLogView::loggingChanged, m_ui.start, &QWidget::setDisabled);
connect(this, &MemoryAccessLogView::loggingChanged, m_ui.stop, &QWidget::setEnabled);
connect(this, &MemoryAccessLogView::loggingChanged, m_ui.filename, &QWidget::setDisabled);
connect(this, &MemoryAccessLogView::loggingChanged, m_ui.browse, &QWidget::setDisabled);
connect(controllerPtr.get(), &MemoryAccessLogController::regionMappingChanged, this, &MemoryAccessLogView::updateRegion);
connect(controllerPtr.get(), &MemoryAccessLogController::loggingChanged, this, &MemoryAccessLogView::handleStartStop);
mCore* core = m_controller->thread()->core;
const mCoreMemoryBlock* info;
size_t nBlocks = core->listMemoryBlocks(core, &info);
bool active = controllerPtr->active();
auto watchedRegions = controllerPtr->watchedRegions();
QVBoxLayout* regionBox = static_cast<QVBoxLayout*>(m_ui.regionBox->layout());
for (size_t i = 0; i < nBlocks; ++i) {
if (!(info[i].flags & mCORE_MEMORY_MAPPED)) {
continue;
}
QCheckBox* region = new QCheckBox(QString::fromUtf8(info[i].longName));
for (const auto& info : controllerPtr->listRegions()) {
QCheckBox* region = new QCheckBox(info.longName);
regionBox->addWidget(region);
QString name(QString::fromUtf8(info[i].internalName));
QString name(info.internalName);
m_regionBoxes[name] = region;
connect(region, &QAbstractButton::toggled, this, [this, name](bool checked) {
updateRegion(name, checked);
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
if (!controllerPtr) {
return;
}
controllerPtr->updateRegion(name, checked);
});
}
handleStartStop(active);
}
MemoryAccessLogView::~MemoryAccessLogView() {
stop();
}
void MemoryAccessLogView::updateRegion(const QString& internalName, bool checked) {
if (checked) {
m_watchedRegions += internalName;
} else {
m_watchedRegions -= internalName;
}
if (!m_active) {
return;
}
void MemoryAccessLogView::updateRegion(const QString& internalName, bool) {
m_regionBoxes[internalName]->setEnabled(false);
m_regionMapping[internalName] = mDebuggerAccessLoggerWatchMemoryBlockName(&m_logger, internalName.toUtf8().constData(), activeFlags());
}
void MemoryAccessLogView::start() {
int flags = O_CREAT | O_RDWR;
if (!m_ui.loadExisting->isChecked()) {
flags |= O_TRUNC;
}
VFile* vf = VFileDevice::open(m_ui.filename->text(), flags);
if (!vf) {
// log error
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
if (!controllerPtr) {
return;
}
mDebuggerAccessLoggerInit(&m_logger);
CoreController::Interrupter interrupter(m_controller);
m_controller->attachDebuggerModule(&m_logger.d);
if (!mDebuggerAccessLoggerOpen(&m_logger, vf, flags)) {
mDebuggerAccessLoggerDeinit(&m_logger);
LOG(QT, ERROR) << tr("Failed to open memory log file");
return;
}
m_active = true;
emit loggingChanged(true);
for (const auto& region : m_watchedRegions) {
m_regionBoxes[region]->setEnabled(false);
m_regionMapping[region] = mDebuggerAccessLoggerWatchMemoryBlockName(&m_logger, region.toUtf8().constData(), activeFlags());
}
interrupter.resume();
if (m_watchedRegions.contains(QString("cart0"))) {
m_ui.exportButton->setEnabled(true);
}
controllerPtr->setFile(m_ui.filename->text());
controllerPtr->start(m_ui.loadExisting->isChecked(), m_ui.logExtra->isChecked());
}
void MemoryAccessLogView::stop() {
if (!m_active) {
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
if (!controllerPtr) {
return;
}
CoreController::Interrupter interrupter(m_controller);
m_controller->detachDebuggerModule(&m_logger.d);
mDebuggerAccessLoggerDeinit(&m_logger);
emit loggingChanged(false);
interrupter.resume();
for (const auto& region : m_watchedRegions) {
controllerPtr->stop();
for (const auto& region : controllerPtr->watchedRegions()) {
m_regionBoxes[region]->setEnabled(true);
}
m_ui.exportButton->setEnabled(false);
@ -119,30 +81,41 @@ void MemoryAccessLogView::selectFile() {
}
}
mDebuggerAccessLogRegionFlags MemoryAccessLogView::activeFlags() const {
mDebuggerAccessLogRegionFlags loggerFlags = 0;
if (m_ui.logExtra->isChecked()) {
loggerFlags = mDebuggerAccessLogRegionFlagsFillHasExBlock(loggerFlags);
}
return loggerFlags;
}
void MemoryAccessLogView::exportFile() {
if (!m_regionMapping.contains("cart0")) {
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
if (!controllerPtr) {
return;
}
if (!controllerPtr->canExport()) {
return;
}
QString filename = GBAApp::app()->getSaveFileName(this, tr("Select access log file"), romFilters(false, m_controller->platform(), true));
QString filename = GBAApp::app()->getSaveFileName(this, tr("Select access log file"), romFilters(false, controllerPtr->platform(), true));
if (filename.isEmpty()) {
return;
}
VFile* vf = VFileDevice::open(filename, O_CREAT | O_TRUNC | O_WRONLY);
if (!vf) {
// log error
controllerPtr->exportFile(filename);
}
void MemoryAccessLogView::handleStartStop(bool start) {
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
if (!controllerPtr) {
return;
}
m_ui.filename->setText(controllerPtr->file());
CoreController::Interrupter interrupter(m_controller);
mDebuggerAccessLoggerCreateShadowFile(&m_logger, m_regionMapping[QString("cart0")], vf, 0);
vf->close(vf);
auto watchedRegions = controllerPtr->watchedRegions();
for (const auto& region : watchedRegions) {
m_regionBoxes[region]->setDisabled(start);
m_regionBoxes[region]->setChecked(true);
}
if (watchedRegions.contains(QString("cart0"))) {
m_ui.exportButton->setEnabled(start);
}
m_ui.start->setDisabled(start);
m_ui.stop->setEnabled(start);
m_ui.filename->setDisabled(start);
m_ui.browse->setDisabled(start);
}

View File

@ -18,12 +18,14 @@
namespace QGBA {
class MemoryAccessLogController;
class MemoryAccessLogView : public QWidget {
Q_OBJECT
public:
MemoryAccessLogView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr);
~MemoryAccessLogView();
MemoryAccessLogView(std::weak_ptr<MemoryAccessLogController> controller, QWidget* parent = nullptr);
~MemoryAccessLogView() = default;
private slots:
void updateRegion(const QString& internalName, bool enable);
@ -34,20 +36,13 @@ private slots:
void exportFile();
signals:
void loggingChanged(bool active);
void handleStartStop(bool start);
private:
Ui::MemoryAccessLogView m_ui;
std::shared_ptr<CoreController> m_controller;
QSet<QString> m_watchedRegions;
std::weak_ptr<MemoryAccessLogController> m_controller;
QHash<QString, QCheckBox*> m_regionBoxes;
QHash<QString, int> m_regionMapping;
struct mDebuggerAccessLogger m_logger{};
bool m_active = false;
mDebuggerAccessLogRegionFlags activeFlags() const;
};
}

View File

@ -364,7 +364,7 @@ SettingsView::SettingsView(ConfigController* controller, InputController* inputC
continue;
}
QLocale locale(name.remove(QString("%0-").arg(binaryName)).remove(".qm"));
if (locale.language() == QLocale::English) {
if (locale.language() == QLocale::English || locale.language() == QLocale::C) {
continue;
}
QString endonym = locale.nativeLanguageName();

View File

@ -1767,7 +1767,12 @@ void Window::setupMenu(QMenuBar* menubar) {
addGameAction(tr("View &I/O registers..."), "ioViewer", openControllerTView<IOViewer>(), "stateViews");
#ifdef ENABLE_DEBUGGERS
addGameAction(tr("Log memory &accesses..."), "memoryAccessView", openControllerTView<MemoryAccessLogView>(), "tools");
addGameAction(tr("Log memory &accesses..."), "memoryAccessView", [this]() {
std::weak_ptr<MemoryAccessLogController> controller = m_controller->memoryAccessLogController();
MemoryAccessLogView* view = new MemoryAccessLogView(controller);
connect(m_controller.get(), &CoreController::stopping, view, &QWidget::close);
openView(view);
}, "tools");
#endif
#if defined(USE_FFMPEG) && defined(M_CORE_GBA)

View File

@ -131,10 +131,9 @@ int main(int argc, char* argv[]) {
}
Window* w = application.newWindow();
w->loadConfig();
w->argumentsPassed();
w->show();
application.initMultiplayer();
int ret = application.exec();
if (ret != 0) {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -387,48 +387,48 @@ Download-Größe: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>r%1-%2 %3 zurücksetzen</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>Zurückspulen ist derzeit nicht aktiviert</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Spiel zurücksetzen?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>Die meisten Spiele müssen zurückgesetzt werden, um einen neuen Spielstand zu laden. Möchtest Du das Spiel jetzt zurücksetzen?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Fehler beim Öffnen der Speicherdatei: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Fehler beim Öffnen der Spieldatei: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Das GamePak kann nur auf unterstützten Plattformen herausgezogen werden!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<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="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen</translation>
</message>
@ -3403,6 +3403,15 @@ Download-Größe: %3</translation>
<translation>Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Download-Größe: %3</translation>
<translation type="unfinished">Stopp</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6187,7 +6191,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>ROM ersetzen...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>Lesegerät-Kartenbild in Rohdaten umwandeln&#xa0;</translation>
</message>
@ -6498,7 +6502,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Leeren</translation>
</message>
@ -6714,77 +6718,77 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>&amp;I/O-Register betrachten...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Video-Protokoll aufzeichnen...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Aufzeichnen des Video-Protokolls beenden</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Vollbildmodus beenden</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>GameShark-Taste (gehalten)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Autofeuer</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Autofeuer A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Autofeuer B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Autofeuer L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Autofeuer R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Autofeuer Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Autofeuer Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Autofeuer nach oben</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Autofeuer rechts</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Autofeuer nach unten</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Autofeuer links</translation>
</message>

View File

@ -381,48 +381,48 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation>
</message>
@ -3397,6 +3397,15 @@ Download size: %3</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3445,18 +3454,13 @@ Download size: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6230,7 +6234,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation type="unfinished"></translation>
</message>
@ -6701,82 +6705,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation type="unfinished"></translation>
</message>

View File

@ -387,48 +387,48 @@ Tamaño de descarga: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>Reiniciar r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>Rebobinado desactivado actualmente</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>¿Reiniciar el juego?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>La mayoría de juegos requieren reiniciar para cargar la nueva partida guardada. ¿Quieres reiniciar ahora?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<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="866"/>
<location filename="../CoreController.cpp" line="880"/>
<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="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>¡No se puede quitar el cartucho en esta plataforma!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<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="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Error al escribir al archivo de captura: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Tamaño de descarga: %3</translation>
<translation>Gráficos de red portátiles (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished">Error al abrir el archivo de registro de memoria</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Tamaño de descarga: %3</translation>
<translation>Detener</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation>Error al abrir el archivo de registro de memoria</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation>Seleccionar archivo de registro de acceso</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation>Archivos de registro de memoria (*.mal)</translation>
</message>
@ -6224,7 +6228,7 @@ Si está configurado como OpenGL y estás viendo esto, tu tarjeta gráfica o con
<translation>Sensores del cartucho...</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Limpiar</translation>
</message>
@ -6285,7 +6289,7 @@ Si está configurado como OpenGL y estás viendo esto, tu tarjeta gráfica o con
<translation>Cargar partida guardada temporal...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>Convertir imagen de tarjeta e-Reader a archivo en bruto...</translation>
</message>
@ -6716,77 +6720,77 @@ Si está configurado como OpenGL y estás viendo esto, tu tarjeta gráfica o con
<translation>Registrar &amp;accesoa la memoria</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Grabar registro de depuración de vídeo...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Detener registro de depuración de vídeo</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Salir de pantalla completa</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Botón GameShark (mantener)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Disparo automático</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Disparo automático A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Disparo automático B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Disparo automático L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Disparo automático R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Disparo automático Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Disparo automático Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Disparo automático arriba</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Disparo automático derecha</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Disparo automático abajo</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Disparo automático izquierda</translation>
</message>

File diff suppressed because it is too large Load Diff

View File

@ -388,48 +388,48 @@ Taille du téléchargement&#xa0;:&#xa0;%3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>Réinitialiser r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>Le rembobinage n&apos;est pas actuellement activé</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Réinitialiser le jeu ?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>La plupart des jeux nécessitent une réinitialisation pour charger la nouvelle sauvegarde. Voulez-vous réinitialiser maintenant ?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Échec de l&apos;ouverture du fichier de sauvegarde : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Échec de l&apos;ouverture du fichier de jeu : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Échec de l&apos;ouverture de l&apos;instantané pour lire : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Échec de l&apos;ouverture de l&apos;instantané pour écrire : %1</translation>
</message>
@ -3421,6 +3421,15 @@ Taille du téléchargement&#xa0;:&#xa0;%3</translation>
<translation>Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3469,18 +3478,13 @@ Taille du téléchargement&#xa0;:&#xa0;%3</translation>
<translation type="unfinished">Arrêter</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6241,7 +6245,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation type="unfinished"></translation>
</message>
@ -6728,82 +6732,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Voir les registres d&apos;&amp;E/S...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Enregistrer le journal vidéo de débogage...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Arrêter le journal vidéo de débogage</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Quitter le plein écran</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Bouton GameShark (maintenir)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Tir automatique</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Tir automatique A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Tir automatique B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Tir automatique L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Tir automatique R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Tir automatique Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Tir automatique Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Tir automatique Up</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Tir automatique Right</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Tir automatique Down</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Tir automatique Gauche</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Vider</translation>
</message>

View File

@ -388,48 +388,48 @@ Letöltendő adat: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>Visszatekerés jelenleg nem engedélyezett</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Nem sikerült a mentésfájl megnyitása: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Nem sikerült a játékfájl megnyitása: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished">A játékkazettát nem lehet kirántani ismeretlen platformon!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished">A pillanatkép fájljának olvasásra való megnyitása sikertelen: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished">A pillanatkép fájljának írásra való megnyitása sikertelen: %1</translation>
</message>
@ -3404,6 +3404,15 @@ Letöltendő adat: %3</translation>
<translation type="unfinished">Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3452,18 +3461,13 @@ Letöltendő adat: %3</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6235,7 +6239,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation type="unfinished"></translation>
</message>
@ -6706,82 +6710,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation type="unfinished">Napló törlése</translation>
</message>

View File

@ -387,48 +387,48 @@ Dimensione del download: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>Reset r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>La funzione &apos;riavvolgi&apos; non è attualmente abilitata</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Riavviare il gioco?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>La maggior parte dei giochi richiede un riavvio per caricare il nuovo salvataggio. Vuoi riavviare ora?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Impossibile aprire il file di salvataggio: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Impossibile aprire il file di gioco: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Non riesco a strappare il pacchetto in una piattaforma inaspettata!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Impossibile aprire il file snapshot per la lettura: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Impossibile aprire il file snapshot per la scrittura: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Dimensione del download: %3</translation>
<translation>Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished">Impossibile aprire il file di registro della memoria</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Dimensione del download: %3</translation>
<translation>Ferma</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation>Impossibile aprire il file di registro della memoria</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation>Seleziona il file di registro di accesso</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation>Registri degli accessi alla memoria (*.mal)</translation>
</message>
@ -6187,7 +6191,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Scansiona e-Reader dotcode...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>Converti immagini carte e-Reader in raw...</translation>
</message>
@ -6709,82 +6713,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Registra memoria &amp;accessi...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Salva registro video di debug...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Ferma registro video di debug</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Esci da Schermo Intero</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Pulsante GameShark (tieni premuto)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Pulsanti Autofire</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Autofire A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Autofire B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Autofire L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Autofire R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Autofire Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Autofire Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Autofire Su</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>AAutofire Destra</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Autofire Giù</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Autofire Sinistra</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Pulisci</translation>
</message>

View File

@ -387,48 +387,48 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Download size: %3</source>
<translation>Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Download size: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6225,7 +6229,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>...</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation></translation>
</message>
@ -6286,7 +6290,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation type="unfinished"></translation>
</message>
@ -6712,77 +6716,77 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>GameSharkボタン()</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation> A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation> B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation> L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation> R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation> Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation> Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation> </translation>
</message>

View File

@ -387,48 +387,48 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>r%1-%2 %3 </translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation> </translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation> ?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation> . ?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation> : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation> : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation> !</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation> : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation> : %1</translation>
</message>
@ -3403,6 +3403,15 @@ Download size: %3</source>
<translation> (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"> </translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Download size: %3</source>
<translation></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation> </translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation> </translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation> (*.mal)</translation>
</message>
@ -6215,7 +6219,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>e- ...</translation>
</message>
@ -6707,82 +6711,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation> ...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation> ...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation> ()</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation> A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation> B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation> L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation> R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation> </translation>
</message>

View File

@ -381,48 +381,48 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Gagal membuka fail tersimpan: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Gagal membuka fail permainan: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished">Gagal membuka fail snapshot untuk baca: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished">Gagal membuka fail snapshot untuk menulis: %1</translation>
</message>
@ -3397,6 +3397,15 @@ Download size: %3</source>
<translation>Grafik Rangkaian Mudah Alih (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3445,18 +3454,13 @@ Download size: %3</source>
<translation type="unfinished">Henti</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6230,7 +6234,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation type="unfinished"></translation>
</message>
@ -6701,82 +6705,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Rakam log video nyahpepijat...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Henti log video nyahpepijat</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Keluar skrinpenuh</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Butang GameShark (pegang)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Kosongkan</translation>
</message>

View File

@ -385,48 +385,48 @@ Nedlastningsstørrelse: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Vil du starte spillet nytt?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Klarte ikke å åpne spillfil: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation>
</message>
@ -3401,6 +3401,15 @@ Nedlastningsstørrelse: %3</translation>
<translation>Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3449,18 +3458,13 @@ Nedlastningsstørrelse: %3</translation>
<translation type="unfinished">Stopp</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6234,7 +6238,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Skann e-Reader-punktkoder...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation type="unfinished"></translation>
</message>
@ -6705,82 +6709,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation> ut av fullskjerm</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Tøm</translation>
</message>

File diff suppressed because it is too large Load Diff

View File

@ -387,48 +387,48 @@ Rozmiar pobierania: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>Reset r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>Przewijanie nie jest obecnie włączone</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Zresetować grę?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>Większość gier wymaga zresetowania, aby wczytać nowy zapis. Czy chcesz teraz zresetować?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Nie udało się otworzyć pliku zapisu: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Nie udało się otworzyć pliku gry: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Nie można wyciągnąć pack na nieoczekiwanej platformie!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Nie udało się otworzyć pliku snapshot do odczytu: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Nie udało się otworzyć pliku snapshot do zapisu: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Rozmiar pobierania: %3</translation>
<translation>Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished">Błąd odczytu pliku logów pamięci</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Rozmiar pobierania: %3</translation>
<translation type="unfinished">Stop</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation>Błąd odczytu pliku logów pamięci</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6240,7 +6244,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Skanuj kody kropkowe czytnika e-Reader...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>Konwertuj obraz karty czytnika e-Reader na surowy...</translation>
</message>
@ -6711,82 +6715,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Nagraj dziennik wideo debugowania...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Zatrzymaj dziennik wideo debugowania</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Wyłączyć tryb pełnoekranowy</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Przycisk GameShark (przytrzymany)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Turbo</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Turbo A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Turbo B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Turbo L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Turbo R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Turbo Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Turbo Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Turbo Góra</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Turbo Prawo</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Turbo Dół</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Turbo Lewo</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Wyczyść</translation>
</message>

View File

@ -387,48 +387,48 @@ Tamanho do download: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>Resetar r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>O rebobinamento não está ativado atualmente</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Resetar o jogo?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>A maioria dos jogos requerirão um reset pra carregar o novo save. Você quer resetar agora?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Falhou em abrir o arquivo do save: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Falhou em abrir o arquivo do jogo: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Não pode arrancar o pacote numa plataforma inesperada!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Falhou em abrir o arquivo do snapshot pra leitura: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Falhou em abrir o arquivo do snapshot pra gravação: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Tamanho do download: %3</translation>
<translation>Gráficos Portáteis da Rede (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished">Falhou em abrir o arquivo do registro da memória</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Tamanho do download: %3</translation>
<translation>Parar</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation>Falhou em abrir o arquivo do registro da memória</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation>Selecionar o arquivo de registro do acesso</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation>Registros de acesso a memória (*.mal)</translation>
</message>
@ -6224,7 +6228,7 @@ Se ele está definido como OpenGL e você ainda ver isto sua placa gráfica ou d
<translation>Sensores do Game Pak...</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Limpar</translation>
</message>
@ -6285,7 +6289,7 @@ Se ele está definido como OpenGL e você ainda ver isto sua placa gráfica ou d
<translation>Carregar save temporário do jogo...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>Converter a imagem do cartão do e-Reader pro natural...</translation>
</message>
@ -6716,77 +6720,77 @@ Se ele está definido como OpenGL e você ainda ver isto sua placa gráfica ou d
<translation>Registrar os acessos a &amp;memória...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Gravar registro do vídeo de debug...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Parar o registro do vídeo de debug</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Sair da tela cheia</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Botão do GameShark (pressionado)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Auto-disparar</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Auto-disparar A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Auto-disparar B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Auto-disparar L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Auto-disparar R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Auto-disparar Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Auto-disparar Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Auto-disparar Pra Cima</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Auto-disparar Direita</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Auto-disparar Pra Baixo</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Auto-disparar Esquerda</translation>
</message>

View File

@ -387,48 +387,48 @@ Tamanho da descarga: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>Resetar r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>O rebobinamento não está ativado atualmente</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Resetar o jogo?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>A maioria dos jogos requerirão um reset para carregar o novo save. Quer resetar agora?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Falha ao abrir o ficheiro dde gravação: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Falha ao abrir o ficheiro do jogo: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Não pode arrancar o pacote numa plataforma inesperada!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Falha ao abrir o ficheiro do snapshot para leitura: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Falha ao abrir o ficheiro do snapshot para gravação: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Tamanho da descarga: %3</translation>
<translation>Gráficos Portáteis da Rede (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Tamanho da descarga: %3</translation>
<translation type="unfinished">Parar</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6238,7 +6242,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Escanear dotcodes do e-Reader...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>Converter imagem do cartão do e-Reader para natural...</translation>
</message>
@ -6709,82 +6713,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Gravar registo do vídeo de debug...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Parar o registo do vídeo de debug</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Sair do ecrã inteiro</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Botão do GameShark (segurado)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Auto-disparar</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Auto-disparar A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Auto-disparar B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Auto-disparar L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Auto-disparar R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Auto-disparar Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Auto-disparar Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Auto-disparar Para Cima</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Auto-disparar Direita</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Auto-disparar Para Baixo</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Auto-disparar Esquerda</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Limpar</translation>
</message>

View File

@ -387,48 +387,48 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>Сброс r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation>Обратная перемотка выключена</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Перезагрузить игру?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>Большинству игр нужна перезагрузка, чтобы загрузить новое сохранение. Перезагрузить сейчас?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Не удалось открыть файл сохранения: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Не удалось открыть файл игры: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Невозможно пнуть картридж на неожиданной платформе!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Не удалось открыть файл изображения для считывания: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Не удалось открыть файл изображения для записи: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Download size: %3</source>
<translation>Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Download size: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6240,7 +6244,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Сканировать dot-коды e-Reader...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>Конвертировать карту e-Reader в raw...</translation>
</message>
@ -6711,82 +6715,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Запись отладочного видеожурнала...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Закончить запись отладочного видеожурнала</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Выйти из полноэкранного режима</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Кнопка GameShark (удерживается)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Автострельба</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>A (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>B (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>L (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>R (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Start (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Select (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Вверх (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Вправо (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Вниз (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Влево (автострельба)</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Очистить</translation>
</message>

File diff suppressed because it is too large Load Diff

View File

@ -387,48 +387,48 @@ Hämtningsstorlek: %3</translation>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation>Starta om r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Starta om spelet?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>De flesta spel kommer att kräva en omstart för att läsa in ny sparning. Vill du starta om nu?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Misslyckades med att öppna sparad fil: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Misslyckades med att öppna spelfil: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Misslyckades med att öppna ögonblicksfil för läsning: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Misslyckades med att öppna ögonblicksfil för skrivning: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Hämtningsstorlek: %3</translation>
<translation>Portable Network Graphics (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished">Misslyckades med att öppna minnesloggfil</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Hämtningsstorlek: %3</translation>
<translation>Stoppa</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation>Misslyckades med att öppna minnesloggfil</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation>Välj åtkomstloggfil</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation>Minnesåtkomstloggar (*.mal)</translation>
</message>
@ -6238,7 +6242,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Skanna e-Reader-punktkoder...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>Konvertera e-Reader-kortavbilder till raw...</translation>
</message>
@ -6709,82 +6713,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>Logga minneså&amp;tkomster...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Spela in felsökningsvideologg...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Stoppa felsökningsvideologg</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Avsluta helskärm</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>GameShark-knapp (håll)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Autofire</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Autofire A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Autofire B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Autofire L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Autofire R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Autofire Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Autofire Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Autofire upp</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Autofire höger</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Autofire ner</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Autofire vänster</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Töm</translation>
</message>

View File

@ -381,48 +381,48 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation>
</message>
@ -3397,6 +3397,15 @@ Download size: %3</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3445,18 +3454,13 @@ Download size: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6228,7 +6232,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation type="unfinished"></translation>
</message>
@ -6699,82 +6703,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation type="unfinished"></translation>
</message>

View File

@ -387,48 +387,48 @@ Yeni sürüm: %2
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>Oyun sıfırlansım mı?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>Kayıt dosyası ılamadı: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>Oyun dosyası ılamadı: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Beklenmedik bir platformda kartı çıkaramazsın!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Anlık görüntü dosyası okuma için ılamadı: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Anlık görüntü dosyası yazma için ılamadı: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Yeni sürüm: %2
<translation></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Yeni sürüm: %2
<translation type="unfinished">Durdur</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation type="unfinished"></translation>
</message>
@ -6220,7 +6224,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation>e-Okuyucu kart resimlerini rawa dönüştür...</translation>
</message>
@ -6707,82 +6711,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>&amp;I/O kayıtlarını görüntüle</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>Hata ayıklama video günlüğünü kaydet...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation>Hata ayıklama video günlüğünü durdur</translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>Tam ekrandan çık</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>GameShark Butonu (basılı tutun)</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation>Otomatik basma</translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation>Otomatik basma A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation>Otomatik basma B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation>Otomatik basma L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation>Otomatik basma R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation>Otomatik basma Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation>Otomatik basma Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation>Otomatik basma Up</translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation>Otomatik basma Right</translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation>Otomatik basma Down</translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation>Otomatik basma Sol</translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation>Temizle</translation>
</message>

File diff suppressed because it is too large Load Diff

View File

@ -387,48 +387,48 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation> r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Download size: %3</source>
<translation>便 (*.png)</translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Download size: %3</source>
<translation></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation>访</translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation>访*.mal</translation>
</message>
@ -6236,7 +6240,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation> e-Reader ...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation> e-Reader ...</translation>
</message>
@ -6707,82 +6711,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation>访(&amp;a)...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation>...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation>退</translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>GameShark ()</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation> A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation> B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation> L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation> R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation> Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation> Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation></translation>
</message>

View File

@ -387,48 +387,48 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="103"/>
<location filename="../CoreController.cpp" line="104"/>
<source>Reset r%1-%2 %3</source>
<translation> r%1-%2 %3</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="536"/>
<location filename="../CoreController.cpp" line="553"/>
<location filename="../CoreController.cpp" line="550"/>
<location filename="../CoreController.cpp" line="567"/>
<source>Rewinding not currently enabled</source>
<translation></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="592"/>
<location filename="../CoreController.cpp" line="606"/>
<source>Reset the game?</source>
<translation>?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="593"/>
<location filename="../CoreController.cpp" line="607"/>
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
<translation>?</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="808"/>
<location filename="../CoreController.cpp" line="822"/>
<source>Failed to open save file: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="866"/>
<location filename="../CoreController.cpp" line="880"/>
<source>Failed to open game file: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="896"/>
<location filename="../CoreController.cpp" line="910"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1011"/>
<location filename="../CoreController.cpp" line="1025"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="1028"/>
<location filename="../CoreController.cpp" line="1042"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>: %1</translation>
</message>
@ -3403,6 +3403,15 @@ Download size: %3</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogController</name>
<message>
<location filename="../MemoryAccessLogController.cpp" line="66"/>
<location filename="../MemoryAccessLogController.cpp" line="76"/>
<source>Failed to open memory log file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QGBA::MemoryAccessLogView</name>
<message>
@ -3451,18 +3460,13 @@ Download size: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="82"/>
<source>Failed to open memory log file</source>
<translation></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="135"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<location filename="../MemoryAccessLogView.cpp" line="93"/>
<source>Select access log file</source>
<translation></translation>
</message>
<message>
<location filename="../MemoryAccessLogView.cpp" line="116"/>
<location filename="../MemoryAccessLogView.cpp" line="78"/>
<source>Memory access logs (*.mal)</source>
<translation>*.mal</translation>
</message>
@ -4450,7 +4454,7 @@ Download size: %3</source>
<message>
<location filename="../ReportView.ui" line="99"/>
<source>Save</source>
<translation type="unfinished"></translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ReportView.ui" line="113"/>
@ -6246,7 +6250,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation> e-Reader ...</translation>
</message>
<message>
<location filename="../Window.cpp" line="1775"/>
<location filename="../Window.cpp" line="1780"/>
<source>Convert e-Reader card image to raw...</source>
<translation> e-Reader ...</translation>
</message>
@ -6707,82 +6711,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Window.cpp" line="1779"/>
<location filename="../Window.cpp" line="1784"/>
<source>Record debug video log...</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1780"/>
<location filename="../Window.cpp" line="1785"/>
<source>Stop debug video log</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1784"/>
<location filename="../Window.cpp" line="1789"/>
<source>Exit fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1786"/>
<location filename="../Window.cpp" line="1791"/>
<source>GameShark Button (held)</source>
<translation>Gameshark ()</translation>
</message>
<message>
<location filename="../Window.cpp" line="1792"/>
<location filename="../Window.cpp" line="1797"/>
<source>Autofire</source>
<translation></translation>
</message>
<message>
<location filename="../Window.cpp" line="1793"/>
<location filename="../Window.cpp" line="1798"/>
<source>Autofire A</source>
<translation> A</translation>
</message>
<message>
<location filename="../Window.cpp" line="1798"/>
<location filename="../Window.cpp" line="1803"/>
<source>Autofire B</source>
<translation> B</translation>
</message>
<message>
<location filename="../Window.cpp" line="1803"/>
<location filename="../Window.cpp" line="1808"/>
<source>Autofire L</source>
<translation> L</translation>
</message>
<message>
<location filename="../Window.cpp" line="1808"/>
<location filename="../Window.cpp" line="1813"/>
<source>Autofire R</source>
<translation> R</translation>
</message>
<message>
<location filename="../Window.cpp" line="1813"/>
<location filename="../Window.cpp" line="1818"/>
<source>Autofire Start</source>
<translation> Start</translation>
</message>
<message>
<location filename="../Window.cpp" line="1818"/>
<location filename="../Window.cpp" line="1823"/>
<source>Autofire Select</source>
<translation> Select</translation>
</message>
<message>
<location filename="../Window.cpp" line="1823"/>
<location filename="../Window.cpp" line="1828"/>
<source>Autofire Up</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1828"/>
<location filename="../Window.cpp" line="1833"/>
<source>Autofire Right</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1833"/>
<location filename="../Window.cpp" line="1838"/>
<source>Autofire Down</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="1838"/>
<location filename="../Window.cpp" line="1843"/>
<source>Autofire Left</source>
<translation> </translation>
</message>
<message>
<location filename="../Window.cpp" line="2043"/>
<location filename="../Window.cpp" line="2048"/>
<source>Clear</source>
<translation></translation>
</message>

View File

@ -115,11 +115,4 @@ if(UNIX)
install(FILES ${PROJECT_SOURCE_DIR}/doc/mgba.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-sdl)
endif()
if(DISTBUILD AND CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
if(NOT APPLE)
add_custom_command(TARGET ${BINARY_NAME}-sdl POST_BUILD COMMAND "${OBJCOPY}" --only-keep-debug "$<TARGET_FILE:${BINARY_NAME}-sdl>" "$<TARGET_FILE:${BINARY_NAME}-sdl>.debug")
add_custom_command(TARGET ${BINARY_NAME}-sdl POST_BUILD COMMAND "${STRIP}" "$<TARGET_FILE:${BINARY_NAME}-sdl>")
add_custom_command(TARGET ${BINARY_NAME}-sdl POST_BUILD COMMAND "${OBJCOPY}" --add-gnu-debuglink "$<TARGET_FILE:${BINARY_NAME}-sdl>.debug" "$<TARGET_FILE:${BINARY_NAME}-sdl>")
install(FILES "$<TARGET_FILE:${BINARY_NAME}-sdl>.debug" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${BINARY_NAME}-sdl-dbg)
endif()
endif()
debug_strip(${BINARY_NAME}-sdl)

View File

@ -46,10 +46,3 @@ if(BUILD_CINEMA)
add_test(cinema ${BINARY_NAME}-cinema -v)
install(TARGETS ${BINARY_NAME}-cinema DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${BINARY_NAME}-test)
endif()
if(BUILD_ROM_TEST)
add_executable(${BINARY_NAME}-rom-test ${CMAKE_CURRENT_SOURCE_DIR}/rom-test-main.c)
target_link_libraries(${BINARY_NAME}-rom-test ${BINARY_NAME})
target_compile_definitions(${BINARY_NAME}-rom-test PRIVATE "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}")
install(TARGETS ${BINARY_NAME}-rom-test DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${BINARY_NAME}-test)
endif()

View File

@ -82,7 +82,7 @@ static struct mScriptConsole* _ensureConsole(struct mScriptContext* context) {
void mScriptContextAttachLogger(struct mScriptContext* context, struct mLogger* logger) {
struct mScriptConsole* console = _ensureConsole(context);
console->logger = logger;
console->logger = logger ? logger : mLogGetContext();
}
void mScriptContextDetachLogger(struct mScriptContext* context) {

View File

@ -421,7 +421,10 @@ bool mScriptContextLoadVF(struct mScriptContext* context, const char* name, stru
if (!info.context) {
return false;
}
return info.context->load(info.context, name, vf);
if (!info.context->load(info.context, name, vf)) {
return false;
}
return info.context->run(info.context);
}
#ifdef ENABLE_VFS

View File

@ -1573,7 +1573,19 @@ static int _luaRequireShim(lua_State* lua) {
static int _luaPrintShim(lua_State* lua) {
int n = lua_gettop(lua);
lua_getglobal(lua, "console");
if (lua_getglobal(lua, "console") == LUA_TNIL) {
// There is no console installed, so output to stdout
lua_pop(lua, 1);
for (int i = 1; i <= n; i++) {
const char* str = luaL_tolstring(lua, i, NULL);
if (i > 1) {
printf("\t");
}
printf("%s", str);
}
printf("\n");
return 0;
}
lua_insert(lua, 1);
// The first upvalue is either "log" or "warn"

View File

@ -130,6 +130,7 @@ void mScriptContextAttachStdlib(struct mScriptContext* context) {
});
mScriptContextExportConstants(context, "CHECKSUM", (struct mScriptKVPair[]) {
mSCRIPT_CONSTANT_PAIR(mCHECKSUM, CRC32),
mSCRIPT_CONSTANT_PAIR(mCHECKSUM, MD5),
mSCRIPT_KV_SENTINEL
});
#ifdef M_CORE_GBA

View File

@ -133,14 +133,11 @@ bool extractArchive(struct VDir* archive, const char* root, bool prefix) {
errno = 0;
vfOut = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC);
if (!vfOut) {
if (errno == EACCES) {
#ifdef _WIN32
Sleep(1000);
#else
sleep(1);
#endif
vfOut = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC);
} else if (errno == EISDIR) {
int error = errno;
struct stat st;
if (error == EISDIR || (stat(path, &st) >= 0 && S_ISDIR(st.st_mode))) {
// Windows maps STATUS_FILE_IS_A_DIRECTORY to ERROR_ACCESS_DENIED,
// which then gets mapped to EACCESS, because everything is awful
fprintf(logfile, "rm -r %s\n", path);
if (!rmdirRecursive(VDirOpen(path))) {
return false;
@ -151,6 +148,13 @@ bool extractArchive(struct VDir* archive, const char* root, bool prefix) {
RemoveDirectoryW(wpath);
#else
rmdir(path);
#endif
vfOut = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC);
} else if (error == EACCES || error == ETXTBSY) {
#ifdef _WIN32
Sleep(1000);
#else
sleep(1);
#endif
vfOut = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC);
}

View File

@ -163,7 +163,16 @@ bool GUISelectFile(struct GUIParams* params, char* outPath, size_t outLen, bool
.subtitle = params->currentPath,
};
GUIMenuItemListInit(&menu.items, 0);
_refreshDirectory(params, params->currentPath, &menu.items, filterName, filterContents, preselect);
while (true) {
if (_refreshDirectory(params, params->currentPath, &menu.items, filterName, filterContents, preselect)) {
break;
}
if (strncmp(params->currentPath, params->basePath, PATH_MAX) == 0 || !params->currentPath[0]) {
mLOG(GUI_MENU, ERROR, "Failed to load base directory");
return false;
}
_upDirectory(params->currentPath);
}
menu.index = params->fileIndex;
while (true) {

View File

@ -17,6 +17,8 @@
DEFINE_VECTOR(GUIMenuItemList, struct GUIMenuItem);
DEFINE_VECTOR(GUIMenuSavedList, struct GUIMenuSavedState);
mLOG_DEFINE_CATEGORY(GUI_MENU, "GUI Menu", "gui.menu");
void _itemNext(struct GUIMenuItem* item, bool wrap) {
if (wrap || item->state < item->nStates - 1) {
unsigned oldState = item->state;
@ -117,12 +119,6 @@ static enum GUIMenuExitReason GUIMenuPollInput(struct GUIParams* params, struct
state->cursor = GUIPollCursor(params, &state->cx, &state->cy);
// Check for new direction presses
if (newInput & (1 << GUI_INPUT_UP) && menu->index > 0) {
--menu->index;
}
if (newInput & (1 << GUI_INPUT_DOWN) && menu->index < GUIMenuItemListSize(&menu->items) - 1) {
++menu->index;
}
if (newInput & (1 << GUI_INPUT_LEFT)) {
struct GUIMenuItem* item = GUIMenuItemListGetPointer(&menu->items, menu->index);
if (item->validStates && !item->readonly) {
@ -143,6 +139,20 @@ static enum GUIMenuExitReason GUIMenuPollInput(struct GUIParams* params, struct
menu->index = GUIMenuItemListSize(&menu->items) - 1;
}
}
if (newInput & (1 << GUI_INPUT_UP)) {
if (menu->index > 0) {
--menu->index;
} else {
menu->index = GUIMenuItemListSize(&menu->items) - 1;
}
}
if (newInput & (1 << GUI_INPUT_DOWN)) {
if (menu->index < GUIMenuItemListSize(&menu->items) - 1) {
++menu->index;
} else {
menu->index = 0;
}
}
// Handle cursor movement
if (state->cursor != GUI_CURSOR_NOT_PRESENT) {