Merge branch 'master' (early part) into medusa

This commit is contained in:
Vicki Pfau 2022-05-29 22:15:32 -07:00
commit c2d9a71f65
45 changed files with 1197 additions and 1803 deletions

12
CHANGES
View File

@ -44,29 +44,41 @@ Features:
- Tool for converting scanned pictures of e-Reader cards to raw dotcode data - Tool for converting scanned pictures of e-Reader cards to raw dotcode data
- Options for muting when inactive, minimized, or for different players in multiplayer - Options for muting when inactive, minimized, or for different players in multiplayer
- Cheat code support in homebrew ports - Cheat code support in homebrew ports
- Acclerometer and gyro support for controllers on PC
- Support for combo "Super Game Boy Color" SGB + GBC ROM hacks - Support for combo "Super Game Boy Color" SGB + GBC ROM hacks
- Support for 64 kiB SRAM saves used in some bootlegs - Support for 64 kiB SRAM saves used in some bootlegs
- Discord Rich Presence now supports time elapsed - Discord Rich Presence now supports time elapsed
- Additional scaling shaders - Additional scaling shaders
Emulation fixes: Emulation fixes:
- ARM7: Fix unsigned multiply timing
- GB I/O: Fix incrementing SGB controller when P14 is low (fixes mgba.io/i/2202) - GB I/O: Fix incrementing SGB controller when P14 is low (fixes mgba.io/i/2202)
- GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032)
- GB Video: Render SGB border when unmasking with ATTR/PAL_SET (fixes mgba.io/i/2261) - GB Video: Render SGB border when unmasking with ATTR/PAL_SET (fixes mgba.io/i/2261)
- GBA: Improve timing when not booting from BIOS - GBA: Improve timing when not booting from BIOS
- GBA I/O: Redo internal key input, enabling edge-based key IRQs
- GBA Memory: Fix misaligned 32-bit I/O loads (fixes mgba.io/i/2307)
- GBA SIO: Fix SI value for unattached MULTI mode - GBA SIO: Fix SI value for unattached MULTI mode
- GBA Video: Fix backdrop color if DISPCNT is first set to 0 (fixes mgba.io/i/2260) - GBA Video: Fix backdrop color if DISPCNT is first set to 0 (fixes mgba.io/i/2260)
- GBA Video: Don't iterate affine backgrounds when disabled
- GBA Video: Delay enabling backgrounds in bitmap modes (fixes mgba.io/i/1668)
Other fixes: Other fixes:
- ARM Decoder: Fix decoding of lsl r0 (fixes mgba.io/i/2349)
- Core: Don't attempt to restore rewind diffs past start of rewind - Core: Don't attempt to restore rewind diffs past start of rewind
- FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes mgba.io/i/2084) - FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes mgba.io/i/2084)
- GB Video: Fix memory leak when reseting SGB games - GB Video: Fix memory leak when reseting SGB games
- GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB
- GBA: Fix maximum tile ID in caching for 256-color modes
- Libretro: Fix crash when using Game Boy codes (fixes mgba.io/i/2281) - Libretro: Fix crash when using Game Boy codes (fixes mgba.io/i/2281)
- Qt: Fix corrupted savestate and fatal error text
- Qt: Fix sprite compositing when sprite tiles go out of bounds (fixes mgba.io/i/2348)
Misc: Misc:
- Core: Suspend runloop when a core crashes - Core: Suspend runloop when a core crashes
- GBA I/O: Update KEYINPUT in internal I/O memory (fixes mgba.io/i/2235)
- mGUI: Add margin to right-aligned menu text (fixes mgba.io/i/871) - mGUI: Add margin to right-aligned menu text (fixes mgba.io/i/871)
- Qt: Rearrange menus some - Qt: Rearrange menus some
- Qt: Clean up cheats dialog - Qt: Clean up cheats dialog
- Qt: Only set default controller bindings if loading fails (fixes mgba.io/i/799) - Qt: Only set default controller bindings if loading fails (fixes mgba.io/i/799)
- Wii: Add adjustable gyroscope settings (closes mgba.io/i/2245)
0.9.2: (2021-07-10) 0.9.2: (2021-07-10)
Emulation fixes: Emulation fixes:

View File

@ -11,7 +11,7 @@
CXX_GUARD_START CXX_GUARD_START
#ifndef DISABLE_THREADING #ifndef DISABLE_THREADING
#if __STDC_VERSION__ >= 201112L #if (__STDC_VERSION__ >= 201112L) && (__STDC_NO_THREADS__ != 1)
#define ThreadLocal _Thread_local void* #define ThreadLocal _Thread_local void*
#define ThreadLocalInitKey(X) #define ThreadLocalInitKey(X)
#define ThreadLocalSetKey(K, V) K = V #define ThreadLocalSetKey(K, V) K = V

View File

