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
- Options for muting when inactive, minimized, or for different players in multiplayer
- 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 64 kiB SRAM saves used in some bootlegs
- Discord Rich Presence now supports time elapsed
- Additional scaling shaders
Emulation fixes:
- ARM7: Fix unsigned multiply timing
- 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 Video: Render SGB border when unmasking with ATTR/PAL_SET (fixes mgba.io/i/2261)
- 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 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:
- ARM Decoder: Fix decoding of lsl r0 (fixes mgba.io/i/2349)
- 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)
- 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 maximum tile ID in caching for 256-color modes
- 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:
- 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)
- Qt: Rearrange menus some
- Qt: Clean up cheats dialog
- 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)
Emulation fixes:

View File

@ -11,7 +11,7 @@
CXX_GUARD_START
#ifndef DISABLE_THREADING
#if __STDC_VERSION__ >= 201112L
#if (__STDC_VERSION__ >= 201112L) && (__STDC_NO_THREADS__ != 1)
#define ThreadLocal _Thread_local void*
#define ThreadLocalInitKey(X)
#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_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; \
if ((R & 0xFFFFFF00) == 0xFFFFFF00 || !(R & 0xFFFFFF00)) { \
@ -52,6 +52,21 @@
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_ILL cpu->irqh.hitIllegal(cpu, opcode)

View File

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

View File

@ -24,7 +24,7 @@
#define ADDR_MODE_1_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->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 ## 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, \
int rd = (opcode >> 16) & 0xF; \
int rs = (opcode >> 8) & 0xF; \
int rm = opcode & 0xF; \
if (rd != ARM_PC) { \
ARM_WAIT_MUL(cpu->gprs[rs], 0); \
ARM_WAIT_ ## SIGNED ## MUL(cpu->gprs[rs], 0); \
BODY; \
S_BODY; \
} \
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, \
int rd = (opcode >> 12) & 0xF; \
int rdHi = (opcode >> 16) & 0xF; \
int rs = (opcode >> 8) & 0xF; \
int rm = opcode & 0xF; \
if (rdHi != ARM_PC && rd != ARM_PC) { \
ARM_WAIT_MUL(cpu->gprs[rs], WAIT); \
ARM_WAIT_ ## SIGNED ## MUL(cpu->gprs[rs], WAIT); \
BODY; \
S_BODY; \
} \
currentCycles += cpu->memory.activeNonseqCycles32 - cpu->memory.activeSeqCycles32)
#define DEFINE_MULTIPLY_INSTRUCTION_ARM(NAME, BODY, S_BODY) \
DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, ) \
DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME ## S, BODY, S_BODY)
#define DEFINE_MULTIPLY_INSTRUCTION_ARM(NAME, BODY, S_BODY, SIGNED) \
DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, , SIGNED) \
DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME ## S, BODY, S_BODY, SIGNED)
#define DEFINE_MULTIPLY_INSTRUCTION_2_ARM(NAME, BODY, S_BODY, WAIT) \
DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, , WAIT) \
DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME ## S, BODY, S_BODY, WAIT)
#define DEFINE_MULTIPLY_INSTRUCTION_2_ARM(NAME, BODY, S_BODY, SIGNED, WAIT) \
DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, , SIGNED, WAIT) \
DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME ## S, BODY, S_BODY, SIGNED, WAIT)
#define DEFINE_MULTIPLY_INSTRUCTION_3_ARM(NAME, BODY) \
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
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_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_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]), S)
DEFINE_MULTIPLY_INSTRUCTION_2_ARM(SMLAL,
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);
cpu->gprs[rd] = d;
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,
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]);
cpu->gprs[rd] = d;
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,
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);
cpu->gprs[rd] = d;
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,
uint64_t d = ARM_UXT_64(cpu->gprs[rm]) * ARM_UXT_64(cpu->gprs[rs]);
cpu->gprs[rd] = d;
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

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

View File

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

View File

