diff --git a/gbajs3/src/components/modals/load-local-rom.spec.tsx b/gbajs3/src/components/modals/load-local-rom.spec.tsx
index e0b053d0..56c54ed4 100644
--- a/gbajs3/src/components/modals/load-local-rom.spec.tsx
+++ b/gbajs3/src/components/modals/load-local-rom.spec.tsx
@@ -58,10 +58,7 @@ describe('', () => {
vi.spyOn(contextHooks, 'useEmulatorContext').mockImplementation(() => ({
...originalEmulator(),
emulator: {
- listRoms: () => ['rom1.gba'],
- filePaths: () => ({
- gamePath: '/games'
- })
+ listRoms: () => ['rom1.gba']
} as GBAEmulator
}));
@@ -74,7 +71,7 @@ describe('', () => {
await userEvent.click(localRom);
expect(runGameSpy).toHaveBeenCalledOnce();
- expect(runGameSpy).toHaveBeenCalledWith('/games/rom1.gba');
+ expect(runGameSpy).toHaveBeenCalledWith('rom1.gba');
expect(setIsModalOpenSpy).toHaveBeenCalledWith(false);
});
diff --git a/gbajs3/src/components/modals/load-local-rom.tsx b/gbajs3/src/components/modals/load-local-rom.tsx
index fc9dd0a7..58b63d4d 100644
--- a/gbajs3/src/components/modals/load-local-rom.tsx
+++ b/gbajs3/src/components/modals/load-local-rom.tsx
@@ -92,7 +92,7 @@ export const LoadLocalRomModal = () => {
{
- runGame(emulator?.filePaths().gamePath + '/' + romName);
+ runGame(romName);
setIsModalOpen(false);
}}
>
diff --git a/gbajs3/src/components/modals/load-rom.spec.tsx b/gbajs3/src/components/modals/load-rom.spec.tsx
index de030c21..2dd4fa46 100644
--- a/gbajs3/src/components/modals/load-rom.spec.tsx
+++ b/gbajs3/src/components/modals/load-rom.spec.tsx
@@ -37,10 +37,7 @@ describe('', () => {
vi.spyOn(contextHooks, 'useEmulatorContext').mockImplementation(() => ({
...originalEmulator(),
emulator: {
- uploadRom: uploadRomSpy,
- filePaths: () => ({
- gamePath: '/games'
- })
+ uploadRom: uploadRomSpy
} as GBAEmulator
}));
@@ -66,7 +63,7 @@ describe('', () => {
expect(uploadRomSpy).toHaveBeenCalledOnce();
expect(syncActionIfEnabledSpy).toHaveBeenCalledOnce();
expect(runGameSpy).toHaveBeenCalledOnce();
- expect(runGameSpy).toHaveBeenCalledWith('/games/rom1.gba');
+ expect(runGameSpy).toHaveBeenCalledWith('rom1.gba');
});
it('renders message when there are no roms', () => {
diff --git a/gbajs3/src/components/modals/load-rom.tsx b/gbajs3/src/components/modals/load-rom.tsx
index 401eedf8..f486ba8b 100644
--- a/gbajs3/src/components/modals/load-rom.tsx
+++ b/gbajs3/src/components/modals/load-rom.tsx
@@ -103,7 +103,7 @@ export const LoadRomModal = () => {
if (shouldUploadRom) {
const runCallback = () => {
syncActionIfEnabled();
- runGame(emulator?.filePaths().gamePath + '/' + romFile.name);
+ runGame(romFile.name);
};
emulator?.uploadRom(romFile, runCallback);
diff --git a/gbajs3/src/components/modals/load-save.spec.tsx b/gbajs3/src/components/modals/load-save.spec.tsx
index 0c518bae..c03f5979 100644
--- a/gbajs3/src/components/modals/load-save.spec.tsx
+++ b/gbajs3/src/components/modals/load-save.spec.tsx
@@ -34,10 +34,7 @@ describe('', () => {
vi.spyOn(contextHooks, 'useEmulatorContext').mockImplementation(() => ({
...originalEmulator(),
emulator: {
- uploadSaveOrSaveState: uploadSaveOrSaveStateSpy,
- filePaths: () => ({
- savePath: '/saves'
- })
+ uploadSaveOrSaveState: uploadSaveOrSaveStateSpy
} as GBAEmulator
}));
diff --git a/gbajs3/src/components/modals/upload-public-external-roms.spec.tsx b/gbajs3/src/components/modals/upload-public-external-roms.spec.tsx
index 1132bdda..aa7341d3 100644
--- a/gbajs3/src/components/modals/upload-public-external-roms.spec.tsx
+++ b/gbajs3/src/components/modals/upload-public-external-roms.spec.tsx
@@ -38,10 +38,7 @@ describe('', () => {
vi.spyOn(contextHooks, 'useEmulatorContext').mockImplementation(() => ({
...originalEmulator(),
emulator: {
- uploadRom: uploadRomSpy,
- filePaths: () => ({
- gamePath: '/games'
- })
+ uploadRom: uploadRomSpy
} as GBAEmulator
}));
@@ -79,7 +76,7 @@ describe('', () => {
expect(uploadRomSpy).toHaveBeenCalledOnce();
expect(syncActionIfEnabledSpy).toHaveBeenCalledOnce();
expect(runGameSpy).toHaveBeenCalledOnce();
- expect(runGameSpy).toHaveBeenCalledWith('/games/good_rom.gba');
+ expect(runGameSpy).toHaveBeenCalledWith('good_rom.gba');
expect(onLoadOrDismissSpy).toHaveBeenCalledOnce();
expect(onLoadOrDismissSpy).toHaveBeenCalledWith('loaded');
@@ -100,10 +97,7 @@ describe('', () => {
vi.spyOn(contextHooks, 'useEmulatorContext').mockImplementation(() => ({
...originalEmulator(),
emulator: {
- uploadRom: uploadRomSpy,
- filePaths: () => ({
- gamePath: '/games'
- })
+ uploadRom: uploadRomSpy
} as GBAEmulator
}));
diff --git a/gbajs3/src/components/modals/upload-public-external-roms.tsx b/gbajs3/src/components/modals/upload-public-external-roms.tsx
index 1fcd172b..98f629d6 100644
--- a/gbajs3/src/components/modals/upload-public-external-roms.tsx
+++ b/gbajs3/src/components/modals/upload-public-external-roms.tsx
@@ -72,9 +72,7 @@ export const UploadPublicExternalRomsModal = ({
if (!isExternalRomLoading && externalRomFile && currentRomURL) {
const runCallback = () => {
syncActionIfEnabled();
- const hasSucceeded = runGame(
- emulator?.filePaths().gamePath + '/' + externalRomFile.name
- );
+ const hasSucceeded = runGame(externalRomFile.name);
if (hasSucceeded) {
onLoadOrDismiss('loaded');
setIsModalOpen(false);
diff --git a/gbajs3/src/components/modals/upload-rom.spec.tsx b/gbajs3/src/components/modals/upload-rom.spec.tsx
index c8b13d70..2176eca6 100644
--- a/gbajs3/src/components/modals/upload-rom.spec.tsx
+++ b/gbajs3/src/components/modals/upload-rom.spec.tsx
@@ -38,10 +38,7 @@ describe('', () => {
vi.spyOn(contextHooks, 'useEmulatorContext').mockImplementation(() => ({
...originalEmulator(),
emulator: {
- uploadRom: uploadRomSpy,
- filePaths: () => ({
- gamePath: '/games'
- })
+ uploadRom: uploadRomSpy
} as GBAEmulator
}));
@@ -67,11 +64,12 @@ describe('', () => {
await userEvent.click(screen.getByRole('button', { name: 'Upload' }));
+ expect(uploadRomSpy).toHaveBeenCalledOnce();
expect(uploadRomSpy).toHaveBeenCalledWith(testRom, expect.anything());
expect(syncActionIfEnabledSpy).toHaveBeenCalledOnce();
expect(runGameSpy).toHaveBeenCalledOnce();
- expect(runGameSpy).toHaveBeenCalledWith('/games/rom1.gba');
+ expect(runGameSpy).toHaveBeenCalledWith('rom1.gba');
expect(setIsModalOpenSpy).toHaveBeenCalledWith(false);
});
@@ -94,10 +92,7 @@ describe('', () => {
// needs to be a consistent object
const testEmu = {
- uploadRom: uploadRomSpy,
- filePaths: () => ({
- gamePath: '/games'
- })
+ uploadRom: uploadRomSpy
} as GBAEmulator;
vi.spyOn(contextHooks, 'useModalContext').mockImplementation(() => ({
@@ -140,7 +135,7 @@ describe('', () => {
expect(syncActionIfEnabledSpy).toHaveBeenCalledOnce();
expect(runGameSpy).toHaveBeenCalledOnce();
- expect(runGameSpy).toHaveBeenCalledWith('/games/good_rom.gba');
+ expect(runGameSpy).toHaveBeenCalledWith('good_rom.gba');
expect(setIsModalOpenSpy).toHaveBeenCalledWith(false);
});
@@ -158,10 +153,7 @@ describe('', () => {
...originalEmulator(),
emulator: {
uploadRom: uploadRomSpy,
- run: emulatorRunSpy,
- filePaths: () => ({
- gamePath: '/games'
- })
+ run: emulatorRunSpy
} as GBAEmulator
}));
diff --git a/gbajs3/src/components/modals/upload-rom.tsx b/gbajs3/src/components/modals/upload-rom.tsx
index c09fe20b..540eb4e7 100644
--- a/gbajs3/src/components/modals/upload-rom.tsx
+++ b/gbajs3/src/components/modals/upload-rom.tsx
@@ -60,9 +60,7 @@ export const UploadRomModal = () => {
if (shouldUploadExternalRom) {
const runCallback = () => {
syncActionIfEnabled();
- const hasSucceeded = runGame(
- emulator?.filePaths().gamePath + '/' + externalRomFile.name
- );
+ const hasSucceeded = runGame(externalRomFile.name);
if (hasSucceeded) {
setIsModalOpen(false);
}
@@ -96,9 +94,7 @@ export const UploadRomModal = () => {
const runCallback = () => {
syncActionIfEnabled();
- const hasSucceeded = runGame(
- emulator?.filePaths().gamePath + '/' + romFile.name
- );
+ const hasSucceeded = runGame(romFile.name);
if (hasSucceeded) {
setIsModalOpen(false);
}
diff --git a/gbajs3/src/hooks/emulator/use-quick-reload.spec.tsx b/gbajs3/src/hooks/emulator/use-quick-reload.spec.tsx
index a1cba7da..d7c67b99 100644
--- a/gbajs3/src/hooks/emulator/use-quick-reload.spec.tsx
+++ b/gbajs3/src/hooks/emulator/use-quick-reload.spec.tsx
@@ -18,6 +18,7 @@ describe('useQuickReload hook', () => {
setCanvas: vi.fn(),
canvas: null,
emulator: {
+ getCurrentGameName: () => undefined,
quickReload: emulatorQuickReloadSpy
} as GBAEmulator
}));
@@ -46,9 +47,6 @@ describe('useQuickReload hook', () => {
setCanvas: vi.fn(),
canvas: null,
emulator: {
- filePaths: () => ({
- gamePath: '/games'
- }),
getCurrentGameName: () => 'some_rom.gba'
} as GBAEmulator
}));
@@ -67,7 +65,7 @@ describe('useQuickReload hook', () => {
});
expect(runGameSpy).toHaveBeenCalledOnce();
- expect(runGameSpy).toHaveBeenCalledWith('/games/some_rom.gba');
+ expect(runGameSpy).toHaveBeenCalledWith('some_rom.gba');
expect(emulatorQuickReloadSpy).not.toHaveBeenCalled();
expect(setIsRunningSpy).toHaveBeenCalledOnce();
@@ -79,10 +77,7 @@ describe('useQuickReload hook', () => {
const runGameSpy = vi.fn(() => true);
const setIsRunningSpy = vi.fn();
- localStorage.setItem(
- emulatorGameNameLocalStorageKey,
- '"/games/some_rom_2.gba"'
- );
+ localStorage.setItem(emulatorGameNameLocalStorageKey, '"some_rom_2.gba"');
vi.spyOn(contextHooks, 'useEmulatorContext').mockImplementation(() => ({
setCanvas: vi.fn(),
@@ -106,7 +101,7 @@ describe('useQuickReload hook', () => {
});
expect(runGameSpy).toHaveBeenCalledOnce();
- expect(runGameSpy).toHaveBeenCalledWith('/games/some_rom_2.gba');
+ expect(runGameSpy).toHaveBeenCalledWith('some_rom_2.gba');
expect(emulatorQuickReloadSpy).not.toHaveBeenCalled();
expect(setIsRunningSpy).toHaveBeenCalledOnce();
diff --git a/gbajs3/src/hooks/emulator/use-quick-reload.tsx b/gbajs3/src/hooks/emulator/use-quick-reload.tsx
index 11d0dd3b..9c3e7638 100644
--- a/gbajs3/src/hooks/emulator/use-quick-reload.tsx
+++ b/gbajs3/src/hooks/emulator/use-quick-reload.tsx
@@ -14,16 +14,13 @@ export const useQuickReload = () => {
);
const quickReload = useCallback(() => {
+ const currentGameName = emulator?.getCurrentGameName();
+
if (isRunning) {
emulator?.quickReload();
- } else if (emulator?.getCurrentGameName()) {
- const isSuccessfulRun = runGame(
- emulator.filePaths().gamePath + '/' + emulator.getCurrentGameName()
- );
- setIsRunning(!!isSuccessfulRun);
- } else if (storedGameName) {
- const isSuccessfulRun = runGame(storedGameName);
- setIsRunning(!!isSuccessfulRun);
+ } else {
+ const gameName = currentGameName ?? storedGameName;
+ if (gameName) setIsRunning(runGame(gameName));
}
}, [emulator, isRunning, setIsRunning, runGame, storedGameName]);
diff --git a/gbajs3/src/hooks/emulator/use-run-game.spec.tsx b/gbajs3/src/hooks/emulator/use-run-game.spec.tsx
index 87e9845f..7bc30108 100644
--- a/gbajs3/src/hooks/emulator/use-run-game.spec.tsx
+++ b/gbajs3/src/hooks/emulator/use-run-game.spec.tsx
@@ -29,7 +29,10 @@ describe('useRunGame hook', () => {
canvas: null,
emulator: {
run: emulatorRunSpy,
- setVolume: emulatorSetVolumeSpy
+ setVolume: emulatorSetVolumeSpy,
+ filePaths: () => ({
+ gamePath: '/data/games'
+ })
} as GBAEmulator
}));
@@ -49,11 +52,11 @@ describe('useRunGame hook', () => {
const { result } = renderHookWithContext(() => useRunGame());
act(() => {
- expect(result.current('/games/some_rom.gba')).toBeTruthy();
+ expect(result.current('some_rom.gba')).toBeTruthy();
});
expect(emulatorRunSpy).toHaveBeenCalledOnce();
- expect(emulatorRunSpy).toHaveBeenCalledWith('/games/some_rom.gba');
+ expect(emulatorRunSpy).toHaveBeenCalledWith('/data/games/some_rom.gba');
expect(setIsRunningSpy).toHaveBeenCalledOnce();
expect(setIsRunningSpy).toHaveBeenCalledWith(true);
@@ -61,7 +64,7 @@ describe('useRunGame hook', () => {
// set stored game name
expect(setItemSpy).toHaveBeenCalledWith(
emulatorGameNameLocalStorageKey,
- '"/games/some_rom.gba"'
+ '"some_rom.gba"'
);
// set volume
@@ -97,7 +100,10 @@ describe('useRunGame hook', () => {
isFastForwardEnabled: () => false,
setVolume: vi.fn() as (v: number) => void,
remapKeyBindings: emulatorRemapKeyBindingsSpy,
- setFastForwardMultiplier: emulatorSetFastForwardMultiplierSpy
+ setFastForwardMultiplier: emulatorSetFastForwardMultiplierSpy,
+ filePaths: () => ({
+ gamePath: '/data/games'
+ })
} as GBAEmulator
}));
@@ -115,7 +121,7 @@ describe('useRunGame hook', () => {
const { result } = renderHookWithContext(() => useRunGame());
act(() => {
- expect(result.current('/games/some_rom.gba')).toBeTruthy();
+ expect(result.current('some_rom.gba')).toBeTruthy();
});
expect(emulatorRemapKeyBindingsSpy).toHaveBeenCalledOnce();
diff --git a/gbajs3/src/hooks/emulator/use-run-game.tsx b/gbajs3/src/hooks/emulator/use-run-game.tsx
index 70355d45..31346007 100644
--- a/gbajs3/src/hooks/emulator/use-run-game.tsx
+++ b/gbajs3/src/hooks/emulator/use-run-game.tsx
@@ -42,13 +42,15 @@ export const useRunGame = () => {
const { addCallbacks } = useAddCallbacks();
const run = useCallback(
- (romPath: string) => {
+ (romName: string) => {
+ const romPath = `${emulator?.filePaths().gamePath}/${romName}`;
const isSuccessfulRun = emulator?.run(romPath);
setIsRunning(!!isSuccessfulRun);
- setStoredGameName(romPath);
- emulator?.setVolume(currentEmulatorVolume);
+ setStoredGameName(romName);
if (isSuccessfulRun) {
+ emulator?.setVolume(currentEmulatorVolume);
+
if (currentKeyBindings) emulator?.remapKeyBindings(currentKeyBindings);
if (fastForwardMultiplier > 1 && !emulator?.isFastForwardEnabled())