@ -37,7 +37,7 @@
#define ARM_V_ADDITION(M, N, D) (!(ARM_SIGN((M) ^ (N))) && (ARM_SIGN((M) ^ (D)))) #define ARM_V_ADDITION(M, N, D) (!(ARM_SIGN((M) ^ (N))) && (ARM_SIGN((M) ^ (D))))
#define ARM_V_SUBTRACTION(M, N, D) ((ARM_SIGN((M) ^ (N))) && (ARM_SIGN((M) ^ (D)))) #define ARM_V_SUBTRACTION(M, N, D) ((ARM_SIGN((M) ^ (N))) && (ARM_SIGN((M) ^ (D))))
#define ARM_WAIT_MUL(R, WAIT) \ #define ARM_WAIT_SMUL(R, WAIT) \
{ \ { \
int32_t wait = WAIT; \ int32_t wait = WAIT; \
if ((R & 0xFFFFFF00) == 0xFFFFFF00 || !(R & 0xFFFFFF00)) { \ if ((R & 0xFFFFFF00) == 0xFFFFFF00 || !(R & 0xFFFFFF00)) { \
@ -52,6 +52,21 @@
currentCycles += cpu->memory.stall(cpu, wait); \ currentCycles += cpu->memory.stall(cpu, wait); \
} }
#define ARM_WAIT_UMUL(R, WAIT) \
{ \
int32_t wait = WAIT; \
if (!(R & 0xFFFFFF00)) { \
wait += 1; \
} else if (!(R & 0xFFFF0000)) { \
wait += 2; \
} else if (!(R & 0xFF000000)) { \
wait += 3; \
} else { \
wait += 4; \
} \
currentCycles += cpu->memory.stall(cpu, wait); \
}
#define ARM_STUB cpu->irqh.hitStub(cpu, opcode) #define ARM_STUB cpu->irqh.hitStub(cpu, opcode)
#define ARM_ILL cpu->irqh.hitIllegal(cpu, opcode) #define ARM_ILL cpu->irqh.hitIllegal(cpu, opcode)

View File

@ -85,7 +85,8 @@ struct GBA {
struct mTimingEvent irqEvent; struct mTimingEvent irqEvent;
uint32_t biosChecksum; uint32_t biosChecksum;
int* keySource; uint16_t keysActive;
uint16_t keysLast;
struct mRotationSource* rotationSource; struct mRotationSource* rotationSource;
struct GBALuminanceSource* luminanceSource; struct GBALuminanceSource* luminanceSource;
struct mRTCSource* rtcSource; struct mRTCSource* rtcSource;

View File

@ -24,7 +24,7 @@
#define ADDR_MODE_1_LSL \ #define ADDR_MODE_1_LSL \
ADDR_MODE_1_SHIFT(LSL) \ ADDR_MODE_1_SHIFT(LSL) \
if (!info->op3.shifterImm) { \ if ((info->operandFormat & ARM_OPERAND_SHIFT_IMMEDIATE_3) && !info->op3.shifterImm) { \
info->operandFormat &= ~ARM_OPERAND_SHIFT_IMMEDIATE_3; \ info->operandFormat &= ~ARM_OPERAND_SHIFT_IMMEDIATE_3; \
info->op3.shifterOp = ARM_SHIFT_NONE; \ info->op3.shifterOp = ARM_SHIFT_NONE; \
} }

View File

@ -339,38 +339,38 @@ ATTRIBUTE_NOINLINE static void _neutralS(struct ARMCore* cpu, int32_t d) {
DEFINE_ALU_INSTRUCTION_EX_ARM(NAME ## _ROR, S_BODY, _shiftROR, BODY) \ DEFINE_ALU_INSTRUCTION_EX_ARM(NAME ## _ROR, S_BODY, _shiftROR, BODY) \
DEFINE_ALU_INSTRUCTION_EX_ARM(NAME ## I, S_BODY, _immediate, BODY) DEFINE_ALU_INSTRUCTION_EX_ARM(NAME ## I, S_BODY, _immediate, BODY)
#define DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, S_BODY) \ #define DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, S_BODY, SIGNED) \
DEFINE_INSTRUCTION_ARM(NAME, \ DEFINE_INSTRUCTION_ARM(NAME, \
int rd = (opcode >> 16) & 0xF; \ int rd = (opcode >> 16) & 0xF; \
int rs = (opcode >> 8) & 0xF; \ int rs = (opcode >> 8) & 0xF; \
int rm = opcode & 0xF; \ int rm = opcode & 0xF; \
if (rd != ARM_PC) { \ if (rd != ARM_PC) { \
ARM_WAIT_MUL(cpu->gprs[rs], 0); \ ARM_WAIT_ ## SIGNED ## MUL(cpu->gprs[rs], 0); \
BODY; \ BODY; \
S_BODY; \ S_BODY; \
} \ } \
currentCycles += cpu->memory.activeNonseqCycles32 - cpu->memory.activeSeqCycles32) currentCycles += cpu->memory.activeNonseqCycles32 - cpu->memory.activeSeqCycles32)
#define DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, S_BODY, WAIT) \ #define DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, S_BODY, SIGNED, WAIT) \
DEFINE_INSTRUCTION_ARM(NAME, \ DEFINE_INSTRUCTION_ARM(NAME, \
int rd = (opcode >> 12) & 0xF; \ int rd = (opcode >> 12) & 0xF; \
int rdHi = (opcode >> 16) & 0xF; \ int rdHi = (opcode >> 16) & 0xF; \
int rs = (opcode >> 8) & 0xF; \ int rs = (opcode >> 8) & 0xF; \
int rm = opcode & 0xF; \ int rm = opcode & 0xF; \
if (rdHi != ARM_PC && rd != ARM_PC) { \ if (rdHi != ARM_PC && rd != ARM_PC) { \
ARM_WAIT_MUL(cpu->gprs[rs], WAIT); \ ARM_WAIT_ ## SIGNED ## MUL(cpu->gprs[rs], WAIT); \
BODY; \ BODY; \
S_BODY; \ S_BODY; \
} \ } \
currentCycles += cpu->memory.activeNonseqCycles32 - cpu->memory.activeSeqCycles32) currentCycles += cpu->memory.activeNonseqCycles32 - cpu->memory.activeSeqCycles32)
#define DEFINE_MULTIPLY_INSTRUCTION_ARM(NAME, BODY, S_BODY) \ #define DEFINE_MULTIPLY_INSTRUCTION_ARM(NAME, BODY, S_BODY, SIGNED) \
DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, ) \ DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, , SIGNED) \
DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME ## S, BODY, S_BODY) DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME ## S, BODY, S_BODY, SIGNED)
#define DEFINE_MULTIPLY_INSTRUCTION_2_ARM(NAME, BODY, S_BODY, WAIT) \ #define DEFINE_MULTIPLY_INSTRUCTION_2_ARM(NAME, BODY, S_BODY, SIGNED, WAIT) \
DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, , WAIT) \ DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, , SIGNED, WAIT) \
DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME ## S, BODY, S_BODY, WAIT) DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME ## S, BODY, S_BODY, SIGNED, WAIT)
#define DEFINE_MULTIPLY_INSTRUCTION_3_ARM(NAME, BODY) \ #define DEFINE_MULTIPLY_INSTRUCTION_3_ARM(NAME, BODY) \
DEFINE_INSTRUCTION_ARM(NAME, \ DEFINE_INSTRUCTION_ARM(NAME, \
@ -588,15 +588,15 @@ DEFINE_ALU_INSTRUCTION_S_ONLY_ARM(TST, ARM_NEUTRAL_S(n, cpu->shifterOperand, alu
// Begin multiply definitions // Begin multiply definitions
DEFINE_MULTIPLY_INSTRUCTION_2_ARM(MLA, cpu->gprs[rdHi] = cpu->gprs[rm] * cpu->gprs[rs] + cpu->gprs[rd], ARM_NEUTRAL_S(, , cpu->gprs[rdHi]), 1) DEFINE_MULTIPLY_INSTRUCTION_2_ARM(MLA, cpu->gprs[rdHi] = cpu->gprs[rm] * cpu->gprs[rs] + cpu->gprs[rd], ARM_NEUTRAL_S(, , cpu->gprs[rdHi]), S, 1)
DEFINE_MULTIPLY_INSTRUCTION_ARM(MUL, cpu->gprs[rd] = cpu->gprs[rm] * cpu->gprs[rs], ARM_NEUTRAL_S(cpu->gprs[rm], cpu->gprs[rs], cpu->gprs[rd])) DEFINE_MULTIPLY_INSTRUCTION_ARM(MUL, cpu->gprs[rd] = cpu->gprs[rm] * cpu->gprs[rs], ARM_NEUTRAL_S(cpu->gprs[rm], cpu->gprs[rs], cpu->gprs[rd]), S)
DEFINE_MULTIPLY_INSTRUCTION_2_ARM(SMLAL, DEFINE_MULTIPLY_INSTRUCTION_2_ARM(SMLAL,
int64_t d = ((int64_t) cpu->gprs[rm]) * ((int64_t) cpu->gprs[rs]) + ((uint32_t) cpu->gprs[rd]); int64_t d = ((int64_t) cpu->gprs[rm]) * ((int64_t) cpu->gprs[rs]) + ((uint32_t) cpu->gprs[rd]);
int32_t dHi = cpu->gprs[rdHi] + (d >> 32); int32_t dHi = cpu->gprs[rdHi] + (d >> 32);
cpu->gprs[rd] = d; cpu->gprs[rd] = d;
cpu->gprs[rdHi] = dHi;, cpu->gprs[rdHi] = dHi;,
ARM_NEUTRAL_HI_S(cpu->gprs[rd], dHi), 2) ARM_NEUTRAL_HI_S(cpu->gprs[rd], dHi), S, 2)
DEFINE_MULTIPLY_INSTRUCTION_XY_ARM(SMLA, DEFINE_MULTIPLY_INSTRUCTION_XY_ARM(SMLA,
int32_t dn = cpu->gprs[rn]; \ int32_t dn = cpu->gprs[rn]; \
@ -618,20 +618,20 @@ DEFINE_MULTIPLY_INSTRUCTION_2_ARM(SMULL,
int64_t d = ((int64_t) cpu->gprs[rm]) * ((int64_t) cpu->gprs[rs]); int64_t d = ((int64_t) cpu->gprs[rm]) * ((int64_t) cpu->gprs[rs]);
cpu->gprs[rd] = d; cpu->gprs[rd] = d;
cpu->gprs[rdHi] = d >> 32;, cpu->gprs[rdHi] = d >> 32;,
ARM_NEUTRAL_HI_S(cpu->gprs[rd], cpu->gprs[rdHi]), 1) ARM_NEUTRAL_HI_S(cpu->gprs[rd], cpu->gprs[rdHi]), S, 1)
DEFINE_MULTIPLY_INSTRUCTION_2_ARM(UMLAL, DEFINE_MULTIPLY_INSTRUCTION_2_ARM(UMLAL,
uint64_t d = ARM_UXT_64(cpu->gprs[rm]) * ARM_UXT_64(cpu->gprs[rs]) + ((uint32_t) cpu->gprs[rd]); uint64_t d = ARM_UXT_64(cpu->gprs[rm]) * ARM_UXT_64(cpu->gprs[rs]) + ((uint32_t) cpu->gprs[rd]);
uint32_t dHi = ((uint32_t) cpu->gprs[rdHi]) + (d >> 32); uint32_t dHi = ((uint32_t) cpu->gprs[rdHi]) + (d >> 32);
cpu->gprs[rd] = d; cpu->gprs[rd] = d;
cpu->gprs[rdHi] = dHi;, cpu->gprs[rdHi] = dHi;,
ARM_NEUTRAL_HI_S(cpu->gprs[rd], dHi), 2) ARM_NEUTRAL_HI_S(cpu->gprs[rd], dHi), U, 2)
DEFINE_MULTIPLY_INSTRUCTION_2_ARM(UMULL, DEFINE_MULTIPLY_INSTRUCTION_2_ARM(UMULL,
uint64_t d = ARM_UXT_64(cpu->gprs[rm]) * ARM_UXT_64(cpu->gprs[rs]); uint64_t d = ARM_UXT_64(cpu->gprs[rm]) * ARM_UXT_64(cpu->gprs[rs]);
cpu->gprs[rd] = d; cpu->gprs[rd] = d;
cpu->gprs[rdHi] = d >> 32;, cpu->gprs[rdHi] = d >> 32;,
ARM_NEUTRAL_HI_S(cpu->gprs[rd], cpu->gprs[rdHi]), 1) ARM_NEUTRAL_HI_S(cpu->gprs[rd], cpu->gprs[rdHi]), U, 1)
// End multiply definitions // End multiply definitions

View File

@ -232,7 +232,7 @@ DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(NEG, THUMB_SUBTRACTION(cpu->gprs[rd], 0, cp
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(CMP2, int32_t aluOut = cpu->gprs[rd] - cpu->gprs[rn]; THUMB_SUBTRACTION_S(cpu->gprs[rd], cpu->gprs[rn], aluOut)) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(CMP2, int32_t aluOut = cpu->gprs[rd] - cpu->gprs[rn]; THUMB_SUBTRACTION_S(cpu->gprs[rd], cpu->gprs[rn], aluOut))
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(CMN, int32_t aluOut = cpu->gprs[rd] + cpu->gprs[rn]; THUMB_ADDITION_S(cpu->gprs[rd], cpu->gprs[rn], aluOut)) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(CMN, int32_t aluOut = cpu->gprs[rd] + cpu->gprs[rn]; THUMB_ADDITION_S(cpu->gprs[rd], cpu->gprs[rn], aluOut))
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ORR, cpu->gprs[rd] = cpu->gprs[rd] | cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd])) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ORR, cpu->gprs[rd] = cpu->gprs[rd] | cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd]))
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(MUL, ARM_WAIT_MUL(cpu->gprs[rd], 0); cpu->gprs[rd] *= cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd]); currentCycles += cpu->memory.activeNonseqCycles16 - cpu->memory.activeSeqCycles16) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(MUL, ARM_WAIT_SMUL(cpu->gprs[rd], 0); cpu->gprs[rd] *= cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd]); currentCycles += cpu->memory.activeNonseqCycles16 - cpu->memory.activeSeqCycles16)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(BIC, cpu->gprs[rd] = cpu->gprs[rd] & ~cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd])) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(BIC, cpu->gprs[rd] = cpu->gprs[rd] & ~cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd]))
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(MVN, cpu->gprs[rd] = ~cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd])) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(MVN, cpu->gprs[rd] = ~cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd]))