@ -150,7 +150,6 @@ struct GBACore {
#ifndef DISABLE_THREADING
struct mVideoThreadProxy threadProxy;
#endif
int keys;
struct mCPUComponent* components[CPU_COMPONENT_MAX];
const struct Configuration* overrides;
struct mDebuggerPlatform* debuggerPlatform;
@ -209,9 +208,6 @@ static bool _GBACoreInit(struct mCore* core) {
gbacore->proxyRenderer.logger = NULL;
#endif
gbacore->keys = 0;
gba->keySource = &gbacore->keys;
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
mDirectorySetInit(&core->dirs);
#endif
@ -718,20 +714,20 @@ static bool _GBACoreSaveState(struct mCore* core, void* state) {
}
static void _GBACoreSetKeys(struct mCore* core, uint32_t keys) {
struct GBACore* gbacore = (struct GBACore*) core;
gbacore->keys = keys;
GBATestKeypadIRQ(core->board);
struct GBA* gba = core->board;
gba->keysActive = keys;
GBATestKeypadIRQ(gba);
}
static void _GBACoreAddKeys(struct mCore* core, uint32_t keys) {
struct GBACore* gbacore = (struct GBACore*) core;
gbacore->keys |= keys;
GBATestKeypadIRQ(core->board);
struct GBA* gba = core->board;
gba->keysActive |= keys;
GBATestKeypadIRQ(gba);
}
static void _GBACoreClearKeys(struct mCore* core, uint32_t keys) {
struct GBACore* gbacore = (struct GBACore*) core;
gbacore->keys &= ~keys;
struct GBA* gba = core->board;
gba->keysActive &= ~keys;
}
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);
gba->keySource = 0;
gba->keysActive = 0;
gba->keysLast = 0;
gba->rotationSource = 0;
gba->luminanceSource = 0;
gba->rtcSource = 0;
@ -876,18 +877,22 @@ void GBAFrameEnded(struct GBA* gba) {
}
void GBATestKeypadIRQ(struct GBA* gba) {
if (gba->keysActive == gba->keysLast) {
return;
}
uint16_t keycnt = gba->memory.io[REG_KEYCNT >> 1];
if (!(keycnt & 0x4000)) {
return;
}
int isAnd = keycnt & 0x8000;
if (!gba->keySource) {
// TODO?
return;
}
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) {
GBARaiseIRQ(gba, IRQ_KEYPAD, 0);

View File

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

View File

@ -381,7 +381,7 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) {
wait += waitstatesRegion[REGION_WORKING_RAM];
#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 \
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 = mTileCacheSystemInfoSetPaletteCount(sysconfig, 0); // 1 palettes
sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 2048);
sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 1024);
mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 1), sysconfig, 0, 0);
mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 1), config);
sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 1024);
sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 512);
mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 3), sysconfig, 0x10000, 0x100);
mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 3), config);

View File

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

View File

