Skip to content

Commit

Permalink
Merge pull request #46 from bmsuseluda/doc/platformsTable
Browse files Browse the repository at this point in the history
chore: add table for supported platforms and emulators in readme
  • Loading branch information
bmsuseluda authored Dec 29, 2023
2 parents 8cf9709 + 27cbe76 commit 1b3c50a
Show file tree
Hide file tree
Showing 61 changed files with 686 additions and 9 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ coverage
/playwright-report/
/playwright/.cache/
/e2eTests/*Config/
/readme/build/
9 changes: 8 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@ node_modules
/.cache
coverage
/build
/public/build
/buildDesktop
/dist
/.idea
.env
/styled-system
/styled-system/
/test-results/
/playwright-report/
/playwright/.cache/
/e2eTests/*Config/
/readme/build/
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified .yarn/install-state.gz
Binary file not shown.
31 changes: 28 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,37 @@ If you have a game with mutiple discs, like `Final Fantasy VII`, the file name f

If you have multiple versions of a game you can specify them in brackets, e.g. the file name for the japanese version of `Castlevania` would be `Castlevania (J).nes`.

## Supported Emulators
## Supported Platforms and Emulators

Every Emulator needs to be configured in the source code of emuze by the developer.
Every Platform and Emulator needs to be configured in the source code of emuze by the developer.
Right now the following are supported:

[applicationsDB.server.ts](app/server/applicationsDB.server.ts)
| Platform | Emulators | Default Emulator |
|--------------|-----------|------------------|
| Sony Playstation | Duckstation<br>Mednafen | Duckstation |
| Sony Playstation 2 | PCSX2<br>Play | PCSX2 |
| Sony Playstation Portable | PPSSPP | PPSSPP |
| Nintendo Entertainment System | Nestopia<br>puNES<br>Mednafen<br>Ares | Nestopia |
| Super Nintendo Entertainment System | BSNES<br>Snes9x<br>Ares | BSNES |
| Nintendo Game Boy | mgba<br>Ares | mgba |
| Nintendo Game Boy Color | mgba | mgba |
| Nintendo Game Boy Advance | mgba<br>Ares | mgba |
| Nintendo DS | MelonDS<br>DeSmuME | MelonDS |
| Nintendo 3DS | Citra | Citra |
| Nintendo 64 | Ares<br>Mupen64Plus | Ares |
| Nintendo Gamecube | Dolphin | Dolphin |
| Nintendo Wii | Dolphin | Dolphin |
| PC Engine | Mednafen<br>Ares | Ares |
| PC Engine CD | Mednafen | Mednafen |
| Sega Master System | Ares<br>BlastEm<br>Mednafen | Ares |
| Sega Mega Drive | BlastEm<br>Ares | Ares |
| Sega 32X | Ares | Ares |
| Sega CD | Ares | Ares |
| Sega Saturn | Mednafen | Mednafen |
| Sega Dreamcast | Flycast | Flycast |
| Arcade | Mame | Mame |
| Neo Geo AES | Mame | Mame |
| Neo Geo CD | Mame | Mame |

> INFO: If you miss an emulator or find an error in the configuration, please create a pull request or issue.
Expand Down
10 changes: 9 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
"e2e:appDist": "yarn app:distLinux && cross-env NODE_ENV=production playwright test --ui",
"test-ct": "yarn clean && cross-env NODE_ENV=production yarn panda:codegen && playwright test -c playwright-ct.config.ts",
"test-ct:withoutClean": "playwright test -c playwright-ct.config.ts --ui",
"test-ct:ui": "yarn test-ct --ui"
"test-ct:ui": "yarn test-ct --ui",
"generate:readme": "del-cli dist ./readme/build && tsc -p ./readme/tsconfig.json && tsc-alias -p ./readme/tsconfig.json && mmarkdown"
},
"dependencies": {
"@radix-ui/react-checkbox": "^1.0.4",
Expand Down Expand Up @@ -108,11 +109,13 @@
"jest-when": "^3.5.2",
"json-server": "^0.17.4",
"lint-staged": "^13.2.3",
"mmarkdown": "^1.0.0",
"prettier": "^3.0.1",
"prop-types": "^15.8.1",
"require-from-string": "^2.0.2",
"storybook": "^7.5.2",
"ts-node": "^10.9.1",
"tsc-alias": "^1.8.8",
"typescript": "5.1.6",
"utility-types": "^3.10.0",
"vite": "^4.4.9",
Expand Down Expand Up @@ -159,6 +162,11 @@
"icon": "public/icons/icon512x512.png"
}
},
"mmarkdown": {
"src": "./readme/Template.md",
"out": "./README.md",
"scripts": "./readme/build/readme/scripts.js"
},
"main": "buildDesktop/main.js",
"packageManager": "yarn@4.0.1"
}
134 changes: 134 additions & 0 deletions readme/Template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# emuze

My main goal for emuze is to have a launcher that is as fast and simple as possible. With this you don't have to configure every emulator and fine tune metadata of your roms. If your roms are named correctly, a click on the import button should import your emulators and roms altogether and therefore no configuration is necessary.

## Features

- Fast and responsive UI
- Import all your emulators and roms with a click of just one button
- Fetches Metadata from [igdb](https://www.igdb.com) based on the filenames of your roms
- Gamepad support (x-input only)
- Windows and Linux support
- Can install missing emulators (linux only)

## Getting started

emuze asks for the following folders to work:

- Emulators folder (windows only)
- Roms folder

You can change the folders in the settings.

### Emulators Folder

This is the folder where your emulators are installed. It is only necessary on windows. On linux all emulators need to be installed via flatpak but emuze can do this for you.

```
emulators
|-> Mesen.0.9.9
|---> ...
|---> Mesen.exe
|---> ...
|-> duckstation-windows-x64-release
|---> ...
|---> duckstation-qt-x64-ReleaseLTCG.exe
|---> ...
```

### Roms Folder

The roms need to be grouped by their platform. E.g. `Final Fantasy VII.chd` needs to be stored in a folder `Playstation`.

```
roms
|-> Playstation
|---> Tekken 2.chd
|---> Crash Bandicoot.chd
|---> ...
|-> Super Nintendo
|---> Super Metroid.sfc
|---> Terranigma.sfc
|---> ...
```

## Metadata

Metadata will be fetched from [igdb](https://www.igdb.com). emuze crawls the name and alternative name of a game filtered by the specific platform.
The Search is case-insensitive.

> INFO: [igdb](https://www.igdb.com) is a community driven open source database for game information. If there is something missing or wrong, please help and correct it there.
### Games with a Subtitle

If a game has a subtitle, the subtitle needs to be in the file name.<br>
For the title `Max Payne 2` emuze wouldn't find metadata. Correct would be `Max Payne 2: The Fall of Max Payne.chd`.

On windows special characters like `:` can't be part of a file name, therefore you have to write it the following:
`Max Payne 2 - The Fall of Max Payne.chd`

### Games with multiple Discs

If you have a game with mutiple discs, like `Final Fantasy VII`, the file name for the first disc would be `Final Fantasy VII (Disc 1).chd`.

### Games with multiple Versions (e.g. Regions)

If you have multiple versions of a game you can specify them in brackets, e.g. the file name for the japanese version of `Castlevania` would be `Castlevania (J).nes`.

## Supported Platforms and Emulators

Every Platform and Emulator needs to be configured in the source code of emuze by the developer.
Right now the following are supported:

| Platform | Emulators | Default Emulator |
|--------------|-----------|------------------|
```mmd
return scripts.createPlatformsTable()
```

> INFO: If you miss an emulator or find an error in the configuration, please create a pull request or issue.
## Configuration

### Keyboard Shortcuts

`F11` Toggle fullscreen

### Commandline Arguments

`--fullscreen` Start in fullscreen

`--no-sandbox` Launch as a Non-Steam Game in SteamOS, see [Running on Steam Deck in Game mode](#running-on-steam-deck-in-game-mode)

## Known Issues

- Fetching metadata for games like `Super Mario Bros. / Tetris / World Cup` is not supported right now due to the limitations of special characters in a windows file name.

## Running on Steam Deck in Game mode

To run emuze on the Steam Deck, mark the AppImage as executable and add it via `Add a Non-Steam Game`.

Use `--no-sandbox` as a launch option to the added Shortcut in Steam via `Properties` -> `Shortcut` -> `LAUNCH OPTIONS`.

### Steam Input Profile

There is a Steam Input Profile with the name `emuze`, which has some hotkeys preconfigured for some emulators on the back pedals of the Steam Deck.

### Give Permission to your roms folder

The emulators on the Steam Deck are distributed via Flatpaks which run in a Sandbox. Out of the box flatpaks can only access folders in your home directory.
If your roms are stored somewhere else you can give access to this folder via `Flatseal`. You can find the app in the Discover-App-Store.

## Roadmap

There is a lot i would like to work on. The following features are the bigger ones in no specific order.

- Bundle emulators
- Preconfigure all emulators
- Release emuze on flathub
- Bundle open source bios implementations
- `Roms as Folder` support for emulators e.g. ScummVM or DosBox
- Filter and sorting of roms
- Integrate `How long to beat`
- Show controller glyphs
- Add option to convert bin/cue and iso files to chd
10 changes: 10 additions & 0 deletions readme/scripts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { categories } from "~/server/categoriesDB.server";

export const createPlatformsTable = () =>
Object.values(categories)
.map((category) => {
return `| ${category.names[0]} | ${category.applications
.map((application) => application.name)
.join("<br>")} | ${category.defaultApplication.name} |`;
})
.join("\n");
20 changes: 20 additions & 0 deletions readme/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"include": [
"scripts.ts",
"../app/server/categoriesDB.server.ts",
"../app/server/applicationsDB.server.ts"
],
"compilerOptions": {
"esModuleInterop": true,
"module": "commonjs",
"noImplicitAny": true,
"strict": true,
"baseUrl": ".",
"resolveJsonModule": true,
"skipLibCheck": true,
"paths": {
"~/*": ["../app/*"]
},
"outDir": "./build"
}
}
Loading

0 comments on commit 1b3c50a

Please sign in to comment.