View File

@ -72,6 +72,8 @@ static void _gdbStubEntered(struct mDebugger* debugger, enum mDebuggerEntryReaso
case WATCHPOINT_RW: case WATCHPOINT_RW:
type = "awatch"; type = "awatch";
break; break;
case WATCHPOINT_CHANGE:
break;
} }
snprintf(stub->outgoing, GDB_STUB_MAX_LINE - 4, "T%02x%s:%08x;", SIGTRAP, type, info->address); snprintf(stub->outgoing, GDB_STUB_MAX_LINE - 4, "T%02x%s:%08x;", SIGTRAP, type, info->address);
} else { } else {
@ -629,6 +631,7 @@ size_t _parseGDBMessage(struct GDBStub* stub, const char* message) {
_readGPRs(stub, message); _readGPRs(stub, message);
break; break;
case 'H': case 'H':
case 'T':
// This is faked because we only have one thread // This is faked because we only have one thread
strncpy(stub->outgoing, "OK", GDB_STUB_MAX_LINE - 4); strncpy(stub->outgoing, "OK", GDB_STUB_MAX_LINE - 4);
_sendMessage(stub); _sendMessage(stub);

View File

@ -95,6 +95,9 @@ static bool _testExtensions(const char* name) {
if (!strncmp(ext, "ini", PATH_MAX)) { if (!strncmp(ext, "ini", PATH_MAX)) {
return false; return false;
} }
if (!strncmp(ext, "cheats", PATH_MAX)) {
return false;
}
if (!strncmp(ext, "ss", 2)) { if (!strncmp(ext, "ss", 2)) {
return false; return false;
} }

View File

@ -150,7 +150,6 @@ struct GBACore {
#ifndef DISABLE_THREADING #ifndef DISABLE_THREADING
struct mVideoThreadProxy threadProxy; struct mVideoThreadProxy threadProxy;
#endif #endif
int keys;
struct mCPUComponent* components[CPU_COMPONENT_MAX]; struct mCPUComponent* components[CPU_COMPONENT_MAX];
const struct Configuration* overrides; const struct Configuration* overrides;
struct mDebuggerPlatform* debuggerPlatform; struct mDebuggerPlatform* debuggerPlatform;
@ -209,9 +208,6 @@ static bool _GBACoreInit(struct mCore* core) {
gbacore->proxyRenderer.logger = NULL; gbacore->proxyRenderer.logger = NULL;
#endif #endif
gbacore->keys = 0;
gba->keySource = &gbacore->keys;
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2 #if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
mDirectorySetInit(&core->dirs); mDirectorySetInit(&core->dirs);
#endif #endif
@ -718,20 +714,20 @@ static bool _GBACoreSaveState(struct mCore* core, void* state) {
} }
static void _GBACoreSetKeys(struct mCore* core, uint32_t keys) { static void _GBACoreSetKeys(struct mCore* core, uint32_t keys) {
struct GBACore* gbacore = (struct GBACore*) core; struct GBA* gba = core->board;
gbacore->keys = keys; gba->keysActive = keys;
GBATestKeypadIRQ(core->board); GBATestKeypadIRQ(gba);
} }
static void _GBACoreAddKeys(struct mCore* core, uint32_t keys) { static void _GBACoreAddKeys(struct mCore* core, uint32_t keys) {
struct GBACore* gbacore = (struct GBACore*) core; struct GBA* gba = core->board;
gbacore->keys |= keys; gba->keysActive |= keys;
GBATestKeypadIRQ(core->board); GBATestKeypadIRQ(gba);
} }
static void _GBACoreClearKeys(struct mCore* core, uint32_t keys) { static void _GBACoreClearKeys(struct mCore* core, uint32_t keys) {
struct GBACore* gbacore = (struct GBACore*) core; struct GBA* gba = core->board;
gbacore->keys &= ~keys; gba->keysActive &= ~keys;
} }
static void _GBACoreSetCursorLocation(struct mCore* core, int x, int y) { static void _GBACoreSetCursorLocation(struct mCore* core, int x, int y) {

View File

@ -90,7 +90,8 @@ static void GBAInit(void* cpu, struct mCPUComponent* component) {
GBAHardwareInit(&gba->memory.hw, NULL); GBAHardwareInit(&gba->memory.hw, NULL);
gba->keySource = 0; gba->keysActive = 0;
gba->keysLast = 0;
gba->rotationSource = 0; gba->rotationSource = 0;
gba->luminanceSource = 0; gba->luminanceSource = 0;
gba->rtcSource = 0; gba->rtcSource = 0;
@ -876,18 +877,22 @@ void GBAFrameEnded(struct GBA* gba) {
} }
void GBATestKeypadIRQ(struct GBA* gba) { void GBATestKeypadIRQ(struct GBA* gba) {
if (gba->keysActive == gba->keysLast) {
return;
}
uint16_t keycnt = gba->memory.io[REG_KEYCNT >> 1]; uint16_t keycnt = gba->memory.io[REG_KEYCNT >> 1];
if (!(keycnt & 0x4000)) { if (!(keycnt & 0x4000)) {
return; return;
} }
int isAnd = keycnt & 0x8000; int isAnd = keycnt & 0x8000;
if (!gba->keySource) {
// TODO?
return;
}
keycnt &= 0x3FF; keycnt &= 0x3FF;
uint16_t keyInput = *gba->keySource & keycnt; uint16_t keyInput = gba->keysActive & keycnt;
uint16_t lastInput = gba->keysLast & keycnt;
gba->keysLast = gba->keysActive;
if (keyInput == lastInput) {
return;
}
if (isAnd && keycnt == keyInput) { if (isAnd && keycnt == keyInput) {
GBARaiseIRQ(gba, IRQ_KEYPAD, 0); GBARaiseIRQ(gba, IRQ_KEYPAD, 0);

View File

@ -743,14 +743,10 @@ uint16_t GBAIORead(struct GBA* gba, uint32_t address) {
callbacks->keysRead(callbacks->context); callbacks->keysRead(callbacks->context);
} }
} }
uint16_t input = 0;
if (gba->keyCallback) { if (gba->keyCallback) {
input = gba->keyCallback->readKeys(gba->keyCallback); gba->keysActive = gba->keyCallback->readKeys(gba->keyCallback);
if (gba->keySource) {
*gba->keySource = input;
} }
} else if (gba->keySource) { uint16_t input = gba->keysActive;
input = *gba->keySource;
if (!gba->allowOpposingDirections) { if (!gba->allowOpposingDirections) {
unsigned rl = input & 0x030; unsigned rl = input & 0x030;
unsigned ud = input & 0x0C0; unsigned ud = input & 0x0C0;
@ -762,9 +758,9 @@ uint16_t GBAIORead(struct GBA* gba, uint32_t address) {
input |= ud; input |= ud;
} }
} }
gba->memory.io[address >> 1] = 0x3FF ^ input;
} }
return 0x3FF ^ input; break;
}
case REG_SIOCNT: case REG_SIOCNT:
return gba->sio.siocnt; return gba->sio.siocnt;
case REG_RCNT: case REG_RCNT:

View File

@ -381,7 +381,7 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) {
wait += waitstatesRegion[REGION_WORKING_RAM]; wait += waitstatesRegion[REGION_WORKING_RAM];
#define LOAD_WORKING_IRAM LOAD_32(value, address & (SIZE_WORKING_IRAM - 4), memory->iwram); #define LOAD_WORKING_IRAM LOAD_32(value, address & (SIZE_WORKING_IRAM - 4), memory->iwram);
#define LOAD_IO value = GBAIORead(gba, address & OFFSET_MASK & ~2) | (GBAIORead(gba, (address & OFFSET_MASK) | 2) << 16); #define LOAD_IO value = GBAIORead(gba, address & OFFSET_MASK & ~3) | (GBAIORead(gba, (address & OFFSET_MASK & ~1) | 2) << 16);
#define LOAD_PALETTE_RAM \ #define LOAD_PALETTE_RAM \
LOAD_32(value, address & (SIZE_PALETTE_RAM - 4), gba->video.palette); \ LOAD_32(value, address & (SIZE_PALETTE_RAM - 4), gba->video.palette); \

View File

@ -25,10 +25,10 @@ void GBAVideoCacheInit(struct mCacheSet* cache) {
sysconfig = mTileCacheSystemInfoSetPaletteBPP(sysconfig, 3); // 2^(2^3) = 256 entries sysconfig = mTileCacheSystemInfoSetPaletteBPP(sysconfig, 3); // 2^(2^3) = 256 entries
sysconfig = mTileCacheSystemInfoSetPaletteCount(sysconfig, 0); // 1 palettes sysconfig = mTileCacheSystemInfoSetPaletteCount(sysconfig, 0); // 1 palettes
sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 2048); sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 1024);
mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 1), sysconfig, 0, 0); mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 1), sysconfig, 0, 0);
mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 1), config); mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 1), config);
sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 1024); sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 512);
mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 3), sysconfig, 0x10000, 0x100); mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 3), sysconfig, 0x10000, 0x100);
mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 3), config); mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 3), config);