@ -563,10 +563,14 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render
if (!dirty) {
if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) {
softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx;
softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy;
softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx;
softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy;
if (softwareRenderer->bg[2].enabled == 4) {
softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx;
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].sy += softwareRenderer->bg[3].dmy;
}
}
return;
}
@ -645,25 +649,29 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render
GBAVideoSoftwareRendererPostprocessBuffer(softwareRenderer);
if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) {
softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx;
softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy;
softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx;
softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy;
if (softwareRenderer->bg[2].enabled == 4) {
softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx;
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].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;
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;
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;
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;
DIRTY_SCANLINE(softwareRenderer, y);
}
@ -741,14 +749,22 @@ static void GBAVideoSoftwareRendererPutPixels(struct GBAVideoRenderer* renderer,
static void _enableBg(struct GBAVideoSoftwareRenderer* renderer, int bg, bool active) {
int wasActive = renderer->bg[bg].enabled;
if (!active) {
renderer->bg[bg].enabled = 0;
if (renderer->nextY == 0 || (wasActive > 0 && wasActive < 4)) {
renderer->bg[bg].enabled = 0;
} else if (wasActive == 4) {
renderer->bg[bg].enabled = -2;
}
} 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
renderer->bg[bg].enabled = 4;
} else if (GBARegisterDISPCNTGetMode(renderer->dispcnt) > 2) {
renderer->bg[bg].enabled = 2;
} else {
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;
}
break;
default:
break;
}
} else if (node->nextEvent <= 0) {
if (!node->id) {

View File

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

View File

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

View File

@ -131,6 +131,7 @@ QImage AssetView::compositeMap(int map, mMapCacheEntry* mapStatus) {
QImage AssetView::compositeObj(const ObjInfo& objInfo) {
mTileCache* tileCache = mTileCacheSetGetPointer(&m_cacheSet->tiles, objInfo.paletteSet);
unsigned maxTiles = mTileCacheSystemInfoGetMaxTiles(tileCache->sysConfig);
const color_t* rawPalette = mTileCacheGetPalette(tileCache, objInfo.paletteId);
unsigned colors = 1 << objInfo.bits;
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);
image.setColorTable(palette);
image.fill(0);
uchar* bits = image.bits();
unsigned t = objInfo.tile;
for (unsigned y = 0; y < objInfo.height; ++y) {
for (unsigned x = 0; x < objInfo.width; ++x, ++t) {
for (unsigned y = 0; y < objInfo.height && t < maxTiles; ++y) {
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);
}
t += objInfo.stride - objInfo.width;

View File

@ -183,14 +183,17 @@ CoreController::CoreController(mCore* core, QObject* parent)
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));
}
message = QString().vsprintf(format, args);
QMetaObject::invokeMethod(controller, "logPosted", Q_ARG(int, level), Q_ARG(int, category), Q_ARG(const QString&, message));
if (level == mLOG_FATAL) {
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">
<widget class="QLabel" name="name">
<property name="text">
<string>{NAME}</string>
<string notr="true">{NAME}</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@ -50,7 +50,7 @@
<item row="1" column="1">
<widget class="QLabel" name="title">
<property name="text">
<string>{TITLE}</string>
<string notr="true">{TITLE}</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@ -67,7 +67,7 @@
<item row="2" column="1">
<widget class="QLabel" name="id">
<property name="text">
<string>{ID}</string>
<string notr="true">{ID}</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@ -84,7 +84,7 @@
<item row="3" column="1">
<widget class="QLabel" name="size">
<property name="text">
<string>{SIZE}</string>
<string notr="true">{SIZE}</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@ -101,7 +101,7 @@
<item row="4" column="1">
<widget class="QLabel" name="crc">
<property name="text">
<string>{CRC}</string>
<string notr="true">{CRC}</string>
</property>
<property name="textInteractionFlags">
<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/");
for (auto name : ts.entryList()) {
if (!name.endsWith(".qm") || !name.startsWith(binaryName)) {
@ -651,7 +652,7 @@ void SettingsView::updateConfig() {
emit biosLoaded(mPLATFORM_GBA, m_ui.gbaBios->text());
}
void SettingsView::reloadConfig() {
void SettingsView::reloadConfig() {
loadSetting("bios", m_ui.gbaBios);
loadSetting("gba.bios", m_ui.gbaBios);
loadSetting("gb.bios", m_ui.gbBios);
@ -825,7 +826,7 @@ void SettingsView::reloadConfig() {
} else if (multiplayerAudio == QLatin1String("active")) {
m_ui.multiplayerAudioActive->setChecked(true);
} else {
m_ui.multiplayerAudioAll->setChecked(true);
m_ui.multiplayerAudioAll->setChecked(true);
}
}

View File

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

View File

@ -41,17 +41,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message>
<location filename="../ApplicationUpdatePrompt.ui" line="14"/>
<source>An update is available</source>
<translation type="unfinished"></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>
<translation>Hay una actualización disponible</translation>
</message>
</context>
<context>
@ -173,7 +163,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message>
<location filename="../CheatsView.ui" line="39"/>
<source>Add New Code</source>
<translation type="unfinished"></translation>
<translation>Añadir nuevo código</translation>
</message>
<message>
<location filename="../CheatsView.ui" line="60"/>
@ -183,12 +173,12 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message>
<location filename="../CheatsView.ui" line="93"/>
<source>Add Lines</source>
<translation type="unfinished"></translation>
<translation>Añadir líneas</translation>
</message>
<message>
<location filename="../CheatsView.ui" line="100"/>
<source>Code type</source>
<translation type="unfinished"></translation>
<translation>Tipo de código</translation>
</message>
<message>
<location filename="../CheatsView.ui" line="53"/>
@ -1013,7 +1003,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message>
<location filename="../OverrideView.ui" line="146"/>
<source>EEPROM 8kB</source>
<translation type="unfinished"></translation>
<translation>EEPROM 8kB</translation>
</message>
<message>
<location filename="../OverrideView.ui" line="151"/>
@ -1023,7 +1013,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd.</translation>
<message>
<location filename="../OverrideView.ui" line="156"/>
<source>SRAM 64kB (bootlegs only)</source>
<translation type="unfinished"></translation>
<translation>SRAM 64kB (sólo bootlegs)</translation>
</message>
<message>
<location filename="../OverrideView.ui" line="164"/>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished">Desconocido</translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation>Error al abrir el archivo de guardado: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>Error al abrir el archivo del juego: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>¡No se puede remover el cartucho en esta plataforma!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Error al leer del archivo de captura: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Error al escribir al archivo de captura: %1</translation>
</message>
@ -4911,51 +4901,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation>Nombre del juego:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation>Nombre interno:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation>Id. de juego:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation>Tamaño del archivo:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation>CRC32:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5579,11 +5544,6 @@ Download size: %3</source>
<source>Language</source>
<translation>Idioma</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>English</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished">Sconosciuto</translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation>Impossibile aprire il file di salvataggio: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>Impossibile aprire il file di gioco: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Non riesco a strappare il pacchetto in una piattaforma inaspettata!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Impossibile aprire il file snapshot per la lettura: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Impossibile aprire il file snapshot per la scrittura: %1</translation>
</message>
@ -4911,51 +4901,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation>Nome del gioco:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation>Nome interno:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation>ID del gioco:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation>Dimensioni del file:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation>CRC32:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5770,11 +5735,6 @@ Download size: %3</source>
<source>Language</source>
<translation>Lingua</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>inglese</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="552"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1236,22 +1226,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1302,27 +1292,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation>
</message>
@ -4908,51 +4898,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5510,11 +5475,6 @@ Download size: %3</source>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation>
</message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5511,11 +5476,6 @@ Download size: %3</source>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1238,22 +1228,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1304,27 +1294,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation>Échec de l&apos;ouverture du fichier de sauvegarde : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>Échec de l&apos;ouverture du fichier de jeu : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Échec de l&apos;ouverture de l&apos;instantané pour lire : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Échec de l&apos;ouverture de l&apos;instantané pour écrire : %1</translation>
</message>
@ -4930,51 +4920,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation>Nom du jeu&#xa0;:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation>Nom interne :</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation>ID du jeu :</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation>Taille du fichier :</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation>CRC32 :</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5604,11 +5569,6 @@ Download size: %3</source>
<source>Language</source>
<translation>Langue</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>anglais</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation>Nem sikerült a mentésfájl megnyitása: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>Nem sikerült a játékfájl megnyitása: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished">A játékkazettát nem lehet kirántani ismeretlen platformon!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished">A pillanatkép fájljának olvasásra való megnyitása sikertelen: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished">A pillanatkép fájljának írásra való megnyitása sikertelen: %1</translation>
</message>
@ -4907,51 +4897,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5453,11 +5418,6 @@ Download size: %3</source>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>: %1</translation>
</message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation>:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation>:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation>ID:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation>:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation>CRC32:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5607,11 +5572,6 @@ Download size: %3</source>
<source>Language</source>
<translation></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>English</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<source>Library:</source>

View File

@ -43,16 +43,6 @@ Game Boy Advance는 Nintendo Co., Ltd.의 등록 상표입니다.</translation>
<source>An update is available</source>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation> : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation> : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation> : %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation> : %1</translation>
</message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation> :</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation> :</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation> ID:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation> :</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation>CRC32:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5768,11 +5733,6 @@ Download size: %3</source>
<source>Language</source>
<translation></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="552"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1236,22 +1226,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1302,27 +1292,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation>Gagal membuka fail tersimpan: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>Gagal membuka fail permainan: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished">Gagal membuka fail snapshot untuk baca: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished">Gagal membuka fail snapshot untuk menulis: %1</translation>
</message>
@ -4908,51 +4898,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation>Nama permainan:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation>Nama dalaman:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation>ID Permainan:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation>Saiz fail:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation>CRC32:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5510,11 +5475,6 @@ Download size: %3</source>
<source>Language</source>
<translation>Bahasa</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>Inggeris</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished">Ukjent</translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>Klarte ikke å åpne spillfil: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation>
</message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5511,11 +5476,6 @@ Download size: %3</source>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1236,22 +1226,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1302,27 +1292,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation>
</message>
@ -4910,51 +4900,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation type="unfinished">CRC32:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5512,11 +5477,6 @@ Download size: %3</source>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished">Desconhecido</translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation>Falhou em abrir o arquivo do save: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>Falhou em abrir o arquivo do jogo: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Não pode arrancar o pacote numa plataforma inesperada!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Falhou em abrir o arquivo do snapshot pra leitura: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Falhou em abrir o arquivo do snapshot pra gravação: %1</translation>
</message>
@ -4911,51 +4901,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation>Nome do jogo:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation>{NAME}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation>Nome interno:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation>{TITLE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation>ID do Jogo:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation>{ID}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation>Tamanho do arquivo:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation>{SIZE}</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation>CRC32:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation>{CRC}</translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5579,11 +5544,6 @@ Download size: %3</source>
<source>Language</source>
<translation>Idioma</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>Inglês</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1236,22 +1226,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1302,27 +1292,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation type="unfinished"></translation>
</message>
@ -4906,51 +4896,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5508,11 +5473,6 @@ Download size: %3</source>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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>
<translation type="unfinished"></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>
</context>
<context>
<name>ArchiveInspector</name>
@ -1237,22 +1227,22 @@ Download size: %3</source>
<context>
<name>QGBA::ApplicationUpdater</name>
<message>
<location filename="../ApplicationUpdater.cpp" line="91"/>
<location filename="../ApplicationUpdater.cpp" line="90"/>
<source>Stable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="94"/>
<location filename="../ApplicationUpdater.cpp" line="93"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="96"/>
<location filename="../ApplicationUpdater.cpp" line="95"/>
<source>Unknown</source>
<translation type="unfinished">Bilinmeyen</translation>
</message>
<message>
<location filename="../ApplicationUpdater.cpp" line="219"/>
<location filename="../ApplicationUpdater.cpp" line="218"/>
<source>(None)</source>
<translation type="unfinished"></translation>
</message>
@ -1303,27 +1293,27 @@ Download size: %3</source>
<context>
<name>QGBA::CoreController</name>
<message>
<location filename="../CoreController.cpp" line="712"/>
<location filename="../CoreController.cpp" line="715"/>
<source>Failed to open save file: %1</source>
<translation>Kayıt dosyası ılamadı: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="743"/>
<location filename="../CoreController.cpp" line="746"/>
<source>Failed to open game file: %1</source>
<translation>Oyun dosyası ılamadı: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="768"/>
<location filename="../CoreController.cpp" line="771"/>
<source>Can&apos;t yank pack in unexpected platform!</source>
<translation>Beklenmedik bir platformda kartı çıkaramazsın!</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="845"/>
<location filename="../CoreController.cpp" line="848"/>
<source>Failed to open snapshot file for reading: %1</source>
<translation>Anlık görüntü dosyası okuma için ılamadı: %1</translation>
</message>
<message>
<location filename="../CoreController.cpp" line="861"/>
<location filename="../CoreController.cpp" line="864"/>
<source>Failed to open snapshot file for writing: %1</source>
<translation>Anlık görüntü dosyası yazma için ılamadı: %1</translation>
</message>
@ -4909,51 +4899,26 @@ Download size: %3</source>
<source>Game name:</source>
<translation>Oyun adı:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="33"/>
<source>{NAME}</source>
<translation></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="46"/>
<source>Internal name:</source>
<translation>Dahili İsim:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="53"/>
<source>{TITLE}</source>
<translation></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="63"/>
<source>Game ID:</source>
<translation></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="70"/>
<source>{ID}</source>
<translation></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="80"/>
<source>File size:</source>
<translation>Dosya boyutu:</translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="87"/>
<source>{SIZE}</source>
<translation></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="97"/>
<source>CRC32:</source>
<translation></translation>
</message>
<message>
<location filename="../ROMInfo.ui" line="104"/>
<source>{CRC}</source>
<translation></translation>
</message>
</context>
<context>
<name>ReportView</name>
@ -5546,11 +5511,6 @@ Download size: %3</source>
<source>Language</source>
<translation>Dil</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="529"/>
<source>English</source>
<translation>İngilizce</translation>
</message>
<message>
<location filename="../SettingsView.ui" line="544"/>
<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 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) {
#if SDL_VERSION_ATLEAST(2, 0, 4)
SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1");
@ -50,6 +78,9 @@ bool mSDLInitEvents(struct mSDLEvents* context) {
if (SDL_InitSubSystem(SDL_INIT_HAPTIC) < 0) {
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) {
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)) {
int i;
for (i = 0; i < nJoysticks; ++i) {
SDL_Joystick* sdlJoystick = SDL_JoystickOpen(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
_mSDLOpenJoystick(context, i);
}
}
}
@ -101,6 +120,7 @@ void mSDLDeinitEvents(struct mSDLEvents* context) {
for (i = 0; i < SDL_JoystickListSize(&context->joysticks); ++i) {
struct SDL_JoystickCombo* joystick = SDL_JoystickListGetPointer(&context->joysticks, i);
#if SDL_VERSION_ATLEAST(2, 0, 0)
SDL_GameControllerClose(joystick->controller);
SDL_HapticClose(joystick->haptic);
#endif
SDL_JoystickClose(joystick->joystick);
@ -347,10 +367,6 @@ void mSDLUpdateJoysticks(struct mSDLEvents* events, const struct Configuration*
SDL_Event event;
while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED) > 0) {
if (event.type == SDL_JOYDEVICEADDED) {
SDL_Joystick* sdlJoystick = SDL_JoystickOpen(event.jdevice.which);
if (!sdlJoystick) {
continue;
}
ssize_t joysticks[MAX_PLAYERS];
ssize_t i;
// Pointers can get invalidated, so we'll need to refresh them
@ -358,38 +374,26 @@ 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;
events->players[i]->joystick = NULL;
}
struct SDL_JoystickCombo* joystick = SDL_JoystickListAppend(&events->joysticks);
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
struct SDL_JoystickCombo* joystick = _mSDLOpenJoystick(events, event.jdevice.which);
for (i = 0; i < events->playersAttached && i < MAX_PLAYERS; ++i) {
if (joysticks[i] != -1) {
events->players[i]->joystick = SDL_JoystickListGetPointer(&events->joysticks, joysticks[i]);
}
}
#if SDL_VERSION_ATLEAST(2, 0, 0)
char joystickName[34] = {0};
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) {
if (events->players[i]->joystick) {
continue;
}
if (events->preferredJoysticks[i] && strcmp(events->preferredJoysticks[i], joystickName) == 0) {
events->players[i]->joystick = joystick;
if (config && events->players[i]->bindings) {
mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName);
}
return;
for (i = 0; (int) i < events->playersAttached; ++i) {
if (events->players[i]->joystick) {
continue;
}
if (events->preferredJoysticks[i] && strcmp(events->preferredJoysticks[i], joystickName) == 0) {
events->players[i]->joystick = joystick;
if (config) {
mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName);
}
return;
}
}
for (i = 0; (int) i < events->playersAttached; ++i) {
@ -397,11 +401,7 @@ void mSDLUpdateJoysticks(struct mSDLEvents* events, const struct Configuration*
continue;
}
events->players[i]->joystick = joystick;
if (config && events->players[i]->bindings
#if !SDL_VERSION_ATLEAST(2, 0, 0)
&& joystickName
#endif
) {
if (config && joystickName[0]) {
mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName);
}
break;
@ -726,11 +726,17 @@ static int32_t _readTilt(struct mSDLPlayer* player, int axis) {
static int32_t _mSDLReadTiltX(struct mRotationSource* source) {
struct mSDLRotation* rotation = (struct mSDLRotation*) source;
if (rotation->axisX < 0) {
return rotation->accelX * -0x2000000;
}
return _readTilt(rotation->p, rotation->axisX);
}
static int32_t _mSDLReadTiltY(struct mRotationSource* source) {
struct mSDLRotation* rotation = (struct mSDLRotation*) source;
if (rotation->axisY < 0) {
return rotation->accelY * -0x2000000;
}
return _readTilt(rotation->p, rotation->axisY);
}
@ -747,6 +753,30 @@ static void _mSDLRotationSample(struct mRotationSource* source) {
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 y = SDL_JoystickGetAxis(rotation->p->joystick->joystick, rotation->gyroY);
union {

View File

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

View File

@ -43,7 +43,7 @@
#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);
}
@ -124,6 +124,7 @@ static bool sgbCrop = false;
static int32_t tiltX;
static int32_t tiltY;
static int32_t gyroZ;
static float gyroSensitivity = 1.f;
static uint32_t retraceCount;
static uint32_t referenceRetraceCount;
static bool frameLimiter = true;
@ -564,8 +565,26 @@ int main(int argc, char* argv[]) {
},
.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"
},
.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 = 5,
.nConfigExtra = 6,
.setup = _setup,
.teardown = 0,
.gameLoaded = _gameLoaded,
@ -976,6 +995,7 @@ void _unpaused(struct mGUIRunner* runner) {
if (mCoreConfigGetFloatValue(&runner->config, "stretchHeight", &stretch)) {
hStretch = fminf(1.0f, fmaxf(0.5f, stretch));
}
mCoreConfigGetFloatValue(&runner->config, "gyroSensitivity", &gyroSensitivity);
}
void _prepareForFrame(struct mGUIRunner* runner) {
@ -1220,7 +1240,7 @@ int32_t _readTiltY(struct mRotationSource* source) {
int32_t _readGyroZ(struct mRotationSource* source) {
UNUSED(source);
return gyroZ;
return gyroZ * gyroSensitivity;
}
static s8 WPAD_StickX(u8 chan, u8 right) {