View File

@ -1414,7 +1414,7 @@ void GBAVideoGLRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) {
if (y == 0) { if (y == 0) {
glDisable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST);
glClearColor(0, 0, 0, 0); glClearColor(0, 0, 0, 0);
#ifdef BUILD_GLES3 #ifdef GL_GLES_PROTOTYPES
glClearDepthf(1.f); glClearDepthf(1.f);
#else #else
glClearDepth(1); glClearDepth(1);
@ -1439,11 +1439,15 @@ void GBAVideoGLRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) {
} }
if (GBARegisterDISPCNTGetMode(glRenderer->dispcnt) != 0) { if (GBARegisterDISPCNTGetMode(glRenderer->dispcnt) != 0) {
if (glRenderer->bg[2].enabled == 4) {
glRenderer->bg[2].affine.sx += glRenderer->bg[2].affine.dmx; glRenderer->bg[2].affine.sx += glRenderer->bg[2].affine.dmx;
glRenderer->bg[2].affine.sy += glRenderer->bg[2].affine.dmy; glRenderer->bg[2].affine.sy += glRenderer->bg[2].affine.dmy;
}
if (glRenderer->bg[3].enabled == 4) {
glRenderer->bg[3].affine.sx += glRenderer->bg[3].affine.dmx; glRenderer->bg[3].affine.sx += glRenderer->bg[3].affine.dmx;
glRenderer->bg[3].affine.sy += glRenderer->bg[3].affine.dmy; glRenderer->bg[3].affine.sy += glRenderer->bg[3].affine.dmy;
} }
}
} }
void _drawScanlines(struct GBAVideoGLRenderer* glRenderer, int y) { void _drawScanlines(struct GBAVideoGLRenderer* glRenderer, int y) {

View File

@ -563,11 +563,15 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render
if (!dirty) { if (!dirty) {
if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) { if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) {
if (softwareRenderer->bg[2].enabled == 4) {
softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx; softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx;
softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy; softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy;
}
if (softwareRenderer->bg[3].enabled == 4) {
softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx; softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx;
softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy; softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy;
} }
}
return; return;
} }
@ -645,25 +649,29 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render
GBAVideoSoftwareRendererPostprocessBuffer(softwareRenderer); GBAVideoSoftwareRendererPostprocessBuffer(softwareRenderer);
if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) { if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) {
if (softwareRenderer->bg[2].enabled == 4) {
softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx; softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx;
softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy; softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy;
}
if (softwareRenderer->bg[3].enabled == 4) {
softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx; softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx;
softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy; softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy;
} }
}
if (softwareRenderer->bg[0].enabled > 0 && softwareRenderer->bg[0].enabled < 4) { if (softwareRenderer->bg[0].enabled != 0 && softwareRenderer->bg[0].enabled < 4) {
++softwareRenderer->bg[0].enabled; ++softwareRenderer->bg[0].enabled;
DIRTY_SCANLINE(softwareRenderer, y); DIRTY_SCANLINE(softwareRenderer, y);
} }
if (softwareRenderer->bg[1].enabled > 0 && softwareRenderer->bg[1].enabled < 4) { if (softwareRenderer->bg[1].enabled != 0 && softwareRenderer->bg[1].enabled < 4) {
++softwareRenderer->bg[1].enabled; ++softwareRenderer->bg[1].enabled;
DIRTY_SCANLINE(softwareRenderer, y); DIRTY_SCANLINE(softwareRenderer, y);
} }
if (softwareRenderer->bg[2].enabled > 0 && softwareRenderer->bg[2].enabled < 4) { if (softwareRenderer->bg[2].enabled != 0 && softwareRenderer->bg[2].enabled < 4) {
++softwareRenderer->bg[2].enabled; ++softwareRenderer->bg[2].enabled;
DIRTY_SCANLINE(softwareRenderer, y); DIRTY_SCANLINE(softwareRenderer, y);
} }
if (softwareRenderer->bg[3].enabled > 0 && softwareRenderer->bg[3].enabled < 4) { if (softwareRenderer->bg[3].enabled != 0 && softwareRenderer->bg[3].enabled < 4) {
++softwareRenderer->bg[3].enabled; ++softwareRenderer->bg[3].enabled;
DIRTY_SCANLINE(softwareRenderer, y); DIRTY_SCANLINE(softwareRenderer, y);
} }
@ -741,14 +749,22 @@ static void GBAVideoSoftwareRendererPutPixels(struct GBAVideoRenderer* renderer,
static void _enableBg(struct GBAVideoSoftwareRenderer* renderer, int bg, bool active) { static void _enableBg(struct GBAVideoSoftwareRenderer* renderer, int bg, bool active) {
int wasActive = renderer->bg[bg].enabled; int wasActive = renderer->bg[bg].enabled;
if (!active) { if (!active) {
if (renderer->nextY == 0 || (wasActive > 0 && wasActive < 4)) {
renderer->bg[bg].enabled = 0; renderer->bg[bg].enabled = 0;
} else if (wasActive == 4) {
renderer->bg[bg].enabled = -2;
}
} else if (!wasActive && active) { } else if (!wasActive && active) {
if (renderer->nextY == 0 || GBARegisterDISPCNTGetMode(renderer->dispcnt) > 2) { if (renderer->nextY == 0) {
// TODO: Investigate in more depth how switching background works in different modes // TODO: Investigate in more depth how switching background works in different modes
renderer->bg[bg].enabled = 4; renderer->bg[bg].enabled = 4;
} else if (GBARegisterDISPCNTGetMode(renderer->dispcnt) > 2) {
renderer->bg[bg].enabled = 2;
} else { } else {
renderer->bg[bg].enabled = 1; renderer->bg[bg].enabled = 1;
} }
} else if (wasActive < 0 && active) {
renderer->bg[bg].enabled = 4;
} }
} }

View File

@ -462,6 +462,8 @@ static void _GBASIOLockstepNodeProcessEvents(struct mTiming* timing, void* user,
node->eventDiff = 0; node->eventDiff = 0;
} }
break; break;
default:
break;
} }
} else if (node->nextEvent <= 0) { } else if (node->nextEvent <= 0) {
if (!node->id) { if (!node->id) {

View File

@ -23,10 +23,10 @@
#define CXX_GUARD_END #define CXX_GUARD_END
#define PYCPARSE #define PYCPARSE
#define va_list void*
typedef int... time_t; typedef int... time_t;
typedef int... off_t; typedef int... off_t;
typedef ... va_list;
typedef ...* png_structp; typedef ...* png_structp;
typedef ...* png_infop; typedef ...* png_infop;
typedef ...* png_unknown_chunkp; typedef ...* png_unknown_chunkp;

View File

@ -20,7 +20,7 @@
<item> <item>
<widget class="QLabel" name="text"> <widget class="QLabel" name="text">
<property name="text"> <property name="text">
<string>{text}</string> <string notr="true">{text}</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
@ -30,7 +30,7 @@
<item> <item>
<widget class="QLabel" name="details"> <widget class="QLabel" name="details">
<property name="text"> <property name="text">
<string>{details}</string> <string notr="true">{details}</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -131,6 +131,7 @@ QImage AssetView::compositeMap(int map, mMapCacheEntry* mapStatus) {
QImage AssetView::compositeObj(const ObjInfo& objInfo) { QImage AssetView::compositeObj(const ObjInfo& objInfo) {
mTileCache* tileCache = mTileCacheSetGetPointer(&m_cacheSet->tiles, objInfo.paletteSet); mTileCache* tileCache = mTileCacheSetGetPointer(&m_cacheSet->tiles, objInfo.paletteSet);
unsigned maxTiles = mTileCacheSystemInfoGetMaxTiles(tileCache->sysConfig);
const color_t* rawPalette = mTileCacheGetPalette(tileCache, objInfo.paletteId); const color_t* rawPalette = mTileCacheGetPalette(tileCache, objInfo.paletteId);
unsigned colors = 1 << objInfo.bits; unsigned colors = 1 << objInfo.bits;
QVector<QRgb> palette; QVector<QRgb> palette;
@ -142,10 +143,11 @@ QImage AssetView::compositeObj(const ObjInfo& objInfo) {
QImage image = QImage(QSize(objInfo.width * 8, objInfo.height * 8), QImage::Format_Indexed8); QImage image = QImage(QSize(objInfo.width * 8, objInfo.height * 8), QImage::Format_Indexed8);
image.setColorTable(palette); image.setColorTable(palette);
image.fill(0);
uchar* bits = image.bits(); uchar* bits = image.bits();
unsigned t = objInfo.tile; unsigned t = objInfo.tile;
for (unsigned y = 0; y < objInfo.height; ++y) { for (unsigned y = 0; y < objInfo.height && t < maxTiles; ++y) {
for (unsigned x = 0; x < objInfo.width; ++x, ++t) { for (unsigned x = 0; x < objInfo.width && t < maxTiles; ++x, ++t) {
compositeTile(static_cast<const void*>(mTileCacheGetVRAM(tileCache, t)), bits, objInfo.width * 8, x * 8, y * 8, objInfo.bits); compositeTile(static_cast<const void*>(mTileCacheGetVRAM(tileCache, t)), bits, objInfo.width * 8, x * 8, y * 8, objInfo.bits);
} }
t += objInfo.stride - objInfo.width; t += objInfo.stride - objInfo.width;

View File

@ -183,14 +183,17 @@ CoreController::CoreController(mCore* core, QObject* parent)
return; return;
} }
} }
message = QString().vsprintf(format, args); va_list argc;
va_copy(argc, args);
message = QString().vsprintf(format, argc);
va_end(argc);
QMetaObject::invokeMethod(controller, "statusPosted", Q_ARG(const QString&, message)); QMetaObject::invokeMethod(controller, "statusPosted", Q_ARG(const QString&, message));
} }
message = QString().vsprintf(format, args); message = QString().vsprintf(format, args);
QMetaObject::invokeMethod(controller, "logPosted", Q_ARG(int, level), Q_ARG(int, category), Q_ARG(const QString&, message)); QMetaObject::invokeMethod(controller, "logPosted", Q_ARG(int, level), Q_ARG(int, category), Q_ARG(const QString&, message));
if (level == mLOG_FATAL) { if (level == mLOG_FATAL) {
mCoreThreadMarkCrashed(controller->thread()); mCoreThreadMarkCrashed(controller->thread());
QMetaObject::invokeMethod(controller, "crashed", Q_ARG(const QString&, QString().vsprintf(format, args))); QMetaObject::invokeMethod(controller, "crashed", Q_ARG(const QString&, message));
} }
}; };
} }

View File

@ -30,7 +30,7 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="QLabel" name="name"> <widget class="QLabel" name="name">
<property name="text"> <property name="text">
<string>{NAME}</string> <string notr="true">{NAME}</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
@ -50,7 +50,7 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QLabel" name="title"> <widget class="QLabel" name="title">
<property name="text"> <property name="text">
<string>{TITLE}</string> <string notr="true">{TITLE}</string>
</property> </property>
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@ -67,7 +67,7 @@
<item row="2" column="1"> <item row="2" column="1">
<widget class="QLabel" name="id"> <widget class="QLabel" name="id">
<property name="text"> <property name="text">
<string>{ID}</string> <string notr="true">{ID}</string>
</property> </property>
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@ -84,7 +84,7 @@
<item row="3" column="1"> <item row="3" column="1">
<widget class="QLabel" name="size"> <widget class="QLabel" name="size">
<property name="text"> <property name="text">
<string>{SIZE}</string> <string notr="true">{SIZE}</string>
</property> </property>
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@ -101,7 +101,7 @@
<item row="4" column="1"> <item row="4" column="1">
<widget class="QLabel" name="crc"> <widget class="QLabel" name="crc">
<property name="text"> <property name="text">
<string>{CRC}</string> <string notr="true">{CRC}</string>
</property> </property>
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>

View File

@ -336,7 +336,8 @@ SettingsView::SettingsView(ConfigController* controller, InputController* inputC
} }
}); });
m_ui.languages->setItemData(0, QLocale("en")); QLocale englishLocale("en");
m_ui.languages->addItem(englishLocale.nativeLanguageName(), englishLocale);
QDir ts(":/translations/"); QDir ts(":/translations/");
for (auto name : ts.entryList()) { for (auto name : ts.entryList()) {
if (!name.endsWith(".qm") || !name.startsWith(binaryName)) { if (!name.endsWith(".qm") || !name.startsWith(binaryName)) {

View File

@ -523,13 +523,7 @@
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="languages"> <widget class="QComboBox" name="languages"/>
<item>
<property name="text">
<string>English</string>
</property>
</item>
</widget>
</item> </item>
<item row="1" column="0" colspan="2"> <item row="1" column="0" colspan="2">
<widget class="Line" name="line_10"> <widget class="Line" name="line_10">

View File

@ -58,16 +58,6 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd.</translation
<source>An update is available</source> <source>An update is available</source>
<translation>Ein Update ist verfügbar</translation> <translation>Ein Update ist verfügbar</translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation>{text}</translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation>{details}</translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1255,22 +1245,22 @@ Download-Größe: %3</translation>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation>Stabil</translation> <translation>Stabil</translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation>Entwicklung</translation> <translation>Entwicklung</translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation>Unbekannt</translation> <translation>Unbekannt</translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation>(keiner)</translation> <translation>(keiner)</translation>
</message> </message>
@ -1321,27 +1311,27 @@ Download-Größe: %3</translation>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>Fehler beim Öffnen der Speicherdatei: %1</translation> <translation>Fehler beim Öffnen der Speicherdatei: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Fehler beim Öffnen der Spieldatei: %1</translation> <translation>Fehler beim Öffnen der Spieldatei: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Das GamePak kann nur auf unterstützten Plattformen herausgezogen werden!</translation> <translation>Das GamePak kann nur auf unterstützten Plattformen herausgezogen werden!</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation>Konnte Snapshot-Datei %1 nicht zum Lesen öffnen</translation> <translation>Konnte Snapshot-Datei %1 nicht zum Lesen öffnen</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation>Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen</translation> <translation>Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen</translation>
</message> </message>
@ -4990,51 +4980,26 @@ Download-Größe: %3</translation>
<source>Game name:</source> <source>Game name:</source>
<translation>Spielname:</translation> <translation>Spielname:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation>Interner Name:</translation> <translation>Interner Name:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation>Spiele-ID:</translation> <translation>Spiele-ID:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation>Dateigröße:</translation> <translation>Dateigröße:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation>CRC32:</translation> <translation>CRC32:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5582,11 +5547,6 @@ Download-Größe: %3</translation>
<source>Language</source> <source>Language</source>
<translation>Sprache</translation> <translation>Sprache</translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>Englisch</translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="552"/> <location filename="../SettingsView.ui" line="552"/>
<source>List view</source> <source>List view</source>

View File

@ -41,17 +41,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message> <message>
<location filename="../ApplicationUpdatePrompt.ui" line="14"/> <location filename="../ApplicationUpdatePrompt.ui" line="14"/>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation>Hay una actualización disponible</translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -173,7 +163,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message> <message>
<location filename="../CheatsView.ui" line="39"/> <location filename="../CheatsView.ui" line="39"/>
<source>Add New Code</source> <source>Add New Code</source>
<translation type="unfinished"></translation> <translation>Añadir nuevo código</translation>
</message> </message>
<message> <message>
<location filename="../CheatsView.ui" line="60"/> <location filename="../CheatsView.ui" line="60"/>
@ -183,12 +173,12 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message> <message>
<location filename="../CheatsView.ui" line="93"/> <location filename="../CheatsView.ui" line="93"/>
<source>Add Lines</source> <source>Add Lines</source>
<translation type="unfinished"></translation> <translation>Añadir líneas</translation>
</message> </message>
<message> <message>
<location filename="../CheatsView.ui" line="100"/> <location filename="../CheatsView.ui" line="100"/>
<source>Code type</source> <source>Code type</source>
<translation type="unfinished"></translation> <translation>Tipo de código</translation>
</message> </message>
<message> <message>
<location filename="../CheatsView.ui" line="53"/> <location filename="../CheatsView.ui" line="53"/>
@ -1013,7 +1003,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message> <message>
<location filename="../OverrideView.ui" line="146"/> <location filename="../OverrideView.ui" line="146"/>
<source>EEPROM 8kB</source> <source>EEPROM 8kB</source>
<translation type="unfinished"></translation> <translation>EEPROM 8kB</translation>
</message> </message>
<message> <message>
<location filename="../OverrideView.ui" line="151"/> <location filename="../OverrideView.ui" line="151"/>
@ -1023,7 +1013,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message> <message>
<location filename="../OverrideView.ui" line="156"/> <location filename="../OverrideView.ui" line="156"/>
<source>SRAM 64kB (bootlegs only)</source> <source>SRAM 64kB (bootlegs only)</source>
<translation type="unfinished"></translation> <translation>SRAM 64kB (sólo bootlegs)</translation>
</message> </message>
<message> <message>
<location filename="../OverrideView.ui" line="164"/> <location filename="../OverrideView.ui" line="164"/>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished">Desconocido</translation> <translation type="unfinished">Desconocido</translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>Error al abrir el archivo de guardado: %1</translation> <translation>Error al abrir el archivo de guardado: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Error al abrir el archivo del juego: %1</translation> <translation>Error al abrir el archivo del juego: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation>¡No se puede remover el cartucho en esta plataforma!</translation> <translation>¡No se puede remover el cartucho en esta plataforma!</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation>Error al leer del archivo de captura: %1</translation> <translation>Error al leer del archivo de captura: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation>Error al escribir al archivo de captura: %1</translation> <translation>Error al escribir al archivo de captura: %1</translation>
</message> </message>
@ -4911,51 +4901,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation>Nombre del juego:</translation> <translation>Nombre del juego:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation>Nombre interno:</translation> <translation>Nombre interno:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation>Id. de juego:</translation> <translation>Id. de juego:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation>Tamaño del archivo:</translation> <translation>Tamaño del archivo:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation>CRC32:</translation> <translation>CRC32:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5579,11 +5544,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation>Idioma</translation> <translation>Idioma</translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>English</translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance è un marchio registrato di Nintendo Co., Ltd.</translation>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished">Sconosciuto</translation> <translation type="unfinished">Sconosciuto</translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>Impossibile aprire il file di salvataggio: %1</translation> <translation>Impossibile aprire il file di salvataggio: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Impossibile aprire il file di gioco: %1</translation> <translation>Impossibile aprire il file di gioco: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Non riesco a strappare il pacchetto in una piattaforma inaspettata!</translation> <translation>Non riesco a strappare il pacchetto in una piattaforma inaspettata!</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation>Impossibile aprire il file snapshot per la lettura: %1</translation> <translation>Impossibile aprire il file snapshot per la lettura: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation>Impossibile aprire il file snapshot per la scrittura: %1</translation> <translation>Impossibile aprire il file snapshot per la scrittura: %1</translation>
</message> </message>
@ -4911,51 +4901,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation>Nome del gioco:</translation> <translation>Nome del gioco:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation>Nome interno:</translation> <translation>Nome interno:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation>ID del gioco:</translation> <translation>ID del gioco:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation>Dimensioni del file:</translation> <translation>Dimensioni del file:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation>CRC32:</translation> <translation>CRC32:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5770,11 +5735,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation>Lingua</translation> <translation>Lingua</translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>inglese</translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="552"/> <location filename="../SettingsView.ui" line="552"/>
<source>List view</source> <source>List view</source>

View File

@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd.</source>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1236,22 +1226,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1302,27 +1292,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4908,51 +4898,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5510,11 +5475,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance on Nintendo Co., Ltd rekisteröimä tuotemerkki.</translation>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5511,11 +5476,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd.</
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1238,22 +1228,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1304,27 +1294,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>Échec de l&apos;ouverture du fichier de sauvegarde : %1</translation> <translation>Échec de l&apos;ouverture du fichier de sauvegarde : %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Échec de l&apos;ouverture du fichier de jeu : %1</translation> <translation>Échec de l&apos;ouverture du fichier de jeu : %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation>Échec de l&apos;ouverture de l&apos;instantané pour lire : %1</translation> <translation>Échec de l&apos;ouverture de l&apos;instantané pour lire : %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation>Échec de l&apos;ouverture de l&apos;instantané pour écrire : %1</translation> <translation>Échec de l&apos;ouverture de l&apos;instantané pour écrire : %1</translation>
</message> </message>
@ -4930,51 +4920,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation>Nom du jeu&#xa0;:</translation> <translation>Nom du jeu&#xa0;:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation>Nom interne :</translation> <translation>Nom interne :</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation>ID du jeu :</translation> <translation>ID du jeu :</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation>Taille du fichier :</translation> <translation>Taille du fichier :</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation>CRC32 :</translation> <translation>CRC32 :</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5604,11 +5569,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation>Langue</translation> <translation>Langue</translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>anglais</translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ A Game Boy Advance a Nintendo Co., Ltd. bejegyzett védjegye</translation>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>Nem sikerült a mentésfájl megnyitása: %1</translation> <translation>Nem sikerült a mentésfájl megnyitása: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Nem sikerült a játékfájl megnyitása: %1</translation> <translation>Nem sikerült a játékfájl megnyitása: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <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> <translation type="unfinished">A játékkazettát nem lehet kirántani ismeretlen platformon!</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <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> <translation type="unfinished">A pillanatkép fájljának olvasásra való megnyitása sikertelen: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <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> <translation type="unfinished">A pillanatkép fájljának írásra való megnyitása sikertelen: %1</translation>
</message> </message>
@ -4907,51 +4897,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5453,11 +5418,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd.</source>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>: %1</translation> <translation>: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>: %1</translation> <translation>: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation>: %1</translation> <translation>: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation>: %1</translation> <translation>: %1</translation>
</message> </message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation>ID:</translation> <translation>ID:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation>CRC32:</translation> <translation>CRC32:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5607,11 +5572,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>English</translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance는 Nintendo Co., Ltd.의 등록 상표입니다.</translation>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation> : %1</translation> <translation> : %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation> : %1</translation> <translation> : %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation> : %1</translation> <translation> : %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation> : %1</translation> <translation> : %1</translation>
</message> </message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation> :</translation> <translation> :</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation> :</translation> <translation> :</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation> ID:</translation> <translation> ID:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation> :</translation> <translation> :</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation>CRC32:</translation> <translation>CRC32:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5768,11 +5733,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation></translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="552"/> <location filename="../SettingsView.ui" line="552"/>
<source>List view</source> <source>List view</source>

View File

@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd.</source>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1236,22 +1226,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1302,27 +1292,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>Gagal membuka fail tersimpan: %1</translation> <translation>Gagal membuka fail tersimpan: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Gagal membuka fail permainan: %1</translation> <translation>Gagal membuka fail permainan: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished">Gagal membuka fail snapshot untuk baca: %1</translation> <translation type="unfinished">Gagal membuka fail snapshot untuk baca: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished">Gagal membuka fail snapshot untuk menulis: %1</translation> <translation type="unfinished">Gagal membuka fail snapshot untuk menulis: %1</translation>
</message> </message>
@ -4908,51 +4898,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation>Nama permainan:</translation> <translation>Nama permainan:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation>Nama dalaman:</translation> <translation>Nama dalaman:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation>ID Permainan:</translation> <translation>ID Permainan:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation>Saiz fail:</translation> <translation>Saiz fail:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation>CRC32:</translation> <translation>CRC32:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5510,11 +5475,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation>Bahasa</translation> <translation>Bahasa</translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>Inggeris</translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance er et registrert varemerke tilhørende Nintendo Co., Ltd.</tran
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished">Ukjent</translation> <translation type="unfinished">Ukjent</translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Klarte ikke å åpne spillfil: %1</translation> <translation>Klarte ikke å åpne spillfil: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5511,11 +5476,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

File diff suppressed because it is too large Load Diff

View File

@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd.</source>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1236,22 +1226,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1302,27 +1292,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4910,51 +4900,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation type="unfinished">CRC32:</translation> <translation type="unfinished">CRC32:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5512,11 +5477,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd.</translation>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished">Desconhecido</translation> <translation type="unfinished">Desconhecido</translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>Falhou em abrir o arquivo do save: %1</translation> <translation>Falhou em abrir o arquivo do save: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Falhou em abrir o arquivo do jogo: %1</translation> <translation>Falhou em abrir o arquivo do jogo: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Não pode arrancar o pacote numa plataforma inesperada!</translation> <translation>Não pode arrancar o pacote numa plataforma inesperada!</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation>Falhou em abrir o arquivo do snapshot pra leitura: %1</translation> <translation>Falhou em abrir o arquivo do snapshot pra leitura: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation>Falhou em abrir o arquivo do snapshot pra gravação: %1</translation> <translation>Falhou em abrir o arquivo do snapshot pra gravação: %1</translation>
</message> </message>
@ -4911,51 +4901,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation>Nome do jogo:</translation> <translation>Nome do jogo:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation>Nome interno:</translation> <translation>Nome interno:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation>ID do Jogo:</translation> <translation>ID do Jogo:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation>Tamanho do arquivo:</translation> <translation>Tamanho do arquivo:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation>CRC32:</translation> <translation>CRC32:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5579,11 +5544,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation>Idioma</translation> <translation>Idioma</translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>Inglês</translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

File diff suppressed because it is too large Load Diff

View File

@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd.</source>
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1236,22 +1226,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1302,27 +1292,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4906,51 +4896,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5508,11 +5473,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance, Nintendo Co., Ltd.&apos;nin tescilli ticari markasıdır.</tra
<source>An update is available</source> <source>An update is available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="23"/>
<source>{text}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="33"/>
<source>{details}</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ArchiveInspector</name> <name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context> <context>
<name>QGBA::ApplicationUpdater</name> <name>QGBA::ApplicationUpdater</name>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="91"/> <location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source> <source>Stable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="94"/> <location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source> <source>Development</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="96"/> <location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished">Bilinmeyen</translation> <translation type="unfinished">Bilinmeyen</translation>
</message> </message>
<message> <message>
<location filename="../ApplicationUpdater.cpp" line="219"/> <location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source> <source>(None)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context> <context>
<name>QGBA::CoreController</name> <name>QGBA::CoreController</name>
<message> <message>
<location filename="../CoreController.cpp" line="712"/> <location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source> <source>Failed to open save file: %1</source>
<translation>Kayıt dosyası ılamadı: %1</translation> <translation>Kayıt dosyası ılamadı: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="743"/> <location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source> <source>Failed to open game file: %1</source>
<translation>Oyun dosyası ılamadı: %1</translation> <translation>Oyun dosyası ılamadı: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="768"/> <location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source> <source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Beklenmedik bir platformda kartı çıkaramazsın!</translation> <translation>Beklenmedik bir platformda kartı çıkaramazsın!</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="845"/> <location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source> <source>Failed to open snapshot file for reading: %1</source>
<translation>Anlık görüntü dosyası okuma için ılamadı: %1</translation> <translation>Anlık görüntü dosyası okuma için ılamadı: %1</translation>
</message> </message>
<message> <message>
<location filename="../CoreController.cpp" line="861"/> <location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source> <source>Failed to open snapshot file for writing: %1</source>
<translation>Anlık görüntü dosyası yazma için ılamadı: %1</translation> <translation>Anlık görüntü dosyası yazma için ılamadı: %1</translation>
</message> </message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source> <source>Game name:</source>
<translation>Oyun adı:</translation> <translation>Oyun adı:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="46"/> <location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source> <source>Internal name:</source>
<translation>Dahili İsim:</translation> <translation>Dahili İsim:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="63"/> <location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source> <source>Game ID:</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="80"/> <location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source> <source>File size:</source>
<translation>Dosya boyutu:</translation> <translation>Dosya boyutu:</translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation></translation>
</message>
<message> <message>
<location filename="../ROMInfo.ui" line="97"/> <location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source> <source>CRC32:</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation></translation>
</message>
</context> </context>
<context> <context>
<name>ReportView</name> <name>ReportView</name>
@ -5546,11 +5511,6 @@ Download size: %3</source>
<source>Language</source> <source>Language</source>
<translation>Dil</translation> <translation>Dil</translation>
</message> </message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>İngilizce</translation>
</message>
<message> <message>
<location filename="../SettingsView.ui" line="544"/> <location filename="../SettingsView.ui" line="544"/>
<source>Library:</source> <source>Library:</source>

File diff suppressed because it is too large Load Diff

View File

@ -37,6 +37,34 @@ static int32_t _mSDLReadTiltY(struct mRotationSource* rumble);
static int32_t _mSDLReadGyroZ(struct mRotationSource* rumble); static int32_t _mSDLReadGyroZ(struct mRotationSource* rumble);
static void _mSDLRotationSample(struct mRotationSource* source); static void _mSDLRotationSample(struct mRotationSource* source);
static struct SDL_JoystickCombo* _mSDLOpenJoystick(struct mSDLEvents* events, int i) {
SDL_Joystick* sdlJoystick = SDL_JoystickOpen(i);
if (!sdlJoystick) {
return NULL;
}
struct SDL_JoystickCombo* joystick = SDL_JoystickListAppend(&events->joysticks);
joystick->index = SDL_JoystickListSize(&events->joysticks) - 1;
joystick->joystick = sdlJoystick;
#if SDL_VERSION_ATLEAST(2, 0, 0)
joystick->id = SDL_JoystickInstanceID(joystick->joystick);
joystick->haptic = SDL_HapticOpenFromJoystick(joystick->joystick);
joystick->controller = SDL_GameControllerOpen(i);
#if SDL_VERSION_ATLEAST(2, 0, 14)
if (joystick->controller) {
if (SDL_GameControllerHasSensor(joystick->controller, SDL_SENSOR_GYRO) && !SDL_GameControllerIsSensorEnabled(joystick->controller, SDL_SENSOR_GYRO)) {
SDL_GameControllerSetSensorEnabled(joystick->controller, SDL_SENSOR_GYRO, SDL_TRUE);
}
if (SDL_GameControllerHasSensor(joystick->controller, SDL_SENSOR_ACCEL) && !SDL_GameControllerIsSensorEnabled(joystick->controller, SDL_SENSOR_ACCEL)) {
SDL_GameControllerSetSensorEnabled(joystick->controller, SDL_SENSOR_ACCEL, SDL_TRUE);
}
}
#endif
#else
joystick->id = SDL_JoystickIndex(joystick->joystick);
#endif
return joystick;
}
bool mSDLInitEvents(struct mSDLEvents* context) { bool mSDLInitEvents(struct mSDLEvents* context) {
#if SDL_VERSION_ATLEAST(2, 0, 4) #if SDL_VERSION_ATLEAST(2, 0, 4)
SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1"); SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1");
@ -50,6 +78,9 @@ bool mSDLInitEvents(struct mSDLEvents* context) {
if (SDL_InitSubSystem(SDL_INIT_HAPTIC) < 0) { if (SDL_InitSubSystem(SDL_INIT_HAPTIC) < 0) {
mLOG(SDL_EVENTS, ERROR, "SDL haptic initialization failed: %s", SDL_GetError()); mLOG(SDL_EVENTS, ERROR, "SDL haptic initialization failed: %s", SDL_GetError());
} }
if (SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) < 0) {
mLOG(SDL_EVENTS, ERROR, "SDL game controller initialization failed: %s", SDL_GetError());
}
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) { if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) {
mLOG(SDL_EVENTS, ERROR, "SDL video initialization failed: %s", SDL_GetError()); mLOG(SDL_EVENTS, ERROR, "SDL video initialization failed: %s", SDL_GetError());
} }
@ -64,19 +95,7 @@ bool mSDLInitEvents(struct mSDLEvents* context) {
if (!SDL_JoystickListSize(&context->joysticks)) { if (!SDL_JoystickListSize(&context->joysticks)) {
int i; int i;
for (i = 0; i < nJoysticks; ++i) { for (i = 0; i < nJoysticks; ++i) {
SDL_Joystick* sdlJoystick = SDL_JoystickOpen(i); _mSDLOpenJoystick(context, i);
if (!sdlJoystick) {
continue;
}
struct SDL_JoystickCombo* joystick = SDL_JoystickListAppend(&context->joysticks);
joystick->joystick = sdlJoystick;
joystick->index = SDL_JoystickListSize(&context->joysticks) - 1;
#if SDL_VERSION_ATLEAST(2, 0, 0)
joystick->id = SDL_JoystickInstanceID(joystick->joystick);
joystick->haptic = SDL_HapticOpenFromJoystick(joystick->joystick);
#else
joystick->id = SDL_JoystickIndex(joystick->joystick);
#endif
} }
} }
} }
@ -101,6 +120,7 @@ void mSDLDeinitEvents(struct mSDLEvents* context) {
for (i = 0; i < SDL_JoystickListSize(&context->joysticks); ++i) { for (i = 0; i < SDL_JoystickListSize(&context->joysticks); ++i) {
struct SDL_JoystickCombo* joystick = SDL_JoystickListGetPointer(&context->joysticks, i); struct SDL_JoystickCombo* joystick = SDL_JoystickListGetPointer(&context->joysticks, i);
#if SDL_VERSION_ATLEAST(2, 0, 0) #if SDL_VERSION_ATLEAST(2, 0, 0)
SDL_GameControllerClose(joystick->controller);
SDL_HapticClose(joystick->haptic); SDL_HapticClose(joystick->haptic);
#endif #endif
SDL_JoystickClose(joystick->joystick); SDL_JoystickClose(joystick->joystick);
@ -347,10 +367,6 @@ void mSDLUpdateJoysticks(struct mSDLEvents* events, const struct Configuration*
SDL_Event event; SDL_Event event;
while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED) > 0) { while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED) > 0) {
if (event.type == SDL_JOYDEVICEADDED) { if (event.type == SDL_JOYDEVICEADDED) {
SDL_Joystick* sdlJoystick = SDL_JoystickOpen(event.jdevice.which);
if (!sdlJoystick) {
continue;
}
ssize_t joysticks[MAX_PLAYERS]; ssize_t joysticks[MAX_PLAYERS];
ssize_t i; ssize_t i;
// Pointers can get invalidated, so we'll need to refresh them // Pointers can get invalidated, so we'll need to refresh them
@ -358,50 +374,34 @@ void mSDLUpdateJoysticks(struct mSDLEvents* events, const struct Configuration*
joysticks[i] = events->players[i]->joystick ? (ssize_t) SDL_JoystickListIndex(&events->joysticks, events->players[i]->joystick) : -1; joysticks[i] = events->players[i]->joystick ? (ssize_t) SDL_JoystickListIndex(&events->joysticks, events->players[i]->joystick) : -1;
events->players[i]->joystick = NULL; events->players[i]->joystick = NULL;
} }
struct SDL_JoystickCombo* joystick = SDL_JoystickListAppend(&events->joysticks); struct SDL_JoystickCombo* joystick = _mSDLOpenJoystick(events, event.jdevice.which);
joystick->joystick = sdlJoystick;
joystick->id = SDL_JoystickInstanceID(joystick->joystick);
joystick->index = SDL_JoystickListSize(&events->joysticks) - 1;
#if SDL_VERSION_ATLEAST(2, 0, 0)
joystick->haptic = SDL_HapticOpenFromJoystick(joystick->joystick);
#endif
for (i = 0; i < events->playersAttached && i < MAX_PLAYERS; ++i) { for (i = 0; i < events->playersAttached && i < MAX_PLAYERS; ++i) {
if (joysticks[i] != -1) { if (joysticks[i] != -1) {
events->players[i]->joystick = SDL_JoystickListGetPointer(&events->joysticks, joysticks[i]); events->players[i]->joystick = SDL_JoystickListGetPointer(&events->joysticks, joysticks[i]);
} }
} }
#if SDL_VERSION_ATLEAST(2, 0, 0)
char joystickName[34] = {0}; char joystickName[34] = {0};
SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick->joystick), joystickName, sizeof(joystickName)); SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick->joystick), joystickName, sizeof(joystickName));
#else
const char* joystickName = SDL_JoystickName(SDL_JoystickIndex(joystick->joystick));
if (joystickName)
#endif
{
for (i = 0; (int) i < events->playersAttached; ++i) { for (i = 0; (int) i < events->playersAttached; ++i) {
if (events->players[i]->joystick) { if (events->players[i]->joystick) {
continue; continue;
} }
if (events->preferredJoysticks[i] && strcmp(events->preferredJoysticks[i], joystickName) == 0) { if (events->preferredJoysticks[i] && strcmp(events->preferredJoysticks[i], joystickName) == 0) {
events->players[i]->joystick = joystick; events->players[i]->joystick = joystick;
if (config && events->players[i]->bindings) { if (config) {
mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName); mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName);
} }
return; return;
} }
} }
}
for (i = 0; (int) i < events->playersAttached; ++i) { for (i = 0; (int) i < events->playersAttached; ++i) {
if (events->players[i]->joystick) { if (events->players[i]->joystick) {
continue; continue;
} }
events->players[i]->joystick = joystick; events->players[i]->joystick = joystick;
if (config && events->players[i]->bindings if (config && joystickName[0]) {
#if !SDL_VERSION_ATLEAST(2, 0, 0)
&& joystickName
#endif
) {
mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName); mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName);
} }
break; break;
@ -726,11 +726,17 @@ static int32_t _readTilt(struct mSDLPlayer* player, int axis) {
static int32_t _mSDLReadTiltX(struct mRotationSource* source) { static int32_t _mSDLReadTiltX(struct mRotationSource* source) {
struct mSDLRotation* rotation = (struct mSDLRotation*) source; struct mSDLRotation* rotation = (struct mSDLRotation*) source;
if (rotation->axisX < 0) {
return rotation->accelX * -0x2000000;
}
return _readTilt(rotation->p, rotation->axisX); return _readTilt(rotation->p, rotation->axisX);
} }
static int32_t _mSDLReadTiltY(struct mRotationSource* source) { static int32_t _mSDLReadTiltY(struct mRotationSource* source) {
struct mSDLRotation* rotation = (struct mSDLRotation*) source; struct mSDLRotation* rotation = (struct mSDLRotation*) source;
if (rotation->axisY < 0) {
return rotation->accelY * -0x2000000;
}
return _readTilt(rotation->p, rotation->axisY); return _readTilt(rotation->p, rotation->axisY);
} }
@ -747,6 +753,30 @@ static void _mSDLRotationSample(struct mRotationSource* source) {
return; return;
} }
#if SDL_VERSION_ATLEAST(2, 0, 14)
if (rotation->p->joystick->controller) {
SDL_GameController* controller = rotation->p->joystick->controller;
if (SDL_GameControllerHasSensor(controller, SDL_SENSOR_ACCEL)) {
float accel[3];
int count = SDL_GameControllerGetSensorData(controller, SDL_SENSOR_ACCEL, accel, 3);
if (count >= 0) {
rotation->accelX = accel[0];
rotation->accelY = accel[2];
rotation->axisX = -1;
rotation->axisY = -1;
}
}
if (SDL_GameControllerHasSensor(controller, SDL_SENSOR_GYRO)) {
float theta[3];
int count = SDL_GameControllerGetSensorData(controller, SDL_SENSOR_GYRO, theta, 3);
if (count >= 0) {
rotation->zDelta = theta[1] / -10.f;
}
return;
}
}
#endif
int x = SDL_JoystickGetAxis(rotation->p->joystick->joystick, rotation->gyroX); int x = SDL_JoystickGetAxis(rotation->p->joystick->joystick, rotation->gyroX);
int y = SDL_JoystickGetAxis(rotation->p->joystick->joystick, rotation->gyroY); int y = SDL_JoystickGetAxis(rotation->p->joystick->joystick, rotation->gyroY);
union { union {

View File

@ -38,6 +38,7 @@ struct SDL_JoystickCombo {
size_t index; size_t index;
SDL_Joystick* joystick; SDL_Joystick* joystick;
#if SDL_VERSION_ATLEAST(2, 0, 0) #if SDL_VERSION_ATLEAST(2, 0, 0)
SDL_GameController* controller;
SDL_Haptic* haptic; SDL_Haptic* haptic;
SDL_JoystickID id; SDL_JoystickID id;
#else #else
@ -88,6 +89,8 @@ struct mSDLPlayer {
// Tilt // Tilt
int axisX; int axisX;
int axisY; int axisY;
float accelX;
float accelY;
// Gyro // Gyro
int gyroX; int gyroX;

View File

@ -43,7 +43,7 @@
#define ANALOG_DEADZONE 0x30 #define ANALOG_DEADZONE 0x30
static void _mapKey(struct mInputMap* map, uint32_t binding, int nativeKey, enum GBAKey key) { static void _mapKey(struct mInputMap* map, uint32_t binding, int nativeKey, int key) {
mInputBindKey(map, binding, __builtin_ctz(nativeKey), key); mInputBindKey(map, binding, __builtin_ctz(nativeKey), key);
} }
@ -124,6 +124,7 @@ static bool sgbCrop = false;
static int32_t tiltX; static int32_t tiltX;
static int32_t tiltY; static int32_t tiltY;
static int32_t gyroZ; static int32_t gyroZ;
static float gyroSensitivity = 1.f;
static uint32_t retraceCount; static uint32_t retraceCount;
static uint32_t referenceRetraceCount; static uint32_t referenceRetraceCount;
static bool frameLimiter = true; static bool frameLimiter = true;
@ -564,8 +565,26 @@ int main(int argc, char* argv[]) {
}, },
.nStates = 8 .nStates = 8
}, },
{
.title = "Gyroscope sensitivity",
.data = GUI_V_S("gyroSensitivity"),
.submenu = 0,
.state = 0,
.validStates = (const char*[]) {
"1x", "1x flipped", "2x", "2x flipped", "1/2x", "1/2x flipped"
}, },
.nConfigExtra = 5, .stateMappings = (const struct GUIVariant[]) {
GUI_V_F(1.f),
GUI_V_F(-1.f),
GUI_V_F(2.f),
GUI_V_F(-2.f),
GUI_V_F(0.5f),
GUI_V_F(-0.5f),
},
.nStates = 6
},
},
.nConfigExtra = 6,
.setup = _setup, .setup = _setup,
.teardown = 0, .teardown = 0,
.gameLoaded = _gameLoaded, .gameLoaded = _gameLoaded,
@ -976,6 +995,7 @@ void _unpaused(struct mGUIRunner* runner) {
if (mCoreConfigGetFloatValue(&runner->config, "stretchHeight", &stretch)) { if (mCoreConfigGetFloatValue(&runner->config, "stretchHeight", &stretch)) {
hStretch = fminf(1.0f, fmaxf(0.5f, stretch)); hStretch = fminf(1.0f, fmaxf(0.5f, stretch));
} }
mCoreConfigGetFloatValue(&runner->config, "gyroSensitivity", &gyroSensitivity);
} }
void _prepareForFrame(struct mGUIRunner* runner) { void _prepareForFrame(struct mGUIRunner* runner) {
@ -1220,7 +1240,7 @@ int32_t _readTiltY(struct mRotationSource* source) {
int32_t _readGyroZ(struct mRotationSource* source) { int32_t _readGyroZ(struct mRotationSource* source) {
UNUSED(source); UNUSED(source);
return gyroZ; return gyroZ * gyroSensitivity;
} }
static s8 WPAD_StickX(u8 chan, u8 right) { static s8 WPAD_StickX(u8 chan, u8 right) {