├── .github └── workflows │ ├── deploy-retroseek.yml │ ├── generate-readme.yml │ └── tag-guardian.yml ├── .gitignore ├── LICENSE ├── README.md ├── arcade_capcom.csv ├── arcade_irem.csv ├── arcade_sega.csv ├── arcade_snk.csv ├── arcade_taito.csv ├── console_nec_cdrom2.csv ├── console_nec_pcengine_turbografx_supergrafx.csv ├── console_nec_pcfx.csv ├── console_nintendo_64dd.csv ├── console_nintendo_famicom_nes.csv ├── console_nintendo_famicomdisksystem.csv ├── console_nintendo_gameboy.csv ├── console_nintendo_nintendo64.csv ├── console_nintendo_satellaview.csv ├── console_nintendo_superfamicom_snes.csv ├── console_nintendo_virtualboy.csv ├── console_pioneer_laseractive.csv ├── console_sega_gamegear.csv ├── console_sega_markIII_mastersystem.csv ├── console_sega_megacd_segacd.csv ├── console_sega_megadrive_genesis.csv ├── console_sega_sg1000_sc3000_othellomultivision.csv ├── console_sega_super32x.csv ├── console_snk_neogeopocket_neogeopocketcolor.csv ├── requirements.txt ├── scripts ├── README_TEMPLATE.md ├── generate_readme.py └── tag_guardian.py ├── src └── retroseek │ ├── .gitignore │ ├── RetroSeek.tsx │ ├── components │ ├── GameList.tsx │ └── SearchForm.tsx │ ├── index.html │ ├── main.tsx │ ├── models │ └── Game.ts │ ├── package-lock.json │ ├── package.json │ ├── services │ ├── CSVReader.ts │ └── GameService.ts │ ├── styles │ ├── GameList.css │ ├── RetroSeek.css │ ├── SearchForm.css │ └── main.css │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts └── tags.yml /.github/workflows/deploy-retroseek.yml: -------------------------------------------------------------------------------- 1 | name: Deploy RetroSeek to GitHub Pages 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | paths: 7 | - 'src/retroseek/**' 8 | - 'tags.yml' 9 | workflow_dispatch: 10 | pull_request: 11 | types: [ opened, reopened, synchronize, edited ] 12 | paths: 13 | - 'src/retroseek/**' 14 | - 'tags.yml' 15 | 16 | permissions: 17 | contents: read 18 | pages: write 19 | id-token: write 20 | 21 | jobs: 22 | build: 23 | runs-on: ubuntu-latest 24 | 25 | steps: 26 | - name: Checkout repository 27 | uses: actions/checkout@v4 28 | 29 | - name: Setup Node.js 30 | uses: actions/setup-node@v4 31 | with: 32 | node-version: '20.18.3' 33 | 34 | - name: Install dependencies 35 | run: npm ci 36 | working-directory: ./src/retroseek 37 | 38 | - name: Build project 39 | run: npm run build -- --out-dir ./build 40 | env: 41 | PUBLIC_URL: /GameDataBase 42 | CI: true 43 | GENERATE_SOURCEMAP: false 44 | working-directory: ./src/retroseek 45 | 46 | - name: Verify build output 47 | run: | 48 | if [ -d "./src/retroseek/build" ]; then 49 | echo "Build directory exists and contains:" 50 | ls -la ./src/retroseek/build 51 | else 52 | echo "Build directory does not exist." 53 | exit 1 54 | fi 55 | 56 | - name: Setup Pages 57 | uses: actions/configure-pages@v5 58 | 59 | - name: Upload artifact 60 | uses: actions/upload-pages-artifact@v3 61 | with: 62 | path: ./src/retroseek/build 63 | 64 | deploy: 65 | needs: build 66 | runs-on: ubuntu-latest 67 | environment: 68 | name: ${{ github.event_name == 'pull_request' && 'github-pages-preview' || 'github-pages' }} 69 | # Waiting for Preview URL feature url: ${{ github.event_name == 'pull_request' && format('{0}pull/{1}', steps.deployment.outputs.page_url, github.event.pull_request.number) || steps.deployment.outputs.page_url }} 70 | url: ${{ steps.deployment.outputs.page_url }} 71 | 72 | steps: 73 | - name: Deploy to GitHub Pages 74 | id: deployment 75 | uses: actions/deploy-pages@v4 76 | with: 77 | artifact_name: github-pages 78 | # Waiting for Preview URL feature preview: ${{ github.event_name == 'pull_request' }} -------------------------------------------------------------------------------- /.github/workflows/generate-readme.yml: -------------------------------------------------------------------------------- 1 | name: Generate README 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | paths: 7 | - 'scripts/generate_readme.py' 8 | - 'scripts/README_TEMPLATE.md' 9 | - 'tags.yml' 10 | 11 | workflow_dispatch: 12 | pull_request: 13 | types: [ opened, reopened, synchronize, edited ] 14 | paths: 15 | - 'scripts/generate_readme.py' 16 | - 'scripts/README_TEMPLATE.md' 17 | - 'tags.yml' 18 | 19 | jobs: 20 | generate-readme: 21 | runs-on: ubuntu-latest 22 | 23 | steps: 24 | # Checkout the repository 25 | - uses: actions/checkout@v4 26 | with: 27 | fetch-depth: 1 # Shallow clone to improve speed 28 | 29 | # Set up Python 30 | - name: Set up Python 31 | uses: actions/setup-python@v5 32 | with: 33 | python-version: '3.10' 34 | cache: pip 35 | cache-dependency-path: requirements.txt 36 | 37 | # Cache pip packages 38 | - name: Get pip cache dir 39 | id: pip-cache 40 | run: echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT 41 | 42 | - name: Cache pip packages 43 | uses: actions/cache@v3 44 | with: 45 | path: ${{ steps.pip-cache.outputs.dir }} 46 | key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} 47 | restore-keys: | 48 | ${{ runner.os }}-pip- 49 | 50 | # Install dependencies 51 | - name: Install dependencies 52 | run: pip install -r requirements.txt 53 | 54 | # Generate README 55 | - name: Generate README 56 | run: | 57 | python scripts/generate_readme.py 58 | 59 | # Commit and push changes 60 | - name: Commit and push changes 61 | if: github.event_name == 'pull_request' 62 | run: | 63 | git config user.name "github-actions[bot]" 64 | git config user.email "github-actions[bot]@users.noreply.github.com" 65 | 66 | # Stage changes 67 | git add README.md 68 | 69 | # Commit changes if any 70 | git commit -m "docs: auto-generate README [skip ci]" || echo "No changes to commit" 71 | 72 | # Attempt to pull and rebase, resolving conflicts automatically 73 | git pull --rebase -X theirs origin ${{ github.head_ref }} || ( 74 | echo "Rebase failed, conflicts detected" && 75 | git diff --name-only --diff-filter=U && # List conflicting files 76 | for file in $(git diff --name-only --diff-filter=U); do 77 | echo "Conflict in $file:" && 78 | echo "----------------------------------------" && 79 | cat $file && # Display the content of the conflicting file 80 | echo "----------------------------------------"; 81 | done && 82 | git rebase --abort 83 | ) 84 | 85 | # Push changes to the head branch 86 | git push origin HEAD:${{ github.head_ref }} 87 | 88 | - name: Add README to Summary 89 | uses: actions/github-script@v7 90 | with: 91 | script: | 92 | const fs = require('fs'); 93 | const report = fs.readFileSync('README.md', 'utf8'); 94 | await core.summary 95 | .addHeading('Generated README') 96 | .addRaw(report) 97 | .write(); 98 | 99 | -------------------------------------------------------------------------------- /.github/workflows/tag-guardian.yml: -------------------------------------------------------------------------------- 1 | name: Tag Guardian Report 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | paths: 7 | - '**.csv' 8 | - 'tags.yml' 9 | - 'scripts/tag_guardian.py' 10 | workflow_dispatch: 11 | pull_request: 12 | types: [ opened, reopened, synchronize, edited ] 13 | paths: 14 | - '**.csv' 15 | - 'tags.yml' 16 | - 'scripts/tag_guardian.py' 17 | 18 | jobs: 19 | generate-report: 20 | runs-on: ubuntu-latest 21 | 22 | steps: 23 | - uses: actions/checkout@v4 24 | with: 25 | fetch-depth: 1 # Shallow clone to improve the speed 26 | 27 | - name: Set up Python 28 | uses: actions/setup-python@v5 29 | with: 30 | python-version: '3.10' 31 | cache: pip 32 | cache-dependency-path: requirements.txt 33 | 34 | - name: Get pip cache dir 35 | id: pip-cache 36 | run: echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT 37 | 38 | - name: Cache pip packages 39 | uses: actions/cache@v3 40 | with: 41 | path: ${{ steps.pip-cache.outputs.dir }} 42 | key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} 43 | restore-keys: | 44 | ${{ runner.os }}-pip- 45 | 46 | - name: Install dependencies 47 | run: pip install -r requirements.txt 48 | 49 | - name: Run Tag Guardian 50 | run: | 51 | python -m scripts.tag_guardian 52 | 53 | - name: Add Main Report to Summary 54 | uses: actions/github-script@v7 55 | with: 56 | script: | 57 | const fs = require('fs'); 58 | const report = fs.readFileSync('tag_guardian_report.md', 'utf8'); 59 | await core.summary 60 | .addHeading('Tag Guardian Validation Report') 61 | .addRaw(report) 62 | .write(); 63 | 64 | - name: Upload All Reports 65 | uses: actions/upload-artifact@v4 66 | with: 67 | name: tag-guardian-reports 68 | path: | 69 | tag_guardian_report.md 70 | reports/ 71 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Tag Guardian Reports 2 | tag_guardian_report.md 3 | tag_guardian_errors.md 4 | tag_guardian_warnings.md 5 | reports/ 6 | 7 | # Python 8 | __pycache__/ 9 | *.py[cod] 10 | *$py.class 11 | .Python 12 | *.so 13 | 14 | # Environments 15 | .env 16 | .venv 17 | env/ 18 | venv/ 19 | ENV/ 20 | 21 | # IDE 22 | .idea/ 23 | .vscode/ 24 | *.swp 25 | *.swo 26 | .codesight/ 27 | reports/ 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GameDataBase © 2024 by PigSaint is licensed under CC BY 4.0 2 | 3 | Creative Commons Attribution 4.0 International 4 | 5 | This license requires that reusers give credit to the creator. It allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, even for commercial purposes. 6 | 7 | To view a copy of this license, visit https://creativecommons.org/licenses/by/4.0/ 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GameDataBase 2 | 3 | [![Patrons](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.patreon.com%2Fapi%2Fcampaigns%2F11667791&query=data.attributes.patron_count&suffix=%20Patrons&color=FF5441&label=Patreon&logo=Patreon&logoColor=FF5441&style=for-the-badge)](https://patreon.com/GameDataBase) 4 | [![Monthly](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dgamedatabase%26type%3Dpledges%26suffix%3D%2520USD%2520%252F%2520MO&color=FF5481&label=Patreon&logo=Patreon&logoColor=FF5441&style=for-the-badge)](https://patreon.com/gamedatabase) 5 | [![Status](https://img.shields.io/badge/Status-Active-success?style=for-the-badge)](https://patreon.com/GameDataBase)[![Creation Count](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.patreon.com%2Fapi%2Fcampaigns%2F11667791&query=data.attributes.creation_count&suffix=%20Entries&color=blue&label=&style=for-the-badge)](https://patreon.com/GameDataBase) 6 | 7 | [Join GameDataBase on Patreon and consider supporting the project](https://www.patreon.com/GameDataBase) 8 | 9 | GameDataBase project aims to provide the most detailed information about every videogame (console, computer and arcade) for sorting purposes. Goal is to unify in one place all available useful information for emulation projects like MiSTer, to make possible more efficient and specific searches. GameDataBase will be published in different files (by platform). 10 | 11 | ## CSV Fields 12 | 13 | | **Field** | Description | 14 | |-----------|-------------| 15 | | **Screen title @ Exact** | Original title exactly as displayed in-game, particularly useful for preserving Japanese titles in their original characters | 16 | | **Cover Title @ Exact** | Title exactly as shown on physical media cover/packaging | 17 | | **ID** | Unique identifier for different versions/releases of the same game | 18 | | **Date** | Release date in YYYY-MM-DD format (partial dates like YYYY or YYYY-MM are acceptable) | 19 | | **Developer** | Company/team that developed the game | 20 | | **Publisher** | Company that published/distributed the game | 21 | | **Tags** | Game classification tags using the defined taxonomy | 22 | | **MAME filename** | ROM filename as used in MAME, only for Arcade games | 23 | | **MD5 hash** | MD5 checksum of the game file | 24 | | **SHA1 hash** | SHA1 checksum of the game file | 25 | | **SHA256 hash** | SHA256 checksum of the game file | 26 | | **SHA512 hash** | SHA512 checksum of the game file | 27 | 28 | ## Guide for tags 29 | 30 | GameDataBase uses a simple tag taxonomy to classify games in as many ways as possible. These tags' main purpose is to improve sorting and searching. Of course, this list will be updated as new ones emerge from darkness. 31 | 32 | ## Tag Structure Guide 33 | 34 | GameDataBase uses a hierarchical tag system with up to three levels of depth: 35 | 36 | | Level | Symbol | Description | Example | 37 | |-------|--------|-------------------|--------------------------| 38 | | 1 | `#` | Main tag | `#genre` | 39 | | 2 | `:` | Subtag | `#genre:sports` | 40 | | 3 | `>` | Children value | `#genre:sports>wrestling` | 41 | 42 | Multiple tags and attributes can be combined. For example: 43 | 44 | ```ts 45 | #genre:sports>wrestling #players:2:vs 46 | ``` 47 | 48 | This means: Wrestling sports game, 2 players, versus mode. 49 | 50 | Tag combinations examples: 51 | 52 | ```ts 53 | #genre:action>runandgun // Action game with run and gun theme 54 | #genre:sports>soccer #players:2 // Soccer game for 2 players 55 | #genre:board>chess #input:joystick>4 // Chess game with 4-way joystick control 56 | #genre:shmup>v #search:tate>cw // Vertical shoot'em up in clockwise TATE mode 57 | #genre:puzzle>drop #players:2:vs // Drop puzzle game with 2 players in versus mode 58 | #genre:adventure>survivalhorror // Adventure game with survival horror elements 59 | #input:joystick>4:buttons>2 // 4-way joystick and 2 buttons 60 | #players:2:coop // 2 players cooperative 61 | #based:movie #lang:en // English game based on a movie 62 | ``` 63 | 64 | The `>` level only applies to its immediate `:` subtag. 65 | 66 | 67 | --- 68 | 69 | ## Tags Overview 70 | 71 |
72 | #input - Input system 73 | 74 | | Subcategory | Description | Children | Children Description | 75 | |-------------|-------------|----------|--------------------| 76 | | `:joystick` | Joystick | `>2h`
`>2v`
`>3`
`>4`
`>8`
`>double`
`>rotary` | 2-way horizontal
2-way vertical
3-way
4-way
8-way
Double joystick
Rotary joystick | 77 | | `:stick` | Stick | `>twin` | Twin stick | 78 | | `:trackball` | Trackball | | | 79 | | `:paddle` | Paddle | | | 80 | | `:spinner` | Spinner | | | 81 | | `:wheel` | Wheel | | | 82 | | `:dial` | Dial | | | 83 | | `:lightgun` | Lightgun | | | 84 | | `:optical` | Optical device | | | 85 | | `:positional` | Positional crank | `>2`
`>3` | Two positions
Three positions | 86 | | `:buttons` | In-game buttons | `>1`
`>2`
`>3`
`>4`
`>5`
`>6`
`>7`
`>8`
`>11`
`>12`
`>19`
`>23`
`>27`
`>pneumatic` | 1 button
2 buttons
3 buttons
4 buttons
5 buttons
6 buttons
7 buttons
8 buttons
11 buttons
12 buttons
19 keys
23 keys
27 keys
Pneumatic button | 87 | | `:pedals` | Foot pedals | `>1`
`>2` | One pedal
Two pedals | 88 | | `:puncher` | Puncher | | | 89 | | `:motion` | Motion detection device | | | 90 | 91 |
92 | 93 |
94 | #players - Players 95 | 96 | | Subcategory | Description | 97 | |-------------|-------------| 98 | | `:1` | Single player | 99 | | `:2` | 2 players | 100 | | `:3` | 3 players | 101 | | `:4` | 4 players | 102 | | `:5` | 5 players | 103 | | `:6` | 6 players | 104 | | `:8` | 8 players | 105 | | `:9` | 9 players | 106 | | `:10` | 10 players | 107 | | `:12` | 12 players | 108 | | `:vs` | Versus | 109 | | `:coop` | Cooperative | 110 | | `:alt` | Alternating | 111 | 112 |
113 | 114 |
115 | #genre - Genre 116 | 117 | | Subcategory | Description | Children | Children Description | 118 | |-------------|-------------|----------|--------------------| 119 | | `:action` | Action | `>platformer`
`>maze`
`>blockbreaker`
`>runandgun`
`>hackandslash`
`>metroidvania`
`>roguelite` | Platformer
Maze
Block breaker
Run and gun
Hack and slash
Metroidvania
Roguelite | 120 | | `:adventure` | Adventure | `>pointandclick`
`>visualnovel`
`>survivalhorror`
`>text` | Point and click
Visual novel
Survival horror
Text | 121 | | `:board` | Classic analogic board game | `>cards`
`>hanafuda`
`>chess`
`>shougi`
`>go`
`>mahjong`
`>reversi`
`>othello`
`>party`
`>jankenpon` | Classic cards
Hanafuda
Chess
Shōgi
Go
Mahjong
Reversi
Othello
Party
Rock paper scissors | 122 | | `:brawler` | Brawler / Beat'em up | | | 123 | | `:fighting` | Fighting | | | 124 | | `:minigames` | Minigames | | | 125 | | `:parlor` | Classic analogic arcade games | `>pinball`
`>jackpot`
`>pachinko`
`>darts`
`>bowling`
`>billiards`
`>mogurataiji`
`>kiddieride`
`>mechanical` | Pinball
Jackpot
Pachinko
Darts
Bowling
Billiards
Whac-A-Mole
Kiddie ride
Mechanical | 126 | | `:quiz` | Quiz | | | 127 | | `:racing` | Racing | `>combat`
`>driving` | Combat racing
Non-competition driving | 128 | | `:rpg` | Role-Playing Game | `>a`
`>j`
`>s`
`>dungeoncrawler` | ARPG / Action RPG
JRPG
SRPG / Tactics RPG
Dungeon crawler | 129 | | `:rhythm` | Rhythm | `>karaoke`
`>dance` | Karaoke
Dance | 130 | | `:shmup` | Shoot'em up | `>h`
`>v`
`>i`
`>danmaku` | Horizontal
Vertical
Isometric
Bullet hell | 131 | | `:shooting` | Aim-based shooting games | `>gallery`
`>rail`
`>fps`
`>tps` | Shooting gallery
Rail shooter
FPS / First person Shooter
TPS / Third person shooter | 132 | | `:puzzle` | Puzzle | `>drop`
`>mind` | Drop pieces puzzle
Mind game | 133 | | `:sim` | Simulation | `>strategy`
`>cardgame`
`>flight`
`>train`
`>date`
`>otome`
`>life`
`>farm`
`>pet`
`>fishing`
`>god`
`>derby`
`>building`
`>cooking` | Strategy
Card game
Flight simulator
Train simulator
Date simulator
Otome game / 乙女ゲーム
Life simulator
Farm simulator
Pet simulator
Fishing
God simulator
Derby horse ride
Building
Cooking | 134 | | `:sports` | Sports | `>soccer`
`>basketball`
`>baseball`
`>volleyball`
`>rugby`
`>football`
`>dodgeball`
`>hockey`
`>skiing`
`>skateboarding`
`>snowboarding`
`>tennis`
`>pingpong`
`>paddle`
`>squash`
`>badminton`
`>flyingdisc`
`>cycling`
`>formula1`
`>rally`
`>nascar`
`>motogp`
`>motocross`
`>karting`
`>jetski`
`>golf`
`>cricket`
`>boxing`
`>kickboxing`
`>wrestling`
`>sumo`
`>karate`
`>judo`
`>kendo`
`>mma`
`>decathlon`
`>running`
`>archery`
`>swimming`
`>rowing`
`>kayak`
`>surf` | Soccer
Basketball
Baseball
Volleyball
Rugby
American football
Dodgeball
Ice hockey
Skiing
Skateboarding
Snowboarding
Tennis
Table tennis
Paddle
Squash
Badminton
Flying disc / Frisbee
Cycling
Formula 1
Rally
NASCAR
Moto GP
Motocross
Karting
Jet ski / PWC
Golf
Cricket
Boxing
Kickboxing
Wrestling
Sumo
Karate
Judo
Kendo
Mixed Martial Arts / MMA
Decathlon
Running
Archery
Swimming
Rowing
Kayak
Surf | 135 | | `:notagame` | Not a game | `>educational`
`>drawing`
`>popcorn`
`>purikura`
`>redemption`
`>media`
`>application`
`>test`
`>sdk`
`>slideshow`
`>sound` | Educational
Drawing
Popcorn
Photo stickers
Redemption
Media
Application
Test
Software Development Kit
Picture slideshow
Only sound | 136 | 137 |
138 | 139 |
140 | #addon - Specific external hardware recommended or required 141 | 142 | | Subcategory | Description | Children | Children Description | 143 | |-------------|-------------|----------|--------------------| 144 | | `:peripheral` | Peripheral | `>megacd`
`>super32x`
`>disksystem`
`>sufami`
`>64dd`
`>cdromrom` | SEGA Mega-CD / SEGA-CD
SEGA Super 32X / MegaDrive 32X / Genesis 32X
Nintendo Famicom Disk System / ディスクシステム
Bandai SuFami Turbo / スーファミターボ
Nintendo 64DD
NEC CD-ROM² / Super CD-ROM² / Arcade CD-ROM² / PC Engine Duo / TurboGrafx-CD / TurboDuo | 145 | | `:controller` | Special controller | `>bikehandle`
`>paddlecontrol`
`>sportspad`
`>6button`
`>activator`
`>xe1ap`
`>avenuepad3`
`>avenuepad6`
`>10key`
`>arkanoid`
`>familytrainera`
`>familytrainerb`
`>reeladapter`
`>powerglove`
`>mahjong`
`>hypershot`
`>ddr`
`>taikanfamicom`
`>hardwarebike`
`>pachinko`
`>hissatsupachinko`
`>pashislot`
`>horitrack`
`>uforce`
`>smash`
`>lifefitness`
`>taptapmat`
`>teevgolf`
`>lasabirdie`
`>tsurikon64`
`>partytap`
`>climberstick`
`>juujikeycover` | SEGA Bike Handle
SEGA Paddle Control
SEGA Sports Pad
SEGA Six Button Control Pad
SEGA Activator
Dempa Micomsoft XE-1 AP
NEC Avenue Pad 3
NEC Avenue Pad 6
NEC 10 Key Controller Pad
Taito Arkanoid controller
Bandai Family Trainer Mat A / ファミリートレーナー マットA / Power Pad Side A / Family Fun Fitness A
Bandai Family Trainer Mat B / ファミリートレーナー マットB / Power Pad Side B / Family Fun Fitness B
Bandai Reel Adapter
Mattel Power Glove
CAPCOM Mahjong Controller / Mahjong Controller II / 麻雀コントローラー
Konami HyperShot
Konami Dance Dance Revolution controller
Konami Taikan Famicom / 大汗ファミコン
Varie Hardware Bike / ハードウーアバイク
Coconuts Pachinko Controller / パチンココントローラー
Sunsoft Hissatsu Pachinko Controller / 必殺パチンココントローラー
Sammy Jissen! PachiSlo Controller / 実戦! パチスロ コントローラー
Hori Track / ホリトラック
Brøderbund UForce
Realtec Smash Controller
Life Fitness Exertainment System
IGS Tap-Tap Mat + Tonkachi / タップタップマット + トンカチ
Sports Sciences TeeVGolf
Ricoh Lasabirdie / レーザーバーディー
ASCII Tsurikon 64 / つりコン64
PR21 Party Tap
Nichibutsu Climber Stick / クライマー・スティック
NAMCO Jūji Key Cover / 十字キーカバー | 146 | | `:lightgun` | Lightgun | `>lightphaser`
`>menacer`
`>zapper`
`>superscope`
`>justifier`
`>laserscope`
`>bandaihypershot`
`>gamegun`
`>ap74` | SEGA Light Phaser
SEGA Menacer
Nintendo Zapper
Nintendo Super Scope
Konami The Justifier / サ・ジャスティファイアー
Konami LaserScope
Bandai Hyper Shot / ハイパーショット
American Laser GameGun
Jäger AP74 | 147 | | `:mouse` | Mouse | `>md`
`>sfc`
`>pce`
`>pcfx`
`>n64` | SEGA Mouse
Nintendo Super Famicom Mouse / スーパーファミコンマウス / Super NES Mouse
NEC PC Engine Mouse
NEC PC-FX Mouse
Nintendo 64 Mouse | 148 | | `:keyboard` | Typing keyboard | `>fc`
`>n64`
`>workboy` | Famicom Keyboard
Nintendo 64 Keyboard
Fabtek WorkBoy | 149 | | `:multitap` | Multitap for adding more controllers to the same system | `>segatap`
`>4playersadaptor`
`>super`
`>pce`
`>4wayplay` | SEGA Tap / Multiplayer / Team Player / セガタップ
Hori 4 Player Adaptor / Nintendo Four Score
Hudson Super Multitap
Hudson Multitap / NEC TurboTap
Electronic Arts 4 Way Play | 150 | | `:link` | Hardware for interconnecting systems | `>taisencable`
`>gamelinkcable`
`>fourplayeradapter`
`>comcable`
`>linkup`
`>ngplink`
`>radiounitwireless`
`>setsuzoku`
`>senyoucord`
`>bb2interface`
`>voicerkun` | SEGA Game Gear Taisen Cable / Gear-to-Gear Cable
Nintendo Tsūshin Cable / Game Link Cable
Nintendo Four Player Adapter
NEC COM Cable / TurboExpress
Technopop Link-up Cable
SNK NeoGeo Pocket Link Cable
SNK Musen Unit / Radio Unit Wireless Adaptor
SNK NeoGeo Pocket-Dreamcast Setsuzoku Cable / ネオジオポケット/ドリームキャスト接続ケーブル
Epoch Sen'yō Setsuzoku Cord / 専用接続コード
Epoch Barcode Battler II Interface / BBII Interface / バーコードバトラーIIインターフェース
Koei Voicer-kun / ボイサーくん | 151 | | `:expansion` | Additional hardware for expansing system capabilities | `>fmsoundunit`
`>memorypak`
`>samegame`
`>expansionpak`
`>megald`
`>ldromrom`
`>supersystemcard`
`>arcadecard`
`>gamesexpresscard` | SEGA FM Sound Unit / FMサウンドユニット
Nintendo Satellaview 8M Memory Pak / サテラビュー 8Mメモルーパック
Hudson SameGame Cassette / 鮫亀カセット
Nintendo Memory Kakuchō Pak / メモリー拡張パック / Expansion Pak
Pioneer LaserActive PAC-S / SEGA Mega-LD
Pioneer LaserActive PAC-N / NEC LD-ROM²
NEC PC Engine Super System Card CD-ROM²
NEC PC Engine Arcade Card Pro CD-ROM² / NEC PC Engine Arcade Card Duo CD-ROM²
Games Express CD Card | 152 | | `:lockon` | Lock-on cartridge | `>supergameboy`
`>transferpak`
`>datach`
`>deckenhancer`
`>oyagame`
`>qtai`
`>karaokestudio`
`>sxt2` | Nintendo Super GameBoy / Super GameBoy 2 / スーパーゲームボーイ
Nintendo 64GB Pak / 64GBパック / Transfer Pak
Bandai Datach Joint ROM System / データック
Camerica Aladdin Deck Enhancer
Sunsoft Oyagame / 親ガメ
Konami QTai / Q太
Bandai Karaoke Studio / カラオケスタジオ
Super X-Terminator 2 Sasuke / サスケ | 153 | | `:backup` | Back-up based accessory for saving progress | `>backupramcart`
`>controllerpak`
`>smartmediacard`
`>datarecorder`
`>battlebox`
`>tennokoe`
`>memorybase128`
`>turbofile` | Mega-CD Back Up RAM Cartridge / バックアップRAMカートリッジ
Nintendo Controller Pak / コントローラパック
Hagiwara Syscom SmartMedia Card
Panasonic Famicom Data Recorder / データレコーダ
IGS Battle Box / バトルボックス
Hudson Ten no Koe 2 / Ten no Koe Bank / 天の声 / NEC Backup Booster I / Backup Booster II / バックアップブースター / NEC TurboBooster-Plus
NEC Memory Base 128 / メモリーベース128
ASCII Turbo File / Turbo File II / Turbo File GB / ターボファイル / Turbo File Adapter / ターボファイルアダプター / Turbo File Twin / ターボファイルツイン | 154 | | `:online` | Online based accessory | `>megamodem`
`>megaanser`
`>toshokan`
`>segachannel`
`>xband`
`>meganet`
`>teleplay`
`>networksystem`
`>ndm24`
`>satellaview`
`>randnetmodem` | SEGA Mega Modem / メガモデム
SEGA Mega Anser / メガアンサー
SEGA Game Toshokan / ゲーム図書館
SEGA Channel / セガチャンネル
Catapult XB∀ND
Tec Toy MegaNet
Baton Teleplay System
Nintendo Family Computer Network System / ファミリーコンピュータ ネットワークシステム
NTT Data Tsūshin Modem NDM24 / 通信モデムNDM24
Nintendo SatellaView / サテラビュー
Randnet Modem / ランドネット | 155 | | `:vibration` | Vibration | `>rumblepak` | Nintendo Shindō Pak / 振動パック / Rumble Pak | 156 | | `:glasses` | Glasses | `>3dglasses`
`>segavr`
`>3dsystem`
`>3dgoggle` | SEGA 3-D Glasses / セガ3-Dグラス
SEGA VR Headset
Nintendo Famicom 3D System / ファミコン3Dシステム
Pioneer LaserActive 3D Goggle / 3D ゴーグル / 3-D Goggles | 157 | | `:mic` | Microphone | `>n64`
`>vrs` | Nintendo 64 Mic
VRS / Onseininshiki System / 音声認識システム / Voice Recognition Unit | 158 | | `:drawing` | Drawing board | `>graphicboard`
`>illustbooster`
`>oekakids` | SEGA Graphic Board
NEC Illust Booster
Bandai Oekakids / おえかキッズ | 159 | | `:health` | Health monitoring | `>catalyst`
`>biosensor` | HeartBeat Catalyst
SETA Bio Sensor | 160 | | `:midi` | MIDI Keyboard | `>miracle`
`>pianokeyboard` | The Miracle MIDI Keyboard
Konami MIDI Keyboard | 161 | | `:rob` | Nintendo Family Computer Robot / ファミリーコンピュータ ロボット/ R.O.B. / Robotic Operating Buddy | `>gyro`
`>block` | Gyro Set / ジャイロ セット
Block Set / ブロック セット | 162 | | `:printer` | Printer | `>pocketprinter`
`>printbooster` | Nintendo Pocket Printer / GameBoy Printer
NEC Print Booster | 163 | | `:barcodeboy` | NAMCOT Barcode Boy | | | 164 | | `:rss` | Roland Sound Space | | | 165 | | `:pocketcamera` | Nintendo Pocket Camera / ポケットカメラ / GameBoy Camera | | | 166 | | `:capturecassette` | Nintendo 64 Capture Cassette | | | 167 | | `:photoreader` | NEC Photo Reader | | | 168 | | `:develobox` | Tokuma Shoten Develo Box / でべろ Box | | | 169 | | `:teststation` | Nintendo NES Test Station | | | 170 | 171 |
172 | 173 |
174 | #embedded - Embedded extra hardware in cartridge 175 | 176 | | Subcategory | Description | Children | Children Description | 177 | |-------------|-------------|----------|--------------------| 178 | | `:backup` | Back-up embeded system for saving progress | `>battery`
`>flashram`
`>feram`
`>eeprom` | Battery backed SRAM
Flash RAM
Ferroelectric RAM
EEPROM | 179 | | `:chip` | Enhancement chip | `>ram`
`>rtc`
`>svp`
`>mmc5`
`>dsp1`
`>dsp1a`
`>dsp1b`
`>dsp2`
`>dsp3`
`>dsp4`
`>sa1`
`>sdd1`
`>sfx1`
`>sfx2`
`>obc1`
`>vrc6`
`>vrc7`
`>n163`
`>fme7`
`>5a`
`>5b`
`>m50805`
`>7755`
`>7756`
`>cx4`
`>spc7110`
`>st010`
`>st011`
`>st018` | Extra RAM
Real-Time Clock
SEGA Virtua Processor / SVP
Nintendo MMC5
Nintendo DSP-1
Nintendo DSP-1a
Nintendo DSP-1b
Nintendo DSP-2
Nintendo DSP-3
Nintendo DSP-4
Nintendo SA-1
Nintendo S-DD1
Nintendo Super FX GSU-1
Nintendo Super FX GSU-2
Nintendo OBC-1
Konami VRC VI
Konami VRC VII
NAMCO 163
Sunsoft FME-7
Sunsoft 5A
Sunsoft 5B
Mitsubishi M50805
NEC µPD7755C
NEC µPD7756C
CAPCOM CX4
Epson SPC7110
SETA ST010
SETA ST011
SETA ST018 | 180 | | `:slot` | Slot in cartridge | `>rj11`
`>jcart`
`>lockon`
`>kogame`
`>smartmedia` | RJ-11 port
Codemasters J-Cart
SEGA Sonic & Knuckles Lock-On Technology
Sunsoft Kogame Cassette / 子ガメカセット
Tokyo Electron SmartMedia Double Slot | 181 | | `:led` | LED | | | 182 | | `:gbkiss` | Hudson GB Kiss | | | 183 | | `:pocketsonar` | Bandai Pocket Sonar | | | 184 | 185 |
186 | 187 |
188 | #save - The way you can save your progress 189 | 190 | | Subcategory | Description | 191 | |-------------|-------------| 192 | | `:backup` | Memory backup | 193 | | `:password` | Password | 194 | 195 |
196 | 197 |
198 | #arcadeboard - Arcade board 199 | 200 | | Subcategory | Description | Children | Children Description | 201 | |-------------|-------------|----------|--------------------| 202 | | `:capcom` | CAPCOM board | `>cps`
`>cpsdash`
`>cpschanger`
`>cps2`
`>cps3` | CAPCOM CP System
CAPCOM CP System Dash
CAPCOM CP System Changer
CAPCOM CP System II
CAPCOM CP System III | 203 | | `:sega` | SEGA board | `>vco`
`>system1`
`>system2`
`>system16`
`>system16a`
`>system16b`
`>system16c`
`>system18`
`>system24`
`>system32`
`>multi32`
`>systemc`
`>systemc2`
`>systeme`
`>xboard`
`>yboard`
`>stv` | SEGA VCO Object
SEGA System 1
SEGA System 2
SEGA System 16
SEGA System 16A
SEGA System 16B
SEGA System 16C
SEGA System 18
SEGA System 24
SEGA System 32
SEGA System Multi 32
SEGA System C
SEGA System C-2
SEGA System E
SEGA X Board
SEGA Y Board
SEGA Titan Video | 204 | | `:irem` | Irem board | `>m10`
`>m15`
`>m27`
`>m52`
`>m57`
`>m58`
`>m62`
`>m63`
`>m72`
`>m75`
`>m77`
`>m81`
`>m82`
`>m84`
`>m85`
`>m90`
`>m92`
`>m97`
`>m107` | Irem M10
Irem M15
Irem M27
Irem M52
Irem M57
Irem M58
Irem M62
Irem M63
Irem M72
Irem M75
Irem M77
Irem M81
Irem M82
Irem M84
Irem M85
Irem M90
Irem M92
Irem M97
Irem M107 | 205 | | `:snk` | SNK board | `>mvs` | SNK Multi Video System / MVS | 206 | | `:taito` | Taito board | `>xsystem`
`>bsystem`
`>hsystem`
`>lsystem`
`>zsystem`
`>osystem`
`>f1system`
`>f2system`
`>f3system`
`>lgsystem` | Taito X System
Taito B System
Taito H System
Taito L System
Taito Z System
Taito O System
Taito F1 System / F2 System Extended
Taito F2 System
Taito F3 System
Taito LG System | 207 | | `:toaplan` | Toaplan board | `>version1`
`>version2` | Toaplan Version 1
Toaplan Version 2 | 208 | | `:jaleco` | Jaleco board | `>megasystem1` | Jaleco Mega System 1 | 209 | 210 |
211 | 212 |
213 | #compatibility - System compatibility 214 | 215 | | Subcategory | Description | Children | Children Description | 216 | |-------------|-------------|----------|--------------------| 217 | | `:sg1000` | SEGA SG-1000 | `>sc3000`
`>othello` | SEGA SC-3000
Othello Multivision | 218 | | `:mark3` | SEGA Mark III / master System | `>mycard`
`>epmycard`
`>thesegacard`
`>themegacartridge`
`>silvercartridge`
`>goldcartridge1`
`>goldcartridge2`
`>goldcartridge4` | SEGA My Card
SEGA EP My Card
The SEGA Card
The Mega Cartridge (Japan)
Silver Cartridge
Gold Cartridge (1 mega)
Gold Cartridge (2 mega)
Gold Cartridge (4 mega) | 219 | | `:disksystem` | Famicom Disk System | `>dw` | Disk Writer | 220 | | `:gameboy` | Nintendo GameBoy | `>mono`
`>color`
`>sgb`
`>np` | Monochrome
Color
Super GameBoy
Nintendo Power / ニンテンドウパワー / GB Memory Cartridge / GBメモリカートリッジ | 221 | | `:superfamicom` | Nintendo Super Famicom / Super Nintendo Entertainment System / SNES | `>hirom`
`>lorom`
`>exhirom`
`>exlorom`
`>nss`
`>soundlink`
`>np`
`>gs` | HiROM
LoROM
Extended HiROM
Extended LoRom
Nintendo Super System / NSS
SoundLink / サウンドリンクゲーム / VoiceLink / 音声連動ゲーム
Nintendo Power / ニンテンドウパワー / SF Memory Cassette / SFメモリカセット
Nintendo Gateway System | 222 | | `:pcengine` | NEC PC Engine | `>supergrafx` | PC SuperGrafx | 223 | | `:neogeopocket` | NeoGeo Pocket | `>mono`
`>color` | Monochrome
Color | 224 | 225 |
226 | 227 |
228 | #disc - Disc Number 229 | 230 | | Subcategory | Description | 231 | |-------------|-------------| 232 | | `:1` | Disc 1 | 233 | | `:2` | Disc 2 | 234 | | `:3` | Disc 3 | 235 | | `:4` | Disc 4 | 236 | | `:children` | No description | 237 | 238 |
239 | 240 |
241 | #based - Coming from another media 242 | 243 | | Subcategory | Description | 244 | |-------------|-------------| 245 | | `:manganime` | Manga and/or anime | 246 | | `:movie` | Movie | 247 | | `:disney` | Walt Disney | 248 | | `:dnd` | Dungeons & Dragons | 249 | | `:jurassicpark` | Jurassic Park | 250 | | `:looneytunes` | Looney Tunes | 251 | | `:marvel` | Marvel Comics | 252 | | `:simpsons` | The Simpsons | 253 | | `:smurfs` | The Smurfs / Les Schtroumpfs / Los Pitufos / Die Schlümpfe | 254 | | `:starwars` | Star Wars | 255 | | `:tmnt` | Teenage Mutant Ninja Turtles | 256 | 257 |
258 | 259 |
260 | #search - Keywords for searching 261 | 262 | | Subcategory | Description | Children | Children Description | 263 | |-------------|-------------|----------|--------------------| 264 | | `:franchise` | Games that belong to the same game series | `>castlevania`
`>dragonslayer`
`>wonderboy` | Castlevania / Akumajō Dracula / 悪魔城ドラキュラ
Dragon Slayer
Wonder Boy | 265 | | `:feature` | This character/s appear/s in this game | `>alien`
`>asterix`
`>batman`
`>compatihero`
`>dracula`
`>donald`
`>gundam`
`>kuniokun`
`>mario`
`>mickey`
`>pacman`
`>sherlock`
`>sonic`
`>spiderman`
`>superman`
`>xmen` | Alien xenomorph
Astérix & Obélix
Batman
Compati Hero / コンパチヒーロー
Dracula
Donald Duck
Gundam / ガンダム
Kunio-kun / くにおくん
Mario / マリオ
Mickey Mouse
Pac-Man / パックマン
Sherlock Holmes
Sonic The Hedgehog / ソニック・ザ・ヘッジホッグ
Spider-Man
Superman
X-Men | 266 | | `:tate` | Vertical screen orientation | `>cw`
`>ccw` | Clockwise
Counter clockwise | 267 | | `:3d` | Game uses some kind of 3D effect | `>stereo`
`>anaglyph` | Stereoscopic 3D
Anaglyph 3D | 268 | | `:keyword` | Other specific game features | `>strip`
`>promo`
`>qsound`
`>dolby`
`>rs`
`>official`
`>endorsed`
`>brand` | Stripped girls as a stage clear reward
Promotional not-for-sale limited product
QSound support
Dolby Surround
Response Sound System / レスポンス サウンド システム / RS
Official sports game
Endorsed by public figure
Endorsed by company or brand | 269 | 270 |
271 | 272 |
273 | #multigame - Various games in one title 274 | 275 | | Subcategory | Description | 276 | |-------------|-------------| 277 | | `:compilation` | Compilation of previously released games | 278 | 279 |
280 | 281 |
282 | #reboxed - Reboxed 283 | 284 | | Subcategory | Description | 285 | |-------------|-------------| 286 | | `:bios` | BIOS included game | 287 | | `:bluebox` | Blue Box | 288 | | `:purplebox` | Purple Box | 289 | | `:classicedition` | Classic Edition | 290 | | `:segaclassic` | SEGA Classic | 291 | | `:kixxedition` | Kixx Edition | 292 | | `:megadrive3` | Tec Toy MegaDrive 3 | 293 | | `:megadrive4` | Tec Toy MegaDrive 4 | 294 | | `:reactor` | AtGames Reactor | 295 | | `:gopher` | AtGames Gopher | 296 | | `:meisaku` | Meisaku Collection | 297 | | `:majesco` | Majesco | 298 | | `:megahit` | Mega Hit Series | 299 | | `:konamiclassics` | Konami Classics | 300 | | `:eaclassics` | Console Classics | 301 | | `:videogameclassics` | Accolade Video Game Classics | 302 | | `:gamenokanzume` | Game no Kanzume Otokuyō / ゲームのかんづめ お徳用 | 303 | | `:soundware` | Koei SoundWare audio CD | 304 | | `:playerschoice` | Players Choice / Million Seller | 305 | | `:classicserie` | Nintendo Classic Serie | 306 | | `:kousenjuu` | Kōsenjū Series / 光線銃シリーズ | 307 | | `:disneysclassic` | Disney's Classic Video Games | 308 | | `:snkbestcollection` | Best Collection | 309 | | `:xeye` | JVC X'Eye | 310 | | `:limitedrun` | Limited Run | 311 | | `:famicombox` | Nintendo FamicomBox | 312 | 313 |
314 | 315 |
316 | #port - Port, remaster, remake or conversion from another system 317 | 318 | | Subcategory | Description | Children | Children Description | 319 | |-------------|-------------|----------|--------------------| 320 | | `:arcade` | Arcade | | | 321 | | `:commodore` | Commodore | `>c64`
`>amiga` | Commodore 64 / C64
Amiga | 322 | | `:apple` | Apple | `>apple2`
`>mac` | Apple II
Macintosh | 323 | | `:bbcmicro` | Acorn BBC Micro | | | 324 | | `:dragon32` | Dragon 32 | | | 325 | | `:elektronika60` | Elektronika 60 / Электроника 60 | | | 326 | | `:spectrum` | Sinclair ZX Spectrum | | | 327 | | `:atari` | Atari | `>atari400`
`>atarist`
`>atari2600`
`>lynx` | Atari 400
Atari ST
Atari 2600
Lynx | 328 | | `:nec` | NEC / Nippon Electric Company | `>pc88`
`>pc98`
`>pcengine`
`>cdromrom` | PC-8801
PC-9801
PC Engine / PCエンジン / TurboGrafx / TurboGrafx-16
CD-ROM² / シーディーロムロム / TurboGrafx-CD | 329 | | `:msx` | MSX | `>2` | MSX2 | 330 | | `:sharp` | Sharp | `>x1`
`>mz700`
`>x68000` | Sharp X1
Sharp MZ
X68000 | 331 | | `:pc` | PC DOS | | | 332 | | `:sega` | SEGA / セガ | `>sg1000`
`>mark3`
`>gamegear`
`>megadrive`
`>megacd`
`>saturn`
`>dreamcast` | SG-1000
Mark III / マークIII / Master System / マスターシステム
Game Gear / ゲームギア
MegaDrive / メガドライブ / Genesis
SEGA Mega-CD / メガシーディー / SEGA-CD
SEGA Saturn / セガサターン
Dreamcast / ドリームキャスト | 333 | | `:nintendo` | Nintendo / 任天堂 | `>famicom`
`>superfamicom`
`>gameboy`
`>gbc`
`>gba` | Famicom / Family Computer / ファミリーコンピュータ / Nintendo Entertainment System / NES
Super Famicom / スーパーファミコン / Super Nintendo Entertainment System / SNES
GameBoy / ゲームボーイ
GameBoy Color / ゲームボーイカラー
GameBoy Advance / ゲームボーイアドバンス / GBA | 334 | | `:sony` | Sony / ソニー | `>playstation` | PlayStation / プレイステーション | 335 | | `:3do` | Panasonic 3DO / スリーディーオー | | | 336 | | `:laseractive` | Pioneer LaserActive / レーザーアクティブ | | | 337 | | `:fmtowns` | Fujitsu FM Towns / エフエムタウンズ | | | 338 | 339 |
340 | 341 |
342 | #lang - Language 343 | 344 | | Subcategory | Description | 345 | |-------------|-------------| 346 | | `:en` | English | 347 | | `:es` | Spanish / Español | 348 | | `:fr` | French / Français | 349 | | `:pt` | Portuguese / Português | 350 | | `:de` | German / Deutsch | 351 | | `:it` | Italian / Italiano | 352 | | `:sv` | Swedish / Svenska | 353 | | `:nl` | Dutch / Nederlands | 354 | | `:da` | Danish / Dansk | 355 | | `:no` | Norwegian / Norsk | 356 | | `:fi` | Finnish / Suomi | 357 | | `:cs` | Czech / Čeština | 358 | | `:sl` | Slovenian / Slovenščina | 359 | | `:ru` | Russian / Русский | 360 | | `:ja` | Japanese / 日本語 | 361 | | `:zh` | Simplified Chinese / 汉语 | 362 | | `:ch` | Chinese / 漢語 | 363 | | `:ko` | Korean / 한국어 | 364 | | `:fremen` | Fremen | 365 | 366 |
367 | 368 |
369 | #unfinished - Unfinished game 370 | 371 | | Subcategory | Description | Children | Children Description | 372 | |-------------|-------------|----------|--------------------| 373 | | `:beta` | Beta | `>1`
`>2`
`>3`
`>4`
`>5` | Beta 1
Beta 2
Beta 3
Beta 4
Beta 5 | 374 | | `:proto` | Prototype | `>1`
`>2`
`>3`
`>4` | Proto 1
Proto 2
Proto 3
Proto 4 | 375 | | `:demo` | Demo | `>1`
`>2`
`>auto`
`>kiosk` | Demo 1
Demo 2
Automatic
Kiosk | 376 | | `:sample` | Sample | | | 377 | | `:debug` | Debug | | | 378 | | `:competition` | Competition | | | 379 | 380 |
381 | 382 |
383 | #rerelease - Re-released games in another system 384 | 385 | | Subcategory | Description | Children | Children Description | 386 | |-------------|-------------|----------|--------------------| 387 | | `:virtualconsole` | Nintendo Virtual Console | `>wii`
`>wiiu`
`>3ds` | Nintendo Wii Virtual Console
Nintendo Wii-U Virtual Console
Nintendo 3DS Virtual Console | 388 | | `:switchonline` | Nintendo Switch Online | | | 389 | | `:ereader` | Nintendo e-Reader | | | 390 | | `:animalcrossing` | Nintendo Dōbutsu no Mori+ / どうぶつの森+ / Animal Crossing | | | 391 | | `:capcomtown` | CAPCOM Town | | | 392 | | `:namcoanthology` | NAMCO Anthology | `>1`
`>2` | NAMCO Anthology 1
NAMCO Anthology 2 | 393 | | `:namcot` | NAMCOT Collection / ナムコットコレクション | `>1`
`>2` | NAMCO Museum Archives Volume 1
NAMCO Museum Archives Volume 2 | 394 | | `:castlevaniaanniversary` | Akumajō Dracula Anniversary Collection / 悪魔城ドラキュラ Anniversary Collection / Castlevania Anniversary Collection | | | 395 | | `:castlevaniaadvance` | Castlevania Advance Collection | | | 396 | | `:contraanniversary` | Contra Anniversary Collection / 魂斗羅 Anniversary Collection | | | 397 | | `:cowabunga` | Teenage Mutant Ninja Turtles: The Cowabunga Collection | | | 398 | | `:dariuscozmic` | Darius Cozmic Collection | | | 399 | | `:rockmanclassic` | Rockman Classic Collection / ロックマン クラシックス コレクション / Megaman Legacy Collection | `>1`
`>2`
`>x`
`>x2` | Rockman Classic Collection / ロックマン クラシックス コレクション / Megaman Legacy Collection
Rockman Classic Collection 2 / ロックマン クラシックス コレクション 2 / Megaman Legacy Collection 2
Rockman X Anniversary Collection / ロックマンX アニバーサリー コレクション / Megaman X Legacy Collection
Rockman X Anniversary Collection 2 / ロックマンX アニバーサリー コレクション 2 / Megaman X Legacy Collection 2 | 400 | | `:seikendensetsu` | Seiken Densetsu Collection / 聖剣伝説 Collection / Collection of Mana | | | 401 | | `:disneyclassic` | Disney Classic Games Collection | | | 402 | | `:bubsytwofur` | Bubsy Two-Fur | | | 403 | | `:blizzardarcadecollection` | Blizzard Arcade Collection | | | 404 | | `:qubyte` | QUByte Classics | | | 405 | | `:limitedrun` | Limited Run Games | | | 406 | | `:iam8bit` | iam8bit | | | 407 | | `:sonicclassic` | Sonic Classic Collection | | | 408 | | `:sonicmegacollection` | Sonic Mega Collection / Sonic Mega Collection+ | | | 409 | | `:mdclassics` | SEGA MegaDrive Classics / SEGA Genesis Classics | | | 410 | | `:smashpack` | SEGA Smash Pack | | | 411 | | `:segaages` | SEGA Ages | `>2500` | SEGA Ages 2500 | 412 | | `:3dfukkoku` | SEGA 3D Fukkoku Archives / セガ3D復刻アーカイブス / SEGA 3D Classics Collection | | | 413 | | `:mdmini` | SEGA MegaDrive Mini / SEGA Genesis Mini | `>1`
`>2` | SEGA MegaDrive Mini / SEGA Genesis Mini
SEGA MegaDrive Mini 2 / SEGA Genesis Mini 2 | 414 | | `:sfcmini` | Nintendo Super Famicom Classic Mini / スーパーファミコン クラシックミニ / Super Nintendo Entertainment System Classic Mini | | | 415 | | `:gamenokanzume` | Game no Kanzume / ゲームのかんづめ | `>1`
`>2` | Game no Kanzume Vol.1 / ゲームのかんづめ Vol.1
Game no Kanzume Vol.2 / ゲームのかんづめ Vol.2 | 416 | 417 |
418 | 419 |
420 | #rev - Revision 421 | 422 | | Subcategory | Description | 423 | |-------------|-------------| 424 | | `:1` | Revision 1 | 425 | | `:2` | Revision 2 | 426 | | `:3` | Revision 3 | 427 | | `:4` | Revision 4 | 428 | | `:a` | Revision A | 429 | | `:b` | Revision B | 430 | | `:c` | Revision C | 431 | | `:d` | Revision D | 432 | | `:e` | Revision E | 433 | | `:g` | Revision G | 434 | 435 |
436 | 437 |
438 | #set - Set 439 | 440 | | Subcategory | Description | 441 | |-------------|-------------| 442 | | `:1` | Set 1 | 443 | | `:2` | Set 2 | 444 | | `:3` | Set 3 | 445 | | `:4` | Set 4 | 446 | | `:5` | Set 5 | 447 | | `:6` | Set 6 | 448 | | `:7` | Set 7 | 449 | | `:8` | Set 8 | 450 | 451 |
452 | 453 |
454 | #alt - Alternative rip 455 | 456 | | Subcategory | Description | 457 | |-------------|-------------| 458 | | `:1` | Alternative 1 | 459 | | `:2` | Alternative 2 | 460 | | `:3` | Alternative 3 | 461 | 462 |
463 | 464 |
465 | #unlicensed - Unlicensed game 466 | 467 | | Subcategory | Description | 468 | |-------------|-------------| 469 | | `:bootleg` | Bootleg/pirated game | 470 | | `:hack` | Hacked game | 471 | | `:clone` | Cloned game | 472 | | `:translation` | Translation | 473 | | `:aftermarket` | Made after original market cycle | 474 | 475 |
476 | 477 |
478 | #mameparent - MAME parent file 479 | 480 | 481 |
482 | 483 | 484 | 485 | --- 486 | 487 | Thank you for joining GameDataBase! Your support inspires us to keep improving and sharing exciting updates. 488 | -------------------------------------------------------------------------------- /console_nec_pcfx.csv: -------------------------------------------------------------------------------- 1 | Screen title @ Exact,Cover title @ Exact,ID,Region,Release date,Developer,Publisher,Tags 2 | Aa! Megami-sama@ああっ女神さまっ,Aa! Megami-sama@ああっ女神さまっ,aamegamisama,Japan,1997-12-12,Data West,NEC Home Electronics,#players:1 #genre:adventure>visualnovel #addon:mouse>pcfx #save:backup #disc:1>2 #based:manganime #port:nec>pc98 #lang:ja 3 | Aa! Megami-sama@ああっ女神さまっ,Aa! Megami-sama@ああっ女神さまっ,aamegamisama,Japan,1997-12-12,Data West,NEC Home Electronics,#players:1 #genre:adventure>visualnovel #addon:mouse>pcfx #save:backup #disc:2>2 #based:manganime #port:nec>pc98 #lang:ja 4 | Akazukin Chacha: Osawagase! Panic Race!@赤ずきんチャチャ お騒がせパニックレース,Akazukin Chacha: Osawagase! Panic Race!@赤ずきんチャチャ お騒がせパニックレース,akazukinchachaosawagasepanicrace,Japan,1996-10-25,NEC Home Electronics,NEC Home Electronics,#players:6:vs #genre:board #based:manganime #lang:ja 5 | Albaria no Otome@アルバレアの乙女,Albaria no Otome@アルバレアの乙女,albarianotomoe,Japan,1997-06-27,Gimmick House/Magical Craft,NEC Home Electronics,#players:1 #genre:adventure:sim #save:backup #lang:ja 6 | Angelique Special@アンジェリーク Special,Angelique Special@アンジェリーク Special,angeliquespecial,Japan,1995-12-22,Ruby Party/Koei,NEC Home Electronics,#players:1 #genre:adventure:sim>date #save:backup #lang:ja 7 | Angelique Special 2@アンジェリーク Special 2,Angelique Special 2@アンジェリーク Special 2,angeliquespecial2,Japan,1996-12-20,Ruby Party/Koei,NEC Home Electronics,#players:1 #genre:adventure:sim>date #save:backup #lang:ja 8 | Angelique: Tenkū no Requiem@アンジェリーク 天空の鎮魂歌 レクイエム,Angelique: Tenkū no Requiem@アンジェリーク 天空の鎮魂歌 レクイエム,angeliquetenkuunorequiem,Japan,1998-04-02,Ruby Party/Koei,NEC Home Electronics,#players:1 #genre:rpg>j #save:backup #lang:ja 9 | Battle Heat,Battle Heat@Battle Heat バトルヒート,battleheat,Japan,1994-12-23,Hudson,Hudson,#players:2:vs #genre:action:fighting #lang:ja 10 | Blue Breaker: Ken yori mo Hohoemi wo@Blue Breaker ブルーブレイカー 剣よりも微笑みを,Blue Breaker: Ken yori mo Hohoemi wo@Blue Breaker ブルーブレイカー 剣よりも微笑みを,bluebreakerkenyorimohohoemiwo,Japan,1996-09-27,HuneX,NEC Home Electronics,#players:1 #genre:rpg>j #save:backup #lang:ja 11 | Boundary Gate: Daughter of Kingdom@Boundary Gate バウンダリーゲート Daughter of Kingdom,Boundary Gate: Daughter of Kingdom@Boundary Gate バウンダリーゲート Daughter of Kingdom,boundarygatedaughterofkingdom,Japan,1997-01-24,Pack-In-Video/Polestar/Studio OX,NEC Home Electronics,#players:1 #genre:rpg>dungeoncrawler>j #save:backup #lang:ja 12 | CanCan Bunny Extra DX,Can Can Bunny Extra DX@きゃんきゃんバニー Can Can Bunny エクストラ DX,cancanbunnyextradx,Japan,1996-09-27,Cocktail,Cocktail/NEC Home Electronics,#players:1 #genre:adventure>visualnovel #based:manganime #lang:ja 13 | CanCan Bunny Extra DX,Pia Carrot e Yōkoso!! We've Been Waiting for You & Can Can Bunny Extra DX@Pia♡キャロットへようこそ!! We've Been Waiting for You & きゃんきゃんバニー Can Can Bunny エクストラ DX,cancanbunnyextradx,Japan,1997-11-28,Cocktail,Cocktail/NEC Home Electronics,#players:1 #genre:adventure>visualnovel #multigame:compilation #reboxed #based:manganime #lang:ja 14 | Chip-chan Kick!@チップちゃんキィーック!,Chip-chan Kick!@チップちゃんキィーック!,chipchankick,Japan,1996-09-13,Cybertech Custom,NEC Home Electronics,#players:2:coop #genre:action #lang:ja 15 | Chōjin Heiki Zeroigar@超神兵器ゼロイガー,Chōjin Heiki Zeroigar@超神兵器ゼロイガー,shoujinheikizeroigar,Japan,1997-08-08,Fupac/Sugeiya/Winds,NEC Home Electronics,#players:1 #genre:shmup>v #lang:ja 16 | ComicRoad@こみっくろーど,ComicRoad@こみっくろーど ComicRoad,comicroad,Japan,1997-09-26,Studio Offside,NEC Home Electronics,#players:1 #genre:sim>life #save:backup #lang:ja 17 | Cutey Honey FX@キューティーハニー Cutie Honey FX,Cutey Honey FX@キューティーハニー Cutie Honey FX,cutiehoneyfx,Japan,1995-11-10,Data West,NEC Home Electronics,#players:1 #genre:adventure>visualnovel:adventure #save:backup #based:manganime #lang:ja 18 | Der Langrisser FX,Der Langrisser FX@デア ラングリッサー FX,langrisser2,Japan,1996-04-26,Crosstalk/NCS,Masaya/NEC Home Electronics,#players:1 #genre:rpg>s #save:backup #port:sega>megadrive #lang:ja 19 | Dōkyūsei 2@同級生2,Doukyuusei 2@同級生2,doukyuusei2,Japan,1996-08-08,Elf,NEC Avenue,#players:1 #genre:adventure:sim>date #save:backup #addon:mouse>pcfx #port:nec>pc98 #lang:ja 20 | Dragon Knight 4,Dragon Knight 4,dragonknight4,Japan,1997-03-28,Elf,NEC Avenue,#players:1 #genre:rpg>s #save:backup #port:nec>pc98 #lang:ja 21 | Farland Story FX@Farland Story ファーランドストーリー FX,Farland Story FX@Farland Story ファーランドストーリー FX,farlandstoryfx,Japan,1996-11-08,TGL,NEC Home Electronics,#players:1 #genre:rpg>s #addon:mouse>pcfx #save:backup #lang:ja 22 | Fire Woman Matoigumi@ファイアーウーマン纏組,Fire Woman Matoigumi@ファイアーウーマン纏組,firewomanmatoigumi,Japan,1996-12-20,HuneX,Tokuma Shoten,#players:1 #genre:adventure:sim>date #save:backup #lang:ja 23 | First Kiss Story@ファーストKiss☆物語 ストーリー,First Kiss Story@ファーストKiss☆物語 ストーリー,firstkissstory,Japan,1998-04-24,HuneX,NEC Home Electronics,#players:1 #genre:adventure>visualnovel:sim>date #save:backup #addon:mouse>pcfx #lang:ja 24 | Fushigi no Kuni no Angelique@ふしぎの国のアンジェリーク,Fushigi no Kuni no Angelique@ふしぎの国のアンジェリーク,fushiginokuninoangelique,Japan,1996-10-11,Ruby Party/Koei,NEC Home Electronics,#players:1 #genre:board #lang:ja 25 | Ginga Ojōsama Densetsu Yuna FX: Kanashimi no Siren@銀河お嬢様伝説 Galaxy Fraulein ユナ♥ FX 哀しみのセイレーン,Ginga Ojōsama Densetsu Yuna FX: Kanashimi no Siren@銀河お嬢様伝説 Galaxy Fraulein ユナ♥ FX 哀しみのセイレーン,gingaojousamadensetsuyunafxkns,Japan,1996-03-08,Red/Will,Hudson,#players:1 #genre:adventure>visualnovel #save:backup #lang:ja 26 | Hataraku Shōjo: Tekipaki Working Love FX@はたらく☆少女 てきぱきワーキン♥ラブFX,Hataraku Shōjo: Tekipaki Working Love FX@はたらく☆少女 てきぱきワーキン♥ラブFX,hatarakushoujotekipakiworkinglovefx,Japan,1998-03-27,NEC Home Electronics,NEC Home Electronics,#players:1 #genre:adventure #save:backup #based:manganime #lang:ja 27 | J. B. Harold: Blue Chicago Blues,J. B. Harold: Blue Chicago Blues@J.B. Harold ブルーシカゴブルース Blue Chicago Blues,bluechicagoblues,Japan,1996-03-22,Riverhill,NEC Home Electronics,#players:1 #genre:adventure>visualnovel #save:backup #disc:1>2 #port:laseractive #lang:ja 28 | J. B. Harold: Blue Chicago Blues,J. B. Harold: Blue Chicago Blues@J.B. Harold ブルーシカゴブルース Blue Chicago Blues,bluechicagoblues,Japan,1996-03-22,Riverhill,NEC Home Electronics,#players:1 #genre:adventure>visualnovel #save:backup #disc:2>2 #port:laseractive #lang:ja 29 | Kishin Dōji Zenki FX: Vajra Fight@鬼神童子ZENKI FX 金剛炎闘 ヴァジュラ ファイト,Kishin Dōji Zenki FX: Vajra Fight@鬼神童子 Zenki FX 金剛炎闘 ヴァジュラ ファイト,kishindoujinzenkifxvajrafight,Japan,1995-12-22,Hudson,Hudson,#players:2:coop #genre:action>hackandslash:brawler #save:backup #based:manganime #lang:ja 30 | Kokū Hyōryū Nirgends@Nirgends 虚空漂流ニルゲンツ,Kokū Hyōryū Nirgends@Nirgends 虚空漂流ニルゲンツ,kokuuhyouryuunirgends,Japan,1996-06-28,Micro Cabin,NEC Home Electronics,#players:1 #genre:adventure:sim>flight #save:backup #lang:ja 31 | Konpeki no Kantai: Deep Blue Feet@紺碧の艦隊 Deep Blue Feet,Konpeki no Kantai@紺碧の艦隊,konpekinokantai,Japan,1995-03-31,Micro Cabin,NEC Home Electronics,#players:1 #genre:sim>strategy #based:manganime #lang:ja 32 | Last Imperial Prince,Last Imperial Prince,lastimperialprince,Japan,1997-03-14,Nihon Application,NEC Home Electronics,#players:1 #genre:rpg>a #save:backup #disc:1>2 #lang:ja 33 | Last Imperial Prince,Last Imperial Prince,lastimperialprince,Japan,1997-03-14,Nihon Application,NEC Home Electronics,#players:1 #genre:rpg>a #save:backup #disc:2>2 #lang:ja 34 | Lunatic Dawn FX@Lunatic Dawn ルナテイックドーン FX,Lunatic Dawn FX@Lunatic Dawn ルナテイックドーン FX,lunaticdawnfx,Japan,1995-11-24,Artdink,NEC Home Electronics,#players:1 #genre:rpg>j #save:backup #lang:ja 35 | Mahjong Gokū Tenjiku@麻雀悟空 天竺,Mahjong Gokū Tenjiku@麻雀悟空 天竺,mahjonggokuutenjiku,Japan,1995-03-24,ChatNoir,NEC Home Electronics,#players:1 #genre:board>mahjong #lang:ja 36 | Makeruna! Makendou Z@負けるな!魔剣道Z,Makeruna! Makendou Z@負けるな!魔剣道Z,makerunamakendouz,Japan,1998-03-20,Fill-in-Cafe/Sugeiya/Datam Polystar,NEC Home Electronics,#players:1 #genre:rpg>j #save:backup #lang:ja 37 | Megami Tengoku II@女神天国II,Megami Tengoku II@女神天国II,megamitengoku2,Japan,1996-07-26,HuneX,NEC Home Electronics,#players:1 #genre:sim>life #save:backup #lang:ja 38 | Minimum Nanonic@みにまむなのにっく,Minimum Nanonic@Minimum Nanonic みにまむなのにっく,minimumnanotic,Japan,1997-10-24,Polestar/Studio OX,NEC Home Electronics,#players:1 #genre:adventure>visualnovel #save:backup #lang:ja 39 | Miraculum: The Last Revelation,Miraculum: The Last Revelation@Miraculum ミラークルム The Last Revelation ザ・ラスト・レベレーション,miraculumthelastrevelation,Japan,1996-03-29,RayForce,NEC Home Electronics,#players:1 #genre:rpg>j #save:backup #lang:ja 40 | Ojōsama Sōsamō@お嬢様捜査網,Ojōsama Sōsamō@お嬢様捜査網,ojousamasousamou,Japan,1996-05-31,Head Room/Marcus,NEC Home Electronics,#players:1 #genre:adventure:puzzle #save:backup #lang:ja 41 | Pachio-kun FX: Maboroshi no Shima Daisakusen@パチオくんFX 幻の島大決戦,Pachio-kun FX: Maboroshi no Shima Daisakusen@パチオくんFX 幻の島大決戦,pachiokunfxmaboroshinoshimadaisakusen,Japan,1995-09-22,Coconuts,NEC Home Electronics,#players:1 #genre:rpg:parlor>pachinko #save:backup #lang:ja 42 | Pia Carrot e Yōkoso!! We've Been Waiting for You@Pia♡キャロットへようこそ!! We've Been Waiting for You,Pia Carrot e Yōkoso!! We've Been Waiting for You@Pia♡キャロットへようこそ!! We've Been Waiting for You,piacarroteyoukoso,Japan,1997-05-23,Cocktail,Cocktail,#players:1 #genre:sim>date:adventure>visualnovel #save:backup #port:nec>pc98 #lang:ja 43 | Pia Carrot e Yōkoso!! We've Been Waiting for You@Pia♡キャロットへようこそ!! We've Been Waiting for You,Pia Carrot e Yōkoso!! We've Been Waiting for You & Can Can Bunny Extra DX@Pia♡キャロットへようこそ!! We've Been Waiting for You & きゃんきゃんバニー Can Can Bunny エクストラ DX,piacarroteyoukoso,Japan,1997-11-28,Cocktail,Cocktail,#players:1 #genre:sim>date:adventure>visualnovel #save:backup #port:nec>pc98 #reboxed #multigame:compilation #lang:ja 44 | Power Dolls,Power Dolls FX,powerdollsfx,Japan,1996-02-23,Kogado,NEC Home Electronics,#players:1 #genre:sim>strategy #addon:mouse>pcfx #save:backup #port:nec>pc98 #lang:ja 45 | Return to Zork,Return to Zork,returntozork,Japan,1995-05-27,Data West,NEC Home Electronics,#players:1 #genre:adventure:puzzle #port:pc #lang:ja 46 | Ruruli Ra Rura@ルルリ・ラ・ルラ,Ruruli Ra Rura@ルルリ・ラ・ルラ,rurulirarura,Japan,1998-02-20,NEC Interchannel,NEC Home Electronics,#players:1 #genre:action>platformer:puzzle #save:backup #lang:ja 47 | Shanghai: Banri no Chōjō: The Great Wall@上海 万里の長城 The Great Wall,Shanghai: Banri no Chōjō: The Great Wall@上海 万里の長城 Shanghai: The Great Wall,shanghaibanrinochoujouthegreatwall,Japan,1996-03-15,ASK Kodansha,NEC Home Electronics,#players:2:vs #genre:puzzle #addon:mouse>pcfx #save:password #port:sega>saturn #lang:ja 48 | Sotsugyō II FX: Neo Generation@卒業II FX: Neo Generation,Sotsugyō II FX: Neo Generation@卒業II FX: Neo Generation,sotsugyou2neogeneration,Japan,1994-12-23,Head Room/Tenky,NEC Home Electronics,#players:1 #genre:sim>life #save:backup #port:nec>pc98 #lang:ja 49 | Sotsugyō R: Graduation Real@卒業R Graduation Real,Sotsugyō R: Graduation Real@卒業R Graduation Real,sotsugyourgraduationreal,Japan,1998-01-16,Head Room,NEC Avenue,#players:1 #genre:sim>life #save:backup #lang:ja 50 | Sparkling Feather@スパークリングフェザー Sparkling Feather,Sparkling Feather@スパークリングフェザー Sparkling Feather,sparklingfeather,Japan,1997-04-25,HuneX,NEC Home Electronics,#players:1 #genre:rpg>s #save:backup #lang:ja 51 | Super Power League FX,Super Power League FX@Super Power League FX スーパーパワーリーグFX,superpowerleaguefx,Japan,1996-04-26,Hudson,Hudson,#players:1 #genre:sports>baseball #save:backup #search:keyword>official #lang:ja 52 | Super Real Mahjong P.V FX@スーパーリアル麻雀 P.V FX,Super Real Mahjong P.V FX@スーパーリアル麻雀 P.V FX,superrealmahjongpvfx,Japan,1996-03-29,SETA,Naxat,#players:1 #genre:board>mahjong #addon:mouse>pcfx #port:arcade #search:keyword>strip #lang:ja 53 | Team Innocent: The Point of No Return ‟G.C.P.O.SS” Saki/Lilis/Ariel,Team Innocent: The Point of No Return ‟G.C.P.O.SS” Saki/Lilis/Ariel@Team Innocent チームイノセント The Point of No Return ‟G.C.P.O.SS” Saki/Lilis/Ariel,teaminnocentetponr,Japan,1994-12-23,Hudson,Hudson,#players:1 #genre:action:adventure #save:backup #lang:ja 54 | Tenchi Muyō! Ryōōki FX (Hakua Kaikō)@天地無用! 魎皇鬼 FX (白亜邂逅),Tenchi Muyō! Ryōōki FX (Hakua Kaikō)@天地無用! 魎皇鬼 FX (白亜邂逅),tenchimuyouryououkifx,Japan,1996-07-12,AIC Spirits/TamTam,NEC Interchannel,#players:1 #genre:adventure>visualnovel #save:backup #disc:1>2 #based:manganime #lang:ja 55 | Tenchi Muyō! Ryōōki FX (Kiyone Hōgū)@天地無用! 魎皇鬼 FX (清音逢偶),Tenchi Muyō! Ryōōki FX (Kiyone Hōgū)@天地無用! 魎皇鬼 FX (清音逢偶),tenchimuyouryououkifx,Japan,1996-07-12,AIC Spirits/TamTam,NEC Interchannel,#players:1 #genre:adventure>visualnovel #save:backup #disc:2>2 #based:manganime #lang:ja 56 | Tengai Makyō: Dennō Karakuri Kakutōden@天外魔境 電脳絡繰格闘伝,Tengai Makyō: Dennō Karakuri Kakutōden@天外魔境 電脳絡繰格闘伝,tangaimakyoudennoukarakurikakutouden,Japan,1995-07-28,Produce/Red,Hudson,#players:1 #genre:action:fighting #lang:ja 57 | Tokimeki Card Paradise: Koi no Royal Straight Flush@ときめきカードパラダイス 恋のロイヤルストレートフラッシュ,Tokimeki Card Paradise: Koi no Royal Straight Flush@ときめきカードパラダイス 恋のロイヤルストレートフラッシュ,tokimekicardparadisekoinoroyalstraightflush,Japan,1996-01-26,Sonnet,Sonnet,#players:1 #genre:board>cards #addon:mouse>pcfx #search:keyword>strip #lang:ja 58 | Tonari no Princess Rolfee!@となりのプリンセス Rolfee!,Tonari no Princess Rolfee!@となりのプリンセス Rolfee!,tonarinoprincessrolfee,Japan,1997-07-25,Fupac/Winds,NEC Home Electronics,#players:1 #genre:adventure:sim>life #save:backup #lang:ja 59 | Voice Paradise@Voice Paradise ボイスパラダイス,Voice Paradise@Voice Paradise ボイスパラダイス,voiceparadise,Japan,1996-05-17,ASK Kodansha/Fill-in-Cafe,NEC Home Electronics,#players:1 #genre:adventure:quiz #addon:mouse>pcfx #save:backup #disc:1>2 #lang:ja 60 | Voice Paradise@Voice Paradise ボイスパラダイス,Voice Paradise@Voice Paradise ボイスパラダイス,voiceparadise,Japan,1996-05-17,ASK Kodansha/Fill-in-Cafe,NEC Home Electronics,#players:1 #genre:adventure:quiz #addon:mouse>pcfx #save:backup #disc:2>2 #lang:ja 61 | Wakusei Kōkitai: Little Cats@惑星攻機隊りとるキャッツ,Wakusei Kōkitai: Little Cats@惑星攻機隊りとるキャッツ,wakuseikoukitailittlecats,Japan,1997-07-04,Family Soft,NEC Home Electronics,#players:1 #genre:sim>strategy #addon:mouse>pcfx #save:backup #lang:ja 62 | Zen Nihon Joshi Pro Wres: Queen of Queens (Zenjo vs Zenjo Hen)@全日本女子プロレス Queen of Queens (全女vs全女編),Zen Nihon Joshi Pro Wres: Queen of Queens@全日本女子プロレス Queen of Queens クイーンオブクイーンズ,queenofqueens,Japan,1995-03-24,HuneX,NEC Home Electronics,#players:1 #genre:fighting:sports>wrestling #disc:1>2 #search:keyword>official #lang:ja 63 | Zen Nihon Joshi Pro Wres: Queen of Queens (Zenjo vs KWP Hen)@全日本女子プロレス Queen of Queens (全女vsKWP編),Zen Nihon Joshi Pro Wres: Queen of Queens@全日本女子プロレス Queen of Queens クイーンオブクイーンズ,queenofqueens,Japan,1995-03-24,HuneX,NEC Home Electronics,#players:1 #genre:fighting:sports>wrestling #disc:2>2 #search:keyword>official #lang:ja 64 | Zoku Hatsukoi Monogatari: Shūgaku Ryokō@続 初恋物語 修学旅行,Zoku Hatsukoi Monogatari: Shūgaku Ryokō@続 初恋物語 修学旅行,zokuhatsukoimonogatarisr,Japan,1996-06-06,Koga/Winds/Toshiki Hirano Office,NEC Home Electronics,#players:1 #genre:adventure>visualnovel:sim>date #save:backup #disc:1>2 #lang:ja 65 | Zoku Hatsukoi Monogatari: Shūgaku Ryokō@続 初恋物語 修学旅行,Zoku Hatsukoi Monogatari: Shūgaku Ryokō@続 初恋物語 修学旅行,zokuhatsukoimonogatarisr,Japan,1996-06-06,Koga/Winds/Toshiki Hirano Office,NEC Home Electronics,#players:1 #genre:adventure>visualnovel:sim>date #save:backup #disc:2>2 #lang:ja 66 | AnimeFreak FX Vol.1@アニメフリークFX AnimeFreak FX Vol.1,AnimeFreak FX Vol.1@アニメフリークFX AnimeFreak FX Vol.1,animefreakfxvol1,Japan,1995-08-12,HuneX,NEC Home Electronics,#players:1 #genre:notagame>slideshow:board:rhythm>karaoke #based:manganime #lang:ja 67 | AnimeFreak FX Vol.2@アニメフリークFX AnimeFreak FX Vol.2,AnimeFreak FX Vol.2@アニメフリークFX AnimeFreak FX Vol.2,animefreakfxvol2,Japan,1995-12-22,HuneX,NEC Home Electronics,#players:1 #genre:notagame>slideshow:rhythm>karaoke #based:manganime #lang:ja 68 | AnimeFreak FX Vol.3@アニメフリークFX AnimeFreak FX Vol.3,AnimeFreak FX Vol.3@アニメフリークFX AnimeFreak FX Vol.3,animefreakfxvol3,Japan,1996-04-05,HuneX,NEC Home Electronics,#players:1 #genre:notagame>slideshow:rhythm>karaoke #based:manganime #lang:ja 69 | AnimeFreak FX Vol.4@アニメフリークFX AnimeFreak FX Vol.4,AnimeFreak FX Vol.4@アニメフリークFX AnimeFreak FX Vol.4,animefreakfxvol4,Japan,1999-02-28,HuneX,NEC Home Electronics,#players:1 #genre:notagame>slideshow #based:manganime #lang:ja 70 | AnimeFreak FX Vol.5@アニメフリークFX AnimeFreak FX Vol.5,AnimeFreak FX Vol.5@アニメフリークFX AnimeFreak FX Vol.5,animefreakfxvol5,Japan,1997-08-29,HuneX,NEC Home Electronics,#players:1 #genre:notagame>slideshow:quiz #disc:1>2 #lang:ja 71 | AnimeFreak FX Vol.5@アニメフリークFX AnimeFreak FX Vol.5,AnimeFreak FX Vol.5@アニメフリークFX AnimeFreak FX Vol.5,animefreakfxvol5,Japan,1997-08-29,HuneX,NEC Home Electronics,#players:1 #genre:notagame>slideshow:quiz #disc:2>2 #lang:ja 72 | AnimeFreak FX Vol.6@アニメフリークFX AnimeFreak FX Vol.6,AnimeFreak FX Vol.6@アニメフリークFX AnimeFreak FX Vol.6,animefreakfxvol6,Japan,1998-02-27,HuneX,NEC Home Electronics,#players:1 #genre:notagame>slideshow #disc:1>2 #based:manganime #lang:ja 73 | AnimeFreak FX Vol.6@アニメフリークFX AnimeFreak FX Vol.6,AnimeFreak FX Vol.6@アニメフリークFX AnimeFreak FX Vol.6,animefreakfxvol6,Japan,1998-02-27,HuneX,NEC Home Electronics,#players:1 #genre:notagame>slideshow #disc:2>2 #based:manganime #lang:ja 74 | Ginga Ojōsama Densetsu Yuna FX: Kanashimi no Siren@銀河お嬢様伝説 Galaxy Fraulein ユナ♥ FX 哀しみのセイレーン,Ginga Ojōsama Densetsu Yuna FX: Kanashimi no Siren@銀河お嬢様伝説 Galaxy Fraulein ユナ♥ FX 哀しみのセイレーン,gingaojousamadensetsuyunafxkns,Japan,,Red/Will,Hudson,#players:1 #genre:adventure>visualnovel #save:backup #lang:ja #unfinished:sample 75 | PC Engine Fan: Special CD-ROM Vol. 2,PC Engine Fan: Special CD-ROM Vol. 2,pcenginefanspecialcdrom2,Japan,1996-09,Tokuma Shoten,Tokuma Shoten,#players:1 #genre:adventure:rpg>j #multigame:compilation #save:backup #lang:ja #unfinished:demo 76 | PC Engine Fan: Special CD-ROM Vol. 3,PC Engine Fan: Special CD-ROM Vol. 3,pcenginefanspecialcdrom3,Japan,1996-10,Tokuma Shoten,Tokuma Shoten,#players:1 #genre:shmup>v #lang:ja #unfinished:demo 77 | Super PC Engine Fan Deluxe: Special CD-ROM Vol.1,Super PC Engine Fan Deluxe: Special CD-ROM Vol.1,superpcenginefandeluxespecialcdrom1,Japan,1997,Tokuma Shoten,Tokuma Shoten,#players:1 #genre:adventure>visualnovel:sim>date #multigame:compilation #lang:ja #unfinished:demo 78 | Super PC Engine Fan Deluxe: Special CD-ROM Vol.2,Super PC Engine Fan Deluxe: Special CD-ROM Vol.2,superpcenginefandeluxespecialcdrom2,Japan,1997-03-01,Tokuma Shoten,Tokuma Shoten,#players:1 #genre:adventure>visualnovel:sim>date:rpg #multigame:compilation #lang:ja #unfinished:demo 79 | -------------------------------------------------------------------------------- /console_nintendo_64dd.csv: -------------------------------------------------------------------------------- 1 | Screen title @ Exact,Cover title @ Exact,ID,Region,Release date,Developer,Publisher,Tags,MD5,SHA1,SHA256,SHA512 2 | Dezaemon DD@デザエモン DD,,dezaemondd,Japan,,Athena,Athena,#players:1 #genre:notagame>application #addon:peripheral>64dd:expansion>expansionpak:vibration>rumblepak #lang:ja #unfinished:proto,40aa8ec52c5e025d6c6ad94cebc2218f,f0b3e6c0a944118e4a8ee8ea54da1b103b754241,88867a327ea260f5ac02266478fdafe6ab962ee55edeceb34c75b09ea7274c01,e6778583d6a6e77b0ac86e4e84ed32133d9cf612658c5429b3b1d0b20d40b3bcf440a7eb446710539d5bfe1e480cbd7eb994cebd60967c2b23d4688ff7cb01dd 3 | F-Zero X: 64DD@F-Zero X エフゼロ エックス 64DD,F-Zero X: Expansion Kit@F-Zero X エフゼロ エックス Expansion Kit エクスパンション キット,fzeroxek,Japan,2000-04-21,Nintendo,Nintendo,#players:4:vs #genre:racing #addon:peripheral>64dd:expansion>expansionpak:vibration>rumblepak:online>randnetmodem #lang:ja,cb2fb00c3921245ae04bb38ba01abe92,7e8badf857f1fce8aa59307c0fd318128c44418b,16b3cff9eef2b621207223c839a4e030c3c4f21a3c8da7eb15f4784cb73b200e,ecd9ada1932afa27ec8cbf90e29da52a233bc77cff06c7afd88fc17949dcaad826a8b1e61e3747ad606187e1cf168739371ba021d7a9d72ee1e8b49025e230c4 4 | Kyojin no Doshin 1@巨人のドシン1,Kyojin no Doshin 1@巨人のドシン1,kyojinnodoushin1,Japan,1999-12-11,Randnet,RandnetDD,#players:1 #genre:sim>god #addon:peripheral>64dd:expansion>expansionpak:vibration>rumblepak:online>randnetmodem #lang:ja,e8eb810d996e12cd6c47445f87a94c72,3e7eb70138213cc944952c4c659285f729b1fe1a,d9044b187c5545f8f791bafb8821c3dd365fb822cc6dc893b8792e8ecce56450,340876a408d630e5aa2050d77b3d3bece1ebc266f069765c6b58afb688d2009e851960de2c81d2f0cc1bd09bece4395857cdb8335a46eee36a8b049f612aba48 5 | Kyojin no Doshin 1@巨人のドシン1,Kyojin no Doshin 1@巨人のドシン1,kyojinnodoushin1,Japan,,Randnet,RandnetDD,#players:1 #genre:sim>god #addon:peripheral>64dd:expansion>expansionpak:vibration>rumblepak:online>randnetmodem #lang:ja #unfinished:demo>kiosk,afe059ae1210751b6c849cfb482c99dd,2a73aced8fded7a6422fa322d8ff76f6045c687f,01dbbc71d4fd2c3cfe6dd85b869eb66d9f5eeadde640fa641ae0a3ff38698001,891ec4e331cce718342265d990fd17a1459734a7a7fb2bbe83d6aded1e4e76cb576b315d89b3f59c6a1333164b4b42ecc11f95a3beeb85dac3ac1bd15154a4aa 6 | Kyojin no Doshin: Kaihō Sensen Chibikko Chikko Daishūgō@巨人のドシン 解放戦線チビッコチッコ大集合,Kyojin no Doshin: Kaihō Sensen Chibikko Chikko Daishūgō@巨人のドシン 解放戦線チビッコチッコ大集合,kyojinnodoushinksccd,Japan,2000-05-17,Randnet,RandnetDD,#players:1 #genre:action:puzzle #addon:peripheral>64dd:expansion>expansionpak:vibration>rumblepak:online>randnetmodem #lang:ja,fcca9af8c1174c40b478ea0e02673b16,9412f12cb67acd3534d1bbe511b42738b64f94bf,51b9506e31ba0b199c3c67b67fd5f875bcfcb557ac0c220ef86ee7e928d9163a,da3c7ed7f90c877f9ced74a6f0a45473acc54c4fa085d8a209a71ce8286558aa2e7ea25ede114f5c20fcad658a441e69511677ad18c51254a8889b49b83abb49 7 | Mario Artist: Communication Kit@マリオアーティスト コミュニケーションキット,Mario Artist: Communication Kit@Mario Artist マリオアーティスト コミュニケーションキット,marioartistcommunicationkit,Japan,2000-06-29,Nintendo,Nintendo,#players:1 #genre:notagame>application #addon:peripheral>64dd:expansion>expansionpak:online>randnetmodem:capturecassette:mouse>n64 #save:backup #search:feature>mario #lang:ja,114af722029d6386c3bfea4cc8fa603c,8040dcd657227463b840f47f3e24a7f42945e1f8,f6173909321f576d59f4360f606b0107e059cca754b1c1666b703265442dbcb0,599e9b265eb608cab502d05189cf26fa35e092d50163dc032a6960b2fa456383c3e97eb388b3799b3259bab7380c2193c98af69b1123c866c359823312c1c75e 8 | Mario Artist: Paint Studio@マリオアーティスト ペイント スタジオ,Mario Artist: Paint Studio@Mario Artist マリオアーティスト ペイント スタジオ,marioartistpaintstudio,Japan,1999-12-11,Nintendo,Nintendo,#players:4:vs #genre:notagame>drawing #addon:peripheral>64dd:expansion>expansionpak:lockon>transferpak:pocketcamera:capturecassette:mouse>n64 #save:backup #search:feature>mario #lang:ja,8485643e5830cd67ed4c0a5fd49e2491,9997e6f118c72f265eb648f18faa48c3a416fb3b,6b3c4fcd6c89370a9e7ffa0130282f20897f96f5ed5a1f634f82a546850b6c2a,95e1544e50eb16d44c6ef8422351f91de101518312f1841e11a3ef37fccda4d3950f88a56adec5c79bacc563c555470885abd534f544bc0be2b91b7edc4928a6 9 | Mario Artist: Paint Studio@マリオアーティスト ペイント スタジオ,Mario Artist: Paint Studio@Mario Artist マリオアーティスト ペイント スタジオ,marioartistpaintstudio,Japan,1999-02-11,Nintendo,Nintendo,#players:4:vs #genre:notagame>drawing #addon:peripheral>64dd:expansion>expansionpak:lockon>transferpak:pocketcamera:capturecassette:mouse>n64 #save:backup #search:feature>mario #lang:ja #unfinished:beta,a76b619ec832a7e2abcfbdfeb5375e39,ddeaf740aadd928a9bbf9cfeaec4c0ea80b75ab2,22377df1d320bca95bb82732b4fca4d1b7ed3a2bb3cc560e60641573c17814e8,2bcdafc4887d6147dd6100e85be1e7dc5cb4a9f921d21cbd0677791504b953495c3ed6c12c6fa510b9fd93cf0a9ba84a97969e9daa517d3afcc11a4eca369c7e 10 | Mario Artist: Polygon Studio@マリオアーティスト ポリゴンスタジオ,Mario Artist: Polygon Studio@Mario Artist マリオアーティスト ポリゴンスタジオ,marioartistpolygonstudio,Japan,2000-08-29,Nintendo,Nintendo,#players:1 #genre:notagame>application #addon:peripheral>64dd:expansion>expansionpak:mouse>n64 #save:backup #search:feature>mario #lang:ja,da23ee561578b7dad77ed72728b46d30,4e4f267d2d063286bf4c1302386dab8b1ab0d4c6,a601ae1a9caef9f60a81b343351ea222bd1270671e1be546d6c4f4b680315f09,339170e918230ac827568247650bdf8edf72c19ca2d0a1e729d77e51233d67c3b58d6068fe79cafc0c96fff5d9aaf88cc72589a4b7b116a999b5fdad75ae52a6 11 | Mario Artist: Talent Studio@マリオアーティスト タレントスタジオ,Mario Artist: Talent Studio@Mario Artist マリオアーティスト タレントスタジオ,marioartisttalentstudio,Japan,2000-02-23,Nintendo,Nintendo,#players:1 #genre:notagame>application #addon:peripheral>64dd:expansion>expansionpak:lockon>transferpak:pocketcamera:mic>n64:capturecassette:mouse>n64 #save:backup #search:feature>mario #lang:ja,88228e990b58a94e9b3460beff632304,24ca7508157466e5d289ee49c2c714806d1ecce2,cb4d3f841e8405c4bcb760aad6ef9496def6aa1cac7b2f9e54fe7085b6bf8536,d3f61f5d79a6b3f5ccbac37e98ee3d928809aa9cd54529568129f230ebc99ea679727969ec51c4702084b7e3d075fb748a804bfe944f7c66a200f07569389025 12 | Nihon Pro Golf Tour 64@日本プロゴルフツアー64,Nihon Pro Golf Tour 64@日本プロゴルフツアー64: Japan Pro-Golf Tour 64,nihonprogolftour64,Japan,2000-05-02,SETA,Media Factory,#players:4:vs #genre:sports>golf #addon:peripheral>64dd:expansion>expansionpak:online>randnetmodem #save:backup #search:keyword>official #lang:ja,9f797a9c704b5ebd04d6a2b036309af2,053140bd97c525804747251dea3211fe55357b77,a563340e1e4877ecfb5e8523d3dc5758d0d047e0d70177e54020cab4219c3532,d7a0cd3f70c1c2fa3b340680097a1feb26aa116c06c62ab1ecd2d3609e9f70e53b3214c1bffd20ea53c65b49db1da16964648cb3569777da7ef530a58b32de13 13 | Randnet@ランドネット,Randnet Disk@ランドネット ランドネットディスク,randnetdisk,Japan,2000-02-23,Randnet,RandnetDD,#players:1 #genre:notagame>application #addon:peripheral>64dd:expansion>expansionpak:online>randnetmodem:keyboard>n64 #lang:ja,26087e0750fc6da0f3de2a431e34bddf,9ade854221962f5f4c68ea0615951dd948896c1b,58819e9e194c6f82641121c19db7c485311ca72d373fe02239146406f0b15677,2ec4834f323fa02dfb3071a70fb9f205193efe04e3f8651fe941e78b18abf391fb8ee558fea493e6fe58b2f527d50ebbedc05c7c5e2c6538fdd0ef4937f63f9e 14 | Randnet@ランドネット,Randnet Disk@ランドネット ランドネットディスク,randnetdisk,Japan,,Randnet,Nintendo,#players:1 #genre:notagame>application #addon:peripheral>64dd:expansion>expansionpak:online>randnetmodem:keyboard>n64 #lang:ja #rev:1,33cbc59786063285dc3c090e0ed312e3,a7d7a1e4e7dd02b628433070a65bf5c1a063c13b,cbf11e7ca1bae6dcc06714fa06e766ec925cf5068553a9db1a81caa17409a011,cada562957310c8f2b46db169cebb3b13f81698ac72a69cc1d82146b264ef94a376b2bc53af5be11deb4ba88fbc7b80b9a7fd08335909b73c2b3024029deebcf 15 | SimCity 64@シムシティー64 SimCity 64,SimCity 64@シムシティー64 SimCity 64,simcity64,Japan,2000-02-23,Maxis/HAL Laboratory,Nintendo,#players:1 #genre:sim>building #addon:peripheral>64dd:expansion>expansionpak:online>randnetmodem #lang:ja,ebba03f20096fc2bc178fc3a1f4ec2b6,5d7d5046d702dcc0ea56ce1b96eb90f0c984b51a,c89a2d6132b3a110a382b801668809720f6c1827c7f4dea12ef6bb5ee14abb39,31befaeb7b9f612a94656550a65e592210c4bfa2bae260daa85cfdd8758041ce3874e900b7acf183c0f38498fc0891f778c05c8ec2bd411eb1cd206c2d779d3d 16 | Super Mario: Disk Version,Super Mario 64: Disk-ban@Super Mario 64 スーパーマリオ ディスク版,supermario64,Japan,,Nintendo EAD,Nintendo,#players:1 #genre:action>platformer #addon:peripheral>64dd:expansion>expansionpak #save:backup #search:feature>mario #lang:ja #unfinished:proto,d9ea905727b44f2774926cb03c2300a7,e8f5c3f0e151cbc3b02184a2437e39fa9d1e2686,817aa7d30158156070645588d0ce7131d395c206410d8b26fa566bee0b1050ae,a752db1f7d4fa166e7f65a323b2c1558e61fa74e3110b5fb88857683813e7385f5b91c9d9a0614c7521846f543fa6bf0ed4c78cb31ac9510b55ec14781c49b4b -------------------------------------------------------------------------------- /console_nintendo_virtualboy.csv: -------------------------------------------------------------------------------- 1 | Screen title @ Exact,Cover title @ Exact,ID,Region,Release date,Developer,Publisher,Tags,MD5,SHA1,SHA256,SHA512 2 | Galactic Pinball,Galactic Pinball@Galactic Pinball ギャラクティック・ピンボール,galacticpinball,Japan,1995-07-21,Intelligent Systems,Nintendo,#players:1 #genre:parlor>pinball #embedded:backup>battery #save:backup #search:3d>stereo #lang:en,85260599fdada2e137053a8647aa0d06,93a25abf4f86e71a49c1c3a470140bb40cb693d6,83471721324e334b7a30b54f78305f31a0a5946b234c57b60e79d9d6912b47f3,6daab14bc96bf58541af2eed8c72f3718a6c36e9f1a69d29cc24fbda235995c0bf27d310bb94780fe028ff77d7771eabfa292ce2993eb3bf3a28007a9da0c0f2 3 | Innsmouth no Yakata@インスマウの館,Innsmouth no Yakata@インスマウの館,innsmouthnoyakata,Japan,1995-10-13,Betop,I'Max,#players:1 #genre:shooting>fps #save:password #search:3d>stereo #lang:en,1eb964d0eaa3223cfefdcc99a6265c88,37e06e53ce2810e870835c48decdd6c72079bfda,df48db37887c9ef2f30a3a2f486607a8c8633bba5163ea8c3b8e7cf49067ef7d,f0169e94698d45edc5412519c01be589cab15ff8ddbd6a17eeea01bb1f1cd51f14898cffb82e00e7def16a0e8ec47272e6b42ec076611de458d4f82c1c354b19 4 | Jack Bros. no Meiro de Hiihoo!@Jack Bros. ジャック・ブラザースの迷路でヒーホー!,Jack Bros. no Meiro de Hiihoo!@Jack Bros. ジャック・ブラザースの迷路でヒーホー!,jackbrosnomeirodehihoo,Japan,1995-09-29,Atlus,Atlus,#players:1 #genre:action>maze #save:password #search:3d>stereo #lang:ja,1b177fe2dd12ec1d67f6a43502f8d391,a973406590382ee503037271330d68d2834b79db,1f7a1f7090e3867778ee2bf575b6983b1d27c1b2c911a04e9e996728ed5f7b30,ae8028f689a12109c741bf693a6e17103ba31a2b322a0750d8a3bea7d11bcba465701e82bd4d428c9940f3c44e45a8643eef2c2d9ec2a8e465480f1a9be41f3b 5 | Mario Clash,Mario Clash@Mario Clash マリオクラッシュ,marioclash,Japan,1995-09-28,Nintendo,Nintendo,#players:1 #genre:action>platformer #search:3d>stereo:feature>mario #lang:en,b1b3a25ce8fb4f406bf82b8765d307d0,7556a778b60490bdb81774bcbaa7413fc84cb985,9f1baa93a805a4fc471860fb7c806bb7ac8c289ded77a78397ef8f964a11a396,c3d5c07ef1e0a6322af898a1e70aaa4a94b201c8b9dd15c56a86d76937929b56691937ff58619683e32df98e3031aed2f08986ba25d92d7ab06692e59aac52fd 6 | Mario's Tennis,Mario's Tennis@マリオズテニス,mariostennis,Japan,1995-07-21,Nintendo/Tose,Nintendo,#players:1 #genre:sports>tennis #search:3d>stereo:feature>mario #lang:en,38ecc2c5a745a80d32eb9e8e413358c4,5162f7fa9e3eae4338c53ccba641ba080c768754,5dc5e6b5d5f538f56b3b9727db1c7931d9dfe1bbd0743f698897e0fd90e70101,e1703dfc5a5bbc0007c7aee1c92a1e82b87a0c18b6e75b018288989da76f0fa0f1d31509b9f090b2553edf74396a04e993e3e62f269d664ca0aa48bd65de0f21 7 | Red Alarm,Red Alarm@Red Alarm レッドアラーム,redalarm,Japan,1995-07-21,T&E Soft,T&E Soft,#players:1 #genre:shooting>rail #search:3d>stereo #lang:en,bc469bf797f4774bbb1678c7f500853b,f5057fa9bfd9d60b9dcfc004cfdd12aa8eb1cb4a,52a215853f5f7a354376fb4c4ea4ac458a8c1d4472aa06fe1efdd924afdd5211,6cd9c872e3c8f5b12f1f54e08cb8abeac1cdcce4435ce0c241d64990708d564e850517302e3af57337fcec6e6d2f39e7ac44b57f8057f7fc2e63f3eea8752b25 8 | SD Gundam: Dimension War,SD Gundam: Dimension War@SDガムダム Dimension War ディメンション ウォー,sdgundamdimensionwar,Japan,1995-12-22,Locomotive,Bandai,#players:1 #genre:rpg>s #embedded:backup>battery #save:backup #search:3d>stereo #based:manganime #search:feature>gundam #lang:ja,1cf8c69d8a740d6ef3aab54deced31c4,1a67f6bdb45db46e22b8aadea754a68ad379ae29,98d210dcbd1c5d836aa5bbf018eb26e971711b69b4423187bbb72178d5da9a92,0a84796dc99a3335183ba0fa720170ae009f030170a2d860c89081a17721d921d1a4863c8844039452aeb727f94a40ac28ead89c08b416ffd9201829688dcbd6 9 | Space Invaders: Virtual Collection,Space Invaders: Virtual Collection@Space Invaders: Virtual Collection スペース インベーダー バーチャル コレクション,spaceinvaders,Japan,1995-12-01,Taito,Taito,#players:1 #genre:shmup #search:3d>stereo #multigame:compilation #port:arcade #lang:ja,7607f6f918615263512b17e56797c9aa,16ad904faafd24642dfd056d10a768e81f0d9bfa,d1cc03dc75c9778f9dc621253d8af7161e5d6a826569574b2be1adef7cc24732,0a1ad52d6bcb335f3b1a2376f47a84df0c2512fa0adb3c34b0f447d0c0b29a3d271dc1a8edf3362d65a5b39b1260140dbc1b0f9533ac1c406431cc3d1195a57b 10 | Space Squash,Space Squash@Space Squash スペース スカッシュ,spacesquash,Japan,1995-09-29,Tomcat System,Cononuts,#players:1 #genre:sports>squash #search:3d>stereo #lang:ja,09c5f3143c25d1d30a3470e571653e48,3f08cae2b6f9e386529949ff954220860db1af64,7f6111f53730aa72ebcdc3883f323163cf6daae320692f9021f24d8ea76282ee,d212af0a644fc9b831b7446c84c8f2bf4c94c843fdc494948b49bc7dca53a6288de17d640fac243a621fcf6afa017eaf420aec0b314f5a6ce81ea5ce8f4fe708 11 | T&E Virtual Golf,T&E Virtual Golf@T&E ヴァーチャル ゴルフ,tandevirtualgolf,Japan,1995-08-11,T&E Soft,T&E Soft,#players:1 #genre:sports>golf #search:3d>stereo #lang:ja,c1dc0852af217146f93d701e1da233d4,c595285d42c69f14b2b418c1edfbe4a7f9a624b6,3a9ec2ffebe507a38e4f4e47f6aa27c524f20fc722281e8b303c31f657de49cc,5ca4f909e02a3f836a756c12b9b1adc8885f827e72f0e18f664a22aa90b0c2b834d2e40c08d6d35480105fe35c7401e5bca43f9a875e20027409066212bd760d 12 | Teleroboxer,Teleroboxer@Teleroboxer テレロボクサー,teleroboxer,Japan,1995-07-21,Nintendo,Nintendo,#players:1 #genre:fighting #embedded:backup>battery #save:backup #search:3d>stereo #lang:en,0742a861a599fe3361aac6ebef6745a7,c59e020f9674774c5cbc022317ebba0eb1d744f7,5bfdc99d6b5bdf32daf3c87e310aa078d6d51c733b02bbbf4042222578b60a36,206a338f0b51db07d4871c33013b694a44b6362897a23a3093b46651305170f6c998374cd7225a88ee2678ad67c3e87636594803e791cb25e7072968e74c829b 13 | Tobidase! Panibon@とびだせ!ぱにボン,Tobidase! Panibon@とびだせ!ぱにボン,tobidasepanibon,Japan,1995-07-21,Hudson,Hudson,#players:1 #genre:puzzle>drop #search:3d>stereo #lang:ja,44039dfaa0f8fcf8ece03b8cda267e4a,b8a12a9677afa5cbce6ed43eb0effb5a02875534,2f8b4121ea160e731f545956b557d6372de7582ecee4e21a79900d7cc6dbc148,a416aa12e000254c2f4adc70045f5015db9dc06bbade313de190ca9a296a8b4b322d87f88ac0327848270f841f1f24a4a8e33adfcaec9d84c602f10f11501a52 14 | Vertical Force,Vertical Force@Vertical Force バーティカルフォース,verticalforce,Japan,1995-08-12,Hudson,Hudson,#players:1 #genre:shmup>v #search:3d>stereo #lang:en,fa50ce1effb4ce1d66438f723be5c788,c7204ba5cfe7d26394b5e22badc580c8ed8c0b37,398428d31ecf045775123ff552118ea2d15f1e2ef88c6c8f27452f39019ff547,a0c06d0a3a8a0700f6cb18cebe6de637414e6213b69649d1a67c93e2dea2d2d518f0e7a7c306995c0837a17f72d6794cecf67fe4749b9c6055a2fc865de10a98 15 | Virtual Bowling,Virtual Bowling,virtualbowling,Japan,1995-12-22,Athena,Athena,#players:1 #genre:parlor>bowling #search:3d>stereo #lang:en,5b11d402f7e322c71a7d4fa6503631fa,a5be7654037050f0a781e70efea0191f43d26f06,54cd07d54a416ce2e56dab3ccd1172ad339c36485ae7a11f762186f60f69e9d3,047013259bf1e32546d77d78e411a2f60b9508f0be479415cac1e9c1674c49861fcf06e40b0e2ec1e770427f840f685cc06bd2481454f6116ae733064b3ad9e1 16 | Virtual Boy Wario Land,Virtual Boy Wario Land: Awazon no Hihō@Virtual Boy Wario Land アワゾンの秘宝,virtualboywarioland,Japan,1995-12-01,Nintendo,Nintendo,#players:1 #genre:action>platformer #embedded:backup>battery #save:backup #search:3d>stereo #lang:en,fb4dc9f4ebd506702eb49e99a62bd803,274c328fbd904f20e69172ab826bf8f94ced1bdb,abfb74c94c07808d368139db2e875cd91608f95e4ab892ac9b9d0442214c7198,189c32a7a50603ec449b8f890d91c9281f99f4781b2cd34332d5c85b8eac1654ebb194bab02353eee2371fd2dea6d658c8b59f6e47a88a2d53e4f673f6dc0291 17 | Virtual Fishing@バーチャルフィッシング,Virtual Fishing@Virtual Fishing バーチャルフィッシング,virtualfishing,Japan,1995-10-06,Locomotive,Pack-In-Video,#players:1 #genre:sim>fishing #embedded:backup>battery #save:backup #search:3d>stereo #lang:ja,c03e792d8628c3c5729fdcae1620fb9a,583b409b7215159219d08e789db46140062095f2,3d62e53c4bcd45fbd22ab4b130ffbcb22cdb7b19faecbf5c8c8364d05628afdc,edc23c8b0b9ae34228638c48d02607b77fafcfa7b29b1398b001512b5930ee79f4e6584ef1d3e1a3e9f4deeaded14426a490a528ac57bd6fb725daffff8fac46 18 | Virtual Lab,Virtual Lab,virtuallab,Japan,1995-12-08,Nacoty,J-Wing,#players:1 #genre:puzzle>drop #search:3d>stereo #lang:ja,1cec316aca8827fdf99c685a1ee49dbc,d96c9f8aac5b4ea012a8fe659bb68fb1159a9c6d,859909c9f67cbf58014b67fd3a79cf31e3866d6c301f112c901f4612b57a7e26,4ffc6ba77f2ad9328c4d21e78fdac59b924068137cac501838876733cf13efab75940c130ed8cbece6575451d3985a51d766a9aabdde41e4dfb9eebf73a42aa4 19 | Virtual Pro Yakyū '95@バーチャルプロ野球'95,Virtual Pro Yakyū '95@バーチャルプロ野球'95,virtualproyakyuu95,Japan,1995-08-11,Kemco,Kemco,#players:1 #genre:sports>baseball #search:3d>stereo #lang:ja,154b76be987a604ff8aafa4d438928f5,ab8fa82b79512eefefccdccea6768078a374c4aa,5f1b6cc370956c47254c90d8ec46d6a7ae183543ac96220a7cdf1cd25f781db3,7532e8bc4bcc90c5482777c5a9741f90ccd818381bf26e497177b77733f14a7e2f9f1e4f227c70e4179755582f1218f5563acb2ccb3b9d12380e1e1a1d66cad1 20 | V Tetris@V Tetris V・テトリス,V Tetris@V Tetris V・テトリス,vtetris,Japan,1995-08-25,Locomotive,BPS,#players:1 #genre:puzzle>drop #search:3d>stereo #lang:en,262bbae465f851ded3bb7cf46e375224,ff7d4dfc467e6e0d3fe8517102132a65a9d17589,3a6a24e9645a926a6a9d3c0cf97a854f9fcc5d19cf4ec3caa770c3e9f9d6ecad,1cf5cc3548f81bc4264da39ed73f001f12e639c71f7d8ea3b256b4ce0564e08494bc40f9c45cca9e125317ce331a24f77fbbc771bb7f95f0735a9a20bdb5e41d 21 | 3D Tetris,3D Tetris,3dtetris,USA,1996-03-22,T&E Soft,Nintendo,#players:1 #genre:puzzle>drop #embedded:backup>battery #save:backup #search:3d>stereo #lang:en,ecf1218706e9b547eab9e4be58d54e21,5177015a91442e56bd76af39447bca365e06c272,76e3321e82ccb51db72090f3e8b289091c1f612afe795cc3badc804650adc15f,7335b51c6bafafefa3cf96fb39bf0fff6eb93f9ec7dce471701a911e3a77c3c026db26c6b1eeb4a4c5ac1246604b0430fb27549568912a9e5412ebc2a6e03d59 22 | Galactic Pinball,Galactic Pinball,galacticpinball,USA,1995-08-14,Intelligent Systems,Nintendo,#players:1 #genre:parlor>pinball #embedded:backup>battery #save:backup #search:3d>stereo #lang:en,85260599fdada2e137053a8647aa0d06,93a25abf4f86e71a49c1c3a470140bb40cb693d6,83471721324e334b7a30b54f78305f31a0a5946b234c57b60e79d9d6912b47f3,6daab14bc96bf58541af2eed8c72f3718a6c36e9f1a69d29cc24fbda235995c0bf27d310bb94780fe028ff77d7771eabfa292ce2993eb3bf3a28007a9da0c0f2 23 | Golf,Golf,tandevirtualgolf,USA,1995-11,T&E Soft,Nintendo,#players:1 #genre:sports>golf #search:3d>stereo #lang:en,977c4da800dacfac1a1402781670f872,23ce3c174789cdd306497d86cb2c4e76ba8b06e5,56179970ec2f766b596b8cb18cf2bbefdabf78d7a4fbc580695ccb8e10aed0e7,c3e83c9660c76007508c00204c078ac4b90031c42fe89bb0d0816b5b129393d3b6200399740a50f0636e7fc68c7a6973dffb95099e80d204fae694378333dc18 24 | Jack Bros.,Jack Bros.,jackbrosnomeirodehihoo,USA,1995-10,Atlus,Atlus,#players:1 #genre:action>maze #save:password #search:3d>stereo #lang:en,ee873c9969c15e92ca9a0f689c4ce5ea,0e086d7ef2bd8b97315196943fd0b71da07aa8f1,942bcab78d062b8eeb8362047fb7718bc40cdb83d3f5c8d9e2d1e3872a2dfd1a,b4c72c60dc8b340a04d88f3627c4063704034f8c1522fb99ea5afbc74dddcb412c91532fdd3e4a5d298f28868e2b27c820ba509fc1038aadc92a32a9f994e035 25 | Mario Clash,Mario Clash,marioclash,USA,1995-10-01,Nintendo,Nintendo,#players:1 #genre:action>platformer #search:3d>stereo:feature>mario #lang:en,b1b3a25ce8fb4f406bf82b8765d307d0,7556a778b60490bdb81774bcbaa7413fc84cb985,9f1baa93a805a4fc471860fb7c806bb7ac8c289ded77a78397ef8f964a11a396,c3d5c07ef1e0a6322af898a1e70aaa4a94b201c8b9dd15c56a86d76937929b56691937ff58619683e32df98e3031aed2f08986ba25d92d7ab06692e59aac52fd 26 | Mario's Tennis,Mario's Tennis,mariostennis,USA,1995-08-14,Nintendo/Tose,Nintendo,#players:1 #genre:sports>tennis #search:3d>stereo:feature>mario #lang:en,38ecc2c5a745a80d32eb9e8e413358c4,5162f7fa9e3eae4338c53ccba641ba080c768754,5dc5e6b5d5f538f56b3b9727db1c7931d9dfe1bbd0743f698897e0fd90e70101,e1703dfc5a5bbc0007c7aee1c92a1e82b87a0c18b6e75b018288989da76f0fa0f1d31509b9f090b2553edf74396a04e993e3e62f269d664ca0aa48bd65de0f21 27 | Nester's Funky Bowling,Nester's Funky Bowling,nestersfunkybowling,USA,1996-02,Saffire,Nintendo,#players:2:vs #genre:parlor>bowling #search:3d>stereo #lang:en,0285dc41d75be8419d12472f20025305,f4a4c7928f15102cf14c90c5f044e5f7cc7c32f9,ce391aae5e672f3ca472efeaab985da8cee4a36fe068ed50489afa45aaeb5962,e6cda1c50cee40f5c888dbd602f27104d424e69f69a3b8e67d2879770430219bcf56c04408f8694a7a24331e6087fee682aeb4373f74e83906de57a6f8dc8916 28 | Panic Bomber,Panic Bomber,tobidasepanibon,USA,1995-12,Hudson,Hudson,#players:1 #genre:puzzle>drop #search:3d>stereo #lang:en,467247d5e3383d066005565bf8218436,80216b2874cf162f301d571bb8aebc98d80b4f3e,e75e98add227ea9c2168ff13b131e3c72faa789e1ef4b9fdbae13d746ad9b3e3,54377fa4a1472abf09ed9326c71e38efedf571a71d763bc6d6472018f1fd45f610ed0bbca32f35250f68747343712ee0bc6b5d622d4c93d3950a48afe9876a93 29 | Red Alarm,Red Alarm,redalarm,USA,1995-08-14,T&E Soft,Nintendo,#players:1 #genre:shooting>rail #search:3d>stereo #lang:en,e56e85761f52a613b34079d5322088ce,494fa60cb8997880b4e8cd3270b21d6c2768a48a,e53592a5eaf8f1d33bbb06a0389be685fdb8192454c826ed525d34bd27702e33,65cf67a7af873c86e7cb0bb6b3497d455c044b3bc7cac82d0371bdede93f5ea094d3d80846ecabde9e647ee45cb618e9b0339725c708a4b0991725c62669d7e2 30 | Teleroboxer,Teleroboxer,teleroboxer,USA,1995-07-21,Nintendo,Nintendo,#players:1 #genre:fighting #embedded:backup>battery #save:backup #search:3d>stereo #lang:en,0742a861a599fe3361aac6ebef6745a7,c59e020f9674774c5cbc022317ebba0eb1d744f7,5bfdc99d6b5bdf32daf3c87e310aa078d6d51c733b02bbbf4042222578b60a36,206a338f0b51db07d4871c33013b694a44b6362897a23a3093b46651305170f6c998374cd7225a88ee2678ad67c3e87636594803e791cb25e7072968e74c829b 31 | Vertical Force,Vertical Force,verticalforce,USA,1995-12-01,Hudson,Nintendo,#players:1 #genre:shmup>v #search:3d>stereo #lang:en,87c38f66d5b9ead72af22f515a3a5f51,38f9008f60b09deef1151d46b905b090a0338200,73b0d5b62c30ff1e3cc78e4c099dbdbda2517fa0ea02d6a8fb180894675c3216,7207aec4cdf6348798cc5c0e26447ef5f8701a3e377798a217543c693cd6cd83a0afedc2fa7528e47308c58de4e6e6e24a7c8173df2f72123188c51d8c56c16e 32 | Virtual Boy Wario Land,Virtual Boy Wario Land,virtualboywarioland,USA,1995-11-27,Nintendo,Nintendo,#players:1 #genre:action>platformer #embedded:backup>battery #save:backup #search:3d>stereo #lang:en,fb4dc9f4ebd506702eb49e99a62bd803,274c328fbd904f20e69172ab826bf8f94ced1bdb,abfb74c94c07808d368139db2e875cd91608f95e4ab892ac9b9d0442214c7198,189c32a7a50603ec449b8f890d91c9281f99f4781b2cd34332d5c85b8eac1654ebb194bab02353eee2371fd2dea6d658c8b59f6e47a88a2d53e4f673f6dc0291 33 | Virtual League Baseball,Virtual League Baseball,virtualproyakyuu95,USA,1995-09-11,Kemco,Kemco,#players:1 #genre:sports>baseball #search:3d>stereo #lang:en,2ba914c8aa16f2f9230b3c5b7e17e67b,266fe615ee3df1160a20b456824699f16810fa28,eb3c0199cb949be474a70153ed6bfa575aef9600384855924c3eb4d884d12586,69f135cc53f5668372f5eb7a3751bc67bfd7e1c0d41954f04a9e26d46d0e973962e23f1e37e0fb9eb946cf30125f768104cbda06434181af1556ffc5bcbadd67 34 | Waterworld,Waterworld,waterworld,USA,1995-12-21,Ocean,Ocean,#players:1 #genre:shooting>tps #search:3d>stereo #based:movie #lang:en,110a83bc070559c5cc5634a8b5cae274,dcc46484bd0acab0ac1ea178f425a0f5ccfb8dc2,9c21378c539e04b433ad8dc63a5e301025a1a19830effe94b827516ee58d4c56,5760e5074c3bfc1695140fc5cf99c11f866a429a9bce54608e671e1573997dc0b57d876ce7e66b36a9726c16c37f2ef91de1f3365c8abfc075b8afc4835d1c93 35 | Bound High,Bound High,boundhigh,Japan,1996,Japan System Supply,Nintendo,#players:1 #genre:action:puzzle #search:3d>stereo #unfinished:proto #lang:en,a460e2660fa951e9d4e3b05aee9f5018,1196ef8b9a96a0ff2f3634f8eb1c4865c0fb6b01,3addd5321c08c138724e68bfc4bdf23dcf2b2cf16ae3109fe4f802de7c39efd2,09f276822eb967d60d40e58c500d0faede82f8730a173ace51b3ddca3e2c4f784cba1ca65a145ce8351a017be498384f0c811b6e1ca3cbd597857a61a66c0f22 36 | Niko-chan Battle@ニコちゃん バトル,Niko-chan Battle@ニコちゃん バトル,nikochanbattle,Japan,1995,Locomotive,BPS,#players:1 #genre:shooting>fps #search:3d>stereo #lang:en #unfinished:proto,d9a0215782dcacee5a3c4cc83d1c5189,217ca062f65d4e8b2848085918af5ac4b33b12d4,ae35cc583482187045307a326edfc19887b8129c039166d80cd5c316524d89bf,151864c552435ce67d02ea78188341e8a6602d81fb2400acd3b97faf29da788d5150ef8ecf6b3e1d3547284995d6d8312af5df5278fcded190d9d70eb6f83b66 37 | Space Pinball,Space Pinball,galacticpinball,Japan,1995,Intelligent Systems,Nintendo,#players:1 #genre:parlor>pinball #search:3d>stereo #unfinished:proto #lang:en,31073126fad41777357391ecc36d6f7f,dc182360c7c8d26323db8921f09db76638e81ced,ea77eacb93a109c23ca776b28bcbf681d25eec8ccff4a2609fb9011dc82af8d0,f210b58ae47d28cee67231c42e2acec53ff46211b5825f23e05ae69163c542a34500ef4afffd16e2c63859c0a1edc231050c00efcd5c0416495c3841eed82200 38 | 3-D BattleSnake,3-D BattleSnake,3dbattlesnake,World,2003,DogP,DogP,#players:2:vs #genre:action:puzzle #search:3d>stereo #lang:en #unlicensed:aftermarket,0ab33db88ee41f540d968127dc55fa50,35d8c26e62d64dade68847dd1d8f55a92c6b8058, 6f590323fa8b463e68eb23ce4abc3e2666d492be96dbfdd71933cbf1b91c31b0,358256c0c0673d11971c206cd630620e1d61368530fa8430fc5129a25bc457d6ce7c41117844807d5e58ceec18b8a00cc3fa506c7c2123c05e09f269ba2fe7fe 39 | 3D Crosswords,3D Crosswords,3dcrosswords,World,2014,VirtualChris,VirtualChris,#players:1 #genre:board #search:3d>stereo #lang:en #unlicensed:aftermarket,35554dcf602fd2452d7adb033a85cc40,d02befd9e2269093c45109b91609eefd4b7a2bed, bbc3c22562660e1bba5bbf1d2603a611e557473862b31f2539c487252b9057d5,81e83aae6139ccc3cf148d011e48231481352e4f251ef8c1dc2f474039033c1ee1cb97b2c3ba950bca7902983ab22b6d4ee9b4522230d80fe6f7eeb3d0ec26ef 40 | BLOX,BLOX,blox,World,2003,KR155E,KR155E,#players:1 #genre:puzzle #search:3d>stereo #lang:en #unlicensed:aftermarket #rev:1,f82d4c9fdd81518537d88f70c6602bb5,f2105349dff09bdc00e4548460991dde9ac7c2af, bb69dab364fc96ed1bd93b3f633ff928baf568db66638b830b3060411e40b208,eccf2f97a4f384d21d4dc2eed62cfe9a0e5a58865069006717c18864fcd3a1384103803baa927805f6599189cbf38c0a77347e2d676ded738db3a78669eabc55 41 | BLOX 2,BLOX 2,blox2,World,2009,KR155E,KR155E,#players:1 #genre:puzzle #embedded:backup>battery #save:backup #search:3d>stereo #lang:en:fr:de:es:it:sv:fi:cs:sl #unlicensed:aftermarket,cc91d6389df2c9777919e8e8ab2c0e66,66b2a25ef8e1af74bed4bbba4785951a9d6edce0, 7a5e2f72da47da89ca86af2f50245f30a63bd59ac3083c7f5cdab76a26230eb5,8f0db698000552a3c8ae8499d2bd1bd862cef203324f33f27e84eef89f9ebad319dceaa39a08617ae4d0e0eb485e6295b8ae017ae83c4dc3ed6ab1bcfbb9a05b 42 | Capitán Sevilla 2,Capitán Sevilla 2,capitansevilla2,World,2010,rubengar,rubengar,#players:1 #genre:action>platformer #lang:es #search:3d>stereo #unlicensed:aftermarket,fe92b28e43edd00c6b9401d81446a0a7,d971b1621cbea6c90907e65780eb2ed20e13edb5, c760dfc8fa676a6b127987f1e93dc24eb1c95d866736b2bc0a7a493a91f62189,fd5613ef4a9de1d14e7b62d9cec69d76208041fbd792bef9be04a731a14deac8f19223dc9ffe92a74f718e5ed8c39dcfc828be8455772e090ab297f845b4484e 43 | Elevated Speed,Elevated Speed,elevatedspeed,World,2021,PizzaRollsRoyce,PizzaRollsRoyce,#players:2:vs #genre:racing #embedded:backup>battery #save:backup #search:3d>stereo #lang:en #unlicensed:aftermarket,8f7bcfdd0f412d9060b06a97a89fe202,8b08f08f37127621483aa4e204a3e3b2312af196, 6c1ed18e735b6a25d873e4434161b174e60ac49a4526ca8a80b86d1a067229d5,638631ebea279ac3ece5ba7909368f88084976aa638fa8140e093c59560b5105b1de898472b6971b2ac8948f45af7ffbc9127444b6abbc3c92c515d2e55b00c2 44 | Fishbone,Fishbone,fishbone,World,2012,thunderstruck/Virtual_Ben,thunderstruck/Virtual_Ben,#players:1 #genre:action #embedded:backup>battery #save:backup #search:3d>stereo #lang:en #unlicensed:aftermarket,eee8be03986ddbc3ada91b10a543f17e,c036c441bb3c16e5b2cc6ea7681f56a8605b932e, 401f3c0606f685060babd7cf3611a48fcbc84c4d5211da9bd0bf4aee28ecd88b,ac7013ee41c2c3093feeca10d0b56dd1990e279d5fff273961956e1a330fcd9c50daba20822008eb49cfb7573b8535de80238f341dd565ee88ec3e960c520958 45 | Hamburgers En Route to Switzerland,Hamburgers En Route to Switzerland,hamburgersenroutetoswitzerland,World,2020,VirtualChris,VirtualChris,#players:1 #genre:shmup>h #search:3d>stereo #lang:en #unlicensed:aftermarket,45aa19c4b2f10c7ef6782b0cb356e265,bf426b164378376e11dc0416ffa840a84fd1cd15,15b6afee82526a40fc37fdbb58207f3c69e6b144d15c5b066d800e09b3a0c4bb,f81c6b91cc2d24cc04db7f4df557830be4820410d73546dd05840a11e7bdf8e6beb37f485225d1c26a72f432046efa763cd53767ded6e7714e58261866c6de94 46 | Hyper Fighting,Hyper Fighting,hyperfighting,World,2013,Mr. Anonymous,Mr. Anonymous,#players:2:vs #genre:fighting #embedded:backup>battery #save:backup #search:3d>stereo #lang:en #unlicensed:aftermarket,c2047a94dcb0db30794c8533ba625622,578355de83822ce67522033dd7545631124a71ab, 8f37f324550c9b60246c0a3efefa1b7f2400ef9f79b5d3ce2ef61699c68614b2,2e6378bb2801c0736c4040ab601a7373ca57b0027e1e93593bfa6e5202a1ea59fa57e8102e97b73f5d33b5c91ad6c3adca57ccbffaf052b769c8966c82e40d1c 47 | Insecticide,Insecticide,insecticide,World,2009,VirtualChris,VirtualChris,#players:1 #genre:fighting #search:3d>stereo #lang:en #unlicensed:aftermarket,f2358ae652afb6a2520cd6df89ee6b7e,dd7d02cd879584dea3cb9766e44948ae6a4b320f, 61778efd51d4eabb7ae78dd67a5142bd565f48e31ba28c22767d3f0ef1fc958b,7213300c261bed54cf44fff2050f490e57b0db61ce25db66b0c17316c1f60f35fc141f25dec58fc7b1972a6b29609880fca804efeed43aa65a8b288675d87168 48 | Mario Combat,Mario Combat,mariocombat,World,2014,thunderstruck,thunderstruck,#players:1 #genre:shooting>gallery #search:3d>stereo #lang:en #unlicensed:aftermarket,6fd50c08f16d44da026dca190ade43fe,2dd53ebf483f20d53473d5e7a2a42e39dd1d8f49, 410616294375bfea36573c98a8767a2697378aa53d325901fa3f7a3e4b357271,79eff703d6eccfed76da7f9f02bce4c66290f5db7455dfedc2427b4091dc3ffc9e97f43793fee359861146777775ac2de3d2b2da8556ebb60345c0bd16a0d5be 49 | Mario Kart: Virtual Cup,Mario Kart: Virtual Cup,mariokartvirtualcup,World,2008,DogP,DogP,#players:1 #genre:racing>combat #search:3d>stereo #lang:en #unlicensed:aftermarket,4b8c8b6a7711a005dd896b3ee9b8d0f1,7743978a58a27b8e05e36d353439a8b11ead5235, 51a2479af2f0bda3a83665b5a24d97dc29859255f1cb96cc61e341c45a090f1a,6720fa5894bca1a50390f292ff81b77992554cc1f8339ceb5c3b92b1e60fe65d1b79a08a47ae260e17d7dfdfb97601f5686b1996ca62c6cbf1e7936822361fe7 50 | Mario VB,Mario VB,mariovb,World,2005,DogP/KR155E,DogP/KR155E,#players:1 #genre:action>platformer #search:3d>stereo #lang:en #unlicensed:aftermarket,03f72468609897a17028823691fc1c56,ccdc23e4f866e771d15fa480706669003afbde5b, 7be6efe442ed38e4e81fcf284a84c1072aa0eb9e86ebe341e9a793e1618efe2d,c94dbccc8046e7240f9154ac1d37f0066f68ff1b63cacff618f4685d0c5a2c971d9b42ddc998b7be35c0f5d53b4d3c8c45e2984a08840e8948dd4acd0b25ae90 51 | Red Square,Red Square,redsquare,World,2019,Kresna/Nyrator,Kresna/Nyrator,#players:1 #genre:adventure #search:3d>stereo #lang:en #unlicensed:aftermarket,60cc7855db22ff05c8ed7f18687197fc,58443bae644d3b777b9cb2dba4d76be582e3e0cf, 479320106f1bd84a7af8a0829378253835adf88499af3b3582055fcd5734ce10,2bab3e98363627c0c5c0dd3d63bbcdb239953ebb1339b956d16bb46d545ae62bc9a3639e8786129af9f3d85105814d544fe8f35229b70040b82383f839fabc27 52 | Soviet Union 2010,Soviet Union 2010,sovietunion2010,World,2010,HorvatM,HorvatM,#players:1 #genre:shmup>v #rev:2 #search:3d>stereo #lang:en #unlicensed:aftermarket,74d21ea01f97ac19e018d7f5a3e3bc7c,f534d323bc838a5f5a25e0bf977ba297708eabe3, c3f64950c301283b01689a9a94f10bd82bc051233766f5bdc4f08ef7f7e7e1ca,716c03d78bd31e3500b5b157c04283714c80abfcfc6b5da195b79fb8f44523bba425bdf217c2a3edab9472dcba95c725d2c93d2ef7f6d9257ddb38007393e558 53 | Soviet Union 2011,Soviet Union 2011,sovietunion2011,World,2011,HorvatM,HorvatM,#players:1 #genre:shmup>v #rev:2 #search:3d>stereo #lang:en #unlicensed:aftermarket,7209a6bd5d788f12e97b9247d28197ce,b6f9c7c86ecaaf37f1966c3480752531f9dd5515, a88986dd753bda4e6dd654e36d340b2bbdc29b950f47b5f30ffadb161025ae06,cef1a9894611e5b23062f82a12ead4bd0ed525e9aefc8735ad8e22fe3bdf6832d18435deb4eeb71a010fb52c519882404d2d1f675771eeaa158f6b2e9d588423 54 | -------------------------------------------------------------------------------- /console_pioneer_laseractive.csv: -------------------------------------------------------------------------------- 1 | Screen title @ Exact,Cover title @ Exact,ID,Region,Release date,Developer,Publisher,Tags 2 | 3D Museum,3D Museum,3dmuseum,Japan,1994-02-25,Multimedia Creators Network,Pioneer,#players:1 #genre:notagame>media>slideshow #addon:expansion>megald:glasses>3dgoggle:rss #search:3d>stereo #lang:en 3 | 3D Museum,3D Museum,3dmuseum,Japan,1994-06-25,Multimedia Creators Network,Pioneer,#players:1 #genre:notagame>media>slideshow #addon:expansion>ldromrom:glasses>3dgoggle:rss #search:3d>stereo #lang:en 4 | 3D Virtual Australia,3D Virtual Australia,3dvirtualaustralia,Japan,1995-03-11,JP Multimedia,Pioneer,#players:1 #genre:notagame>educational>media #addon:expansion>megald:glasses>3dgoggle #search:3d>stereo #lang:ja 5 | Akuma no Shinpan@悪魔の審判,Akuma no Shinpan: Konseiki Saigo no Shinri Game@悪魔の審判 今世紀最後の心理ゲーム,akumanoshinpan,Japan,1993-08-20,Planet,Planet,#players:1 #genre:quiz #addon:expansion>ldromrom #search:keyword>endorsed #lang:ja 6 | Angel Mate,Angel Mate,angelmate,Japan,1993-10-25,Planet,Planet,#players:1 #genre:board>cards #addon:expansion>ldromrom #search:keyword>strip #search:keyword>endorsed #lang:ja 7 | Back to the Edo@Back to the 江戸,Back to the Edo@Back to the 江戸,backtotheedo,Japan,1994-12-22,JP Multimedia,Pioneer,#players:1 #genre:quiz #addon:expansion>megald #lang:ja 8 | Bi Ryojon Collection: Watanabe Minayo Shashinshū@美リュージョンコレクション 渡辺美奈代写真集 Minayo Watanabe,Bi Ryojon Collection: Watanabe Minayo@美リュージョンコレクション 渡辺美奈代 Minayo Watanabe,biryojoncollectionwatanabeminayo,Japan,1995-02-25,WiZ,Planet,#players:1 #genre:notagame>slideshow #addon:expansion>megald #search:keyword>endorsed #save:backup #lang:ja 9 | Bi Ryojon Collection: Watanabe Minayo Shashinshū@美リュージョンコレクション 渡辺美奈代写真集 Minayo Watanabe,Bi Ryojon Collection: Watanabe Minayo@美リュージョンコレクション 渡辺美奈代 Minayo Watanabe,biryojoncollectionwatanabeminayo,Japan,1994-10-25,WiZ,Planet,#players:1 #genre:notagame>slideshow #addon:expansion>ldromrom #search:keyword>endorsed #save:backup #lang:ja 10 | Bi Ryojon Collection Vol. 2: Sakaki Yūko Shashinshū@美リュージョンコレクション 坂木優子写真集 Yuko Sakaki,Bi Ryojon Collection: Sakaki Yūko@美リュージョンコレクション 坂木優子 Yuko Sakaki,biryojoncollectionsakakiyuuko,Japan,1995-04-25,WiZ,Planet,#players:1 #genre:notagame>slideshow #addon:expansion>megald #save:backup #search:keyword>endorsed #lang:ja 11 | Bi Ryojon Collection Vol. 2: Sakaki Yūko Shashinshū@美リュージョンコレクション 坂木優子写真集 Yuko Sakaki,Bi Ryojon Collection: Sakaki Yūko@美リュージョンコレクション 坂木優子 Yuko Sakaki,biryojoncollectionsakakiyuuko,Japan,1994-11-25,WiZ,Planet,#players:1 #genre:notagame>slideshow #addon:expansion>ldromrom #save:backup #search:keyword>endorsed #lang:ja 12 | Don Quixote,Don Quixote: A Dream in Seven Crystals,donquixoteadreaminsevencrystals,Japan,1994-12-22,PiC/Easy Computer System/Tokyo Movie Shinsha,PiC,#players:1 #genre:rpg>dungeoncrawler #addon:expansion>megald #save:backup #based #lang:ja 13 | DoraDora Paradise@ドラドラパラダイス DoraDora Paradise,DoraDora Paradise@ドラドラパラダイス DoraDora Paradise,doradoraparadise,Japan,1994-03-25,WiZ,Planet,#players:1 #genre:board>mahjong #addon:expansion>ldromrom #save:backup #search:keyword>strip #search:keyword>endorsed #lang:ja 14 | Dr. Paolo no Totteoki Video@Dr.パウロのとっておきビデオ,Dr. Paolo no Totteoki Video@Dr.パウロのとっておきビデオ,drpaolonototteokivideo,Japan,1994-10-25,Infiniti/JP Multimedia,DryIce,#players:1 #genre:adventure>pointandclick:notagame>media #addon:expansion>megald:glasses>3dgoggle #search:3d>stereo #lang:ja 15 | Ghost Rush!,Ghost Rush!,ghostrush,Japan,1994-12-03,Den'no Shokai,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>megald #save:backup #lang:ja:en 16 | Goku,Goku,goku,Japan,1995-06-15,Multimedia Creators Network,Pioneer,#players:1 #genre:notagame>educational:puzzle #addon:expansion>megald:glasses>3dgoggle:rss #search:3d>stereo #save:backup #lang:ja 17 | Goku,Goku,goku,Japan,1995-10-20,Multimedia Creators Network,Pioneer,#players:1 #genre:notagame>educational:puzzle #addon:expansion>ldromrom:glasses>3dgoggle:rss #search:3d>stereo #save:backup #lang:ja 18 | Hi-Roller Battle,Hi-Roller Battle,hirollerbattle,Japan,1993-12-20,CRC Research institute/Q-tec/A&L/Sound M's,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>megald #lang:ja:en 19 | Hyperion,Hyperion@Space Shooting Game Hyperion,hyperion,Japan,1994-05-27,HighTech Lab,Taito,#players:2:coop #genre:shooting>gallery #addon:expansion>megald:rss #lang:en 20 | I Will: The Story of London,I Will: The Story of London,iwillthestoryoflondon,Japan,1993-08-20,CRC Research Institute,Pioneer,#players:1 #genre:notagame>educational>media:adventure>pointandclick #addon:expansion>megald #save:backup #lang:ja:en 21 | J. B. Harold: Blue Chicago Blues,J. B. Harold: Blue Chicago Blues,bluechicagoblues,Japan,1995-04-15,Riverhill,Riverhill,#players:1 #genre:adventure>visualnovel #addon:expansion>megald #save:backup #lang:ja:en 22 | J. B. Harold: Blue Chicago Blues,J. B. Harold: Blue Chicago Blues,bluechicagoblues,Japan,1994-12-20,Riverhill,NEC,#players:1 #genre:adventure>visualnovel #addon:expansion>megald #save:backup #lang:ja:en 23 | LaserActive New Disc Express vol.1,LA Express Vol.1,laseractivenewdiscexpress1,Japan,,Pioneer,Pioneer,#players:1 #genre:notagame #lang:ja 24 | Manhattan Requiem,Manhattan Requiem,manhattanrequiem,Japan,1993-10-25,Riverhill,Riverhill,#players:1 #genre:adventure>visualnovel #addon:expansion>ldromrom #save:backup #port:nec>pc88 #lang:ja:en 25 | Melon Brains,Melon Brains: Exploring The Mind Of The Dolphin,melonbrains,Japan,1994-09-20,Multimedia Creators Network/Studio Garage,Pionner,#players:1 #genre:notagame>educational>media #addon:expansion>megald:glasses>3dgoggle:rss #search:3d>stereo #lang:ja:en 26 | Melon Brains,Melon Brains: Exploring The Mind Of The Dolphin,melonbrains,Japan,1994-12-15,Multimedia Creators Network/Studio Garage,Pionner,#players:1 #genre:notagame>educational>media #addon:expansion>ldromrom:glasses>3dgoggle:rss #search:3d>stereo #lang:ja:en 27 | Pyramid Patrol,Pyramid Patrol,pyramidpatrol,Japan,1993-08-20,HighTec Lab/C-lab,Taito,#players:1 #genre:shooting>gallery #addon:expansion>megald:rss #port:arcade #lang:en 28 | Quiz Econosaurus,Quiz Econosaurus: Econosaurus Kankyō Quiz@Quiz Econosaurus エコノザウルス環境クイズ,quizeconosaurus,Japan,1993-08-20,Hudson,Hudson,#players:1 #genre:quiz:notagame>educational #addon:expansion>ldromrom #save:backup #search:keyword>endorsed #lang:ja:en 29 | Road Blaster,Road Blaster,roadblaster,Japan,1995-01-25,Wolf Team,Data East,#players:2:coop #genre:action:shooting>gallery:racing #addon:expansion>megald #port:arcade #lang:en 30 | Rocket Coaster,Rocket Coaster,rocketcoaster,Japan,1993-12-20,HighTech Lab,Taito,#players:1 #genre:racing #addon:expansion>megald:rss #port:arcade #lang:en 31 | Space Berserker,Space Berserker,spaceberserker,Japan,1994-02-25,Den'no Shokai/Virtual East/Plus One/Data Builder/Noise,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>megald:rss #lang:ja:en 32 | The Great Pyramid,The Great Pyramid,thegreatpyramid,Japan,1993-08-20,CRC Research Institute,Pioneer,#players:1 #genre:notagame>educational>media #addon:expansion>megald #lang:ja:en 33 | Time Gal,Time Gal,timegal,Japan,1995-03-25,HighTech Lab,Taito,#players:2:alt #genre:action #addon:expansion>megald #port:arcade #lang:ja 34 | Triad Stone,Triad Stone@Triad Stone トライアッドストーン,triadstone,Japan,1994-03-25,Seraphic,SEGA,#players:1 #genre:action #addon:expansion>megald #port:arcade #search:keyword>dolby #lang:ja:en 35 | Vajra@वज्र Vajra,Vajra@वज्र Vajra,vajra,Japan,1993-10-25,Data West,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>ldromrom #lang:en 36 | Vajra Ni@वज्र Vajra 弐,Vajra Ni@Vajra 弐,vajrani,Japan,1994-10-31,Data West,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>ldromrom:glasses>3dgoggle:rss #search:3d>stereo #lang:en 37 | Virtual Cameraman,Virtual Cameraman,virtualcameraman,Japan,1993-12-10,Transpegasus,Planet,#players:1 #genre:notagame>slideshow>media #addon:expansion>megald:backup>backupramcart #save:backup #search:keyword>endorsed #lang:ja 38 | Virtual Cameraman 2@Virtual Cameraman 2 タイ・プーケット ナンパ編,Virtual Cameraman 2@Virtual Cameraman 2 タイ・プーケット ナンパ編,virtualcameraman2,Japan,1994-04-15,Transpegasus,Planet,#players:1 #genre:notagame>slideshow>media #addon:expansion>megald:backup>backupramcart:glasses>3dgoggle #search:3d>stereo #save:backup #search:keyword>endorsed #lang:ja 39 | Zapping: Satsui@ザッピング 「殺意」,Zapping: Satsui@ザッピング 「殺意」,zappingsatsui,Japan,1994-08-25,JP Multimedia,Pioneer,#players:1 #genre:adventure:notagame>media #addon:expansion>megald #save:backup #based #lang:ja 40 | Zapping: Satsui@ザッピング 「殺意」,Zapping: Satsui@ザッピング 「殺意」,zappingsatsui,Japan,1994-06-10,JP Multimedia,Pioneer,#players:1 #genre:adventure:notagame>media #addon:expansion>ldromrom #save:backup #based #lang:ja 41 | 3D Museum,3D Museum,3dmuseum,USA,1994,Multimedia Creators Network,Pioneer,#players:1 #genre:notagame>media>slideshow #addon:expansion>megald:glasses>3dgoggle:rss #search:3d>stereo #lang:en 42 | Don Quixote,Don Quixote: A Dream in Seven Crystals,donquixoteadreaminsevencrystals,USA,1995,PiC/Easy Computer System/Tokyo Movie Shinsha,PiC,#players:1 #genre:rpg>dungeoncrawler #addon:expansion>megald #save:backup #based #lang:en 43 | Ghost Rush!,Ghost Rush!,ghostrush,USA,1994-12,Den'no Shokai,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>megald #save:backup #lang:ja:en 44 | Goku,Goku,goku,USA,1995,Multimedia Creators Network,Pioneer,#players:1 #genre:notagame>educational:puzzle #addon:expansion>megald:glasses>3dgoggle:rss #search:3d>stereo #save:backup #lang:en 45 | Hi-Roller Battle,Hi-Roller Battle,hirollerbattle,USA,1994-05-26,CRC Research institute/Q-tec/A&L/Sound M's,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>megald #lang:ja:en 46 | Hyperion,Hyperion@Space Shooting Game Hyperion,hyperion,USA,1994-07-13,HighTech Lab,Taito,#players:2:coop #genre:shooting>gallery #addon:expansion>megald:rss #lang:en 47 | I Will: The Story of London,I Will: The Story of London,iwillthestoryoflondon,USA,1993-12-23,CRC Research Institute,Pioneer,#players:1 #genre:notagame>educational>media:adventure>pointandclick #addon:expansion>megald #save:backup #lang:ja:en 48 | J. B. Harold: Blue Chicago Blues,J. B. Harold: Blue Chicago Blues,bluechicagoblues,USA,1995,Riverhill,Riverhill,#players:1 #genre:adventure>visualnovel #addon:expansion>megald #save:backup #lang:ja:en 49 | Melon Brains,Melon Brains: Exploring The Mind Of The Dolphin,melonbrains,USA,1994-11-23,Multimedia Creators Network/Studio Garage,Pionner,#players:1 #genre:notagame>educational>media #addon:expansion>ldromrom:glasses>3dgoggle:rss #search:3d>stereo #lang:ja:en 50 | Pyramid Patrol,Pyramid Patrol,pyramidpatrol,USA,1993-12-23,HighTec Lab/C-lab,Taito,#players:1 #genre:shooting>gallery #addon:expansion>megald:rss #port:arcade #lang:en 51 | Road Prosecutor,Road Prosecutor,roadblaster,USA,1995,Wolf Team,Data East,#players:2:coop #genre:action:shooting>gallery:racing #addon:expansion>megald #port:arcade #lang:en 52 | Rocket Coaster,Rocket Coaster,rocketcoaster,USA,1994-05-26,HighTech Lab,Taito,#players:1 #genre:racing #addon:expansion>megald:rss #port:arcade #lang:en 53 | Space Berserker,Space Berserker,spaceberserker,USA,1993,Den'no Shokai/Virtual East/Plus One/Data Builder/Noise,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>megald:rss #lang:ja:en 54 | The Great Pyramid,The Great Pyramid,thegreatpyramid,USA,1993-12-23,CRC Research Institute,Pioneer,#players:1 #genre:notagame>educational>media #addon:expansion>megald #lang:ja:en 55 | Triad Stone,Triad Stone,triadstone,USA,1994-05-31,Seraphic,SEGA,#players:1 #genre:action #addon:expansion>megald #port:arcade #search:keyword>dolby #lang:ja:en 56 | Pyramid Patrol,Pyramid Patrol,pyramidpatrol,Japan,1993,HighTec Lab/C-lab,Taito,#players:1 #genre:shooting>gallery #addon:expansion>megald:rss #port:arcade #lang:en #unfinished:demo 57 | Rocket Coaster,Rocket Coaster,rocketcoaster,Japan,,HighTech Lab,Taito,#players:1 #genre:racing #addon:expansion>megald:rss #port:arcade #lang:en #unfinished:demo 58 | 3D Museum,3D Museum,3dmuseum,Japan,,Multimedia Creators Network,Pioneer,#players:1 #genre:notagame>media>slideshow #addon:expansion>megald:glasses>3dgoggle:rss #search:3d>stereo #lang:en 59 | Back to the Edo@Back to the 江戸,Back to the Edo@Back to the 江戸,backtotheedo,Japan,1994-12-22,JP Multimedia,Pioneer,#players:1 #genre:quiz #addon:expansion>megald #lang:ja #unfinished:sample 60 | Don Quixote,Don Quixote: A Dream in Seven Crystals,donquixoteadreaminsevencrystals,Japan,,PiC/Easy Computer System/Tokyo Movie Shinsha,PiC,#players:1 #genre:rpg>dungeoncrawler #addon:expansion>megald #save:backup #based #lang:ja #unfinished:sample 61 | Dr. Paolo no Totteoki Video@Dr.パウロのとっておきビデオ,Dr. Paolo no Totteoki Video@Dr.パウロのとっておきビデオ,drpaolonototteokivideo,Japan,,Infiniti/JP Multimedia,DryIce,#players:1 #genre:adventure>pointandclick:notagame>media #addon:expansion>megald:glasses>3dgoggle #search:3d>stereo #lang:ja #unfinished:sample 62 | Ghost Rush!,Ghost Rush!,ghostrush,Japan,,Den'no Shokai,Pioneer,#players:1 #genre:shooting>gallery #addon:expansion>megald #save:backup #lang:ja:en #unfinished:sample 63 | Goku,Goku,goku,Japan,,Multimedia Creators Network,Pioneer,#players:1 #genre:notagame>educational:puzzle #addon:expansion>megald:glasses>3dgoggle:rss #search:3d>stereo #save:backup #lang:ja #unfinished:sample 64 | Hyperion,Hyperion@Space Shooting Game Hyperion,hyperion,Japan,,HighTech Lab,Taito,#players:2:coop #genre:shooting>gallery #addon:expansion>megald:rss #lang:en #unfinished:sample 65 | Hyperion,Hyperion@Space Shooting Game Hyperion,hyperion,USA,,HighTech Lab,Taito,#players:2:coop #genre:shooting>gallery #addon:expansion>megald:rss #lang:en #unfinished:sample 66 | J. B. Harold: Blue Chicago Blues,J. B. Harold: Blue Chicago Blues,bluechicagoblues,Japan,,Riverhill,NEC,#players:1 #genre:adventure>visualnovel #addon:expansion>megald #save:backup #lang:ja:en #unfinished:sample 67 | Melon Brains,Melon Brains: Exploring The Mind Of The Dolphin,melonbrains,Japan,,Multimedia Creators Network/Studio Garage,Pionner,#players:1 #genre:notagame>educational>media #addon:expansion>megald:glasses>3dgoggle:rss #search:3d>stereo #lang:ja:en #unfinished:sample 68 | Road Blaster,Road Blaster,roadblaster,Japan,,Wolf Team,Data East,#players:2:coop #genre:action:shooting>gallery:racing #addon:expansion>megald #port:arcade #lang:en #unfinished:sample 69 | Road Prosecutor,Road Prosecutor,roadblaster,Japan,,Wolf Team,Data East,#players:2:coop #genre:action:shooting>gallery:racing #addon:expansion>megald #port:arcade #lang:en #unfinished:beta 70 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pandas>=2.2.0 2 | pyyaml>=6.0.1 3 | colorama>=0.4.6 4 | -------------------------------------------------------------------------------- /scripts/README_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # GameDataBase 2 | 3 | [![Patrons](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.patreon.com%2Fapi%2Fcampaigns%2F11667791&query=data.attributes.patron_count&suffix=%20Patrons&color=FF5441&label=Patreon&logo=Patreon&logoColor=FF5441&style=for-the-badge)](https://patreon.com/GameDataBase) 4 | [![Monthly](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dgamedatabase%26type%3Dpledges%26suffix%3D%2520USD%2520%252F%2520MO&color=FF5481&label=Patreon&logo=Patreon&logoColor=FF5441&style=for-the-badge)](https://patreon.com/gamedatabase) 5 | [![Status](https://img.shields.io/badge/Status-Active-success?style=for-the-badge)](https://patreon.com/GameDataBase)[![Creation Count](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.patreon.com%2Fapi%2Fcampaigns%2F11667791&query=data.attributes.creation_count&suffix=%20Entries&color=blue&label=&style=for-the-badge)](https://patreon.com/GameDataBase) 6 | 7 | [Join GameDataBase on Patreon and consider supporting the project](https://www.patreon.com/GameDataBase) 8 | 9 | GameDataBase project aims to provide the most detailed information about every videogame (console, computer and arcade) for sorting purposes. Goal is to unify in one place all available useful information for emulation projects like MiSTer, to make possible more efficient and specific searches. GameDataBase will be published in different files (by platform). 10 | 11 | ## CSV Fields 12 | 13 | | **Field** | Description | 14 | |-----------|-------------| 15 | | **Screen title @ Exact** | Original title exactly as displayed in-game, particularly useful for preserving Japanese titles in their original characters | 16 | | **Cover Title @ Exact** | Title exactly as shown on physical media cover/packaging | 17 | | **ID** | Unique identifier for different versions/releases of the same game | 18 | | **Date** | Release date in YYYY-MM-DD format (partial dates like YYYY or YYYY-MM are acceptable) | 19 | | **Developer** | Company/team that developed the game | 20 | | **Publisher** | Company that published/distributed the game | 21 | | **Tags** | Game classification tags using the defined taxonomy | 22 | | **MAME filename** | ROM filename as used in MAME, only for Arcade games | 23 | | **MD5 hash** | MD5 checksum of the game file | 24 | | **SHA1 hash** | SHA1 checksum of the game file | 25 | | **SHA256 hash** | SHA256 checksum of the game file | 26 | | **SHA512 hash** | SHA512 checksum of the game file | 27 | 28 | ## Guide for tags 29 | 30 | GameDataBase uses a simple tag taxonomy to classify games in as many ways as possible. These tags' main purpose is to improve sorting and searching. Of course, this list will be updated as new ones emerge from darkness. 31 | 32 | ## Tag Structure Guide 33 | 34 | GameDataBase uses a hierarchical tag system with up to three levels of depth: 35 | 36 | | Level | Symbol | Description | Example | 37 | |-------|--------|-------------------|--------------------------| 38 | | 1 | `#` | Main tag | `#genre` | 39 | | 2 | `:` | Subtag | `#genre:sports` | 40 | | 3 | `>` | Children value | `#genre:sports>wrestling` | 41 | 42 | Multiple tags and attributes can be combined. For example: 43 | 44 | ```ts 45 | #genre:sports>wrestling #players:2:vs 46 | ``` 47 | 48 | This means: Wrestling sports game, 2 players, versus mode. 49 | 50 | Tag combinations examples: 51 | 52 | ```ts 53 | #genre:action>runandgun // Action game with run and gun theme 54 | #genre:sports>soccer #players:2 // Soccer game for 2 players 55 | #genre:board>chess #input:joystick>4 // Chess game with 4-way joystick control 56 | #genre:shmup>v #search:tate>cw // Vertical shoot'em up in clockwise TATE mode 57 | #genre:puzzle>drop #players:2:vs // Drop puzzle game with 2 players in versus mode 58 | #genre:adventure>survivalhorror // Adventure game with survival horror elements 59 | #input:joystick>4:buttons>2 // 4-way joystick and 2 buttons 60 | #players:2:coop // 2 players cooperative 61 | #based:movie #lang:en // English game based on a movie 62 | ``` 63 | 64 | The `>` level only applies to its immediate `:` subtag. 65 | 66 | 67 | --- 68 | 69 | ## Tags Overview 70 | 71 | 72 | 73 | --- 74 | 75 | Thank you for joining GameDataBase! Your support inspires us to keep improving and sharing exciting updates. 76 | -------------------------------------------------------------------------------- /scripts/generate_readme.py: -------------------------------------------------------------------------------- 1 | import os 2 | import yaml 3 | 4 | def load_tags_yaml(filepath): 5 | """Load the tags.yml file.""" 6 | with open(filepath, 'r') as file: 7 | return yaml.safe_load(file) 8 | 9 | def generate_table_for_category(category_data): 10 | """Generate a Markdown table for a category.""" 11 | subtags = category_data.get('subtag', {}) 12 | 13 | # Determine if "Children" columns are needed 14 | has_children = any('children' in subtag_data for subtag_data in subtags.values() if isinstance(subtag_data, dict)) 15 | 16 | # Build the table header dynamically 17 | table = "| Subcategory | Description" 18 | if has_children: 19 | table += " | Children | Children Description" 20 | table += " |\n" 21 | table += "|-------------|-------------" 22 | if has_children: 23 | table += "|----------|--------------------" 24 | table += "|\n" 25 | 26 | # Populate the table rows 27 | for subtag_name, subtag_data in subtags.items(): 28 | if isinstance(subtag_data, str): # Handle case where subtag_data is a string 29 | description = subtag_data 30 | children = "" 31 | children_description = "" 32 | else: 33 | description = subtag_data.get('description', 'No description') 34 | children_dict = subtag_data.get('children', {}) 35 | if children_dict: 36 | children = '
'.join(f"`>{key}`" for key in children_dict.keys()) 37 | children_description = '
'.join(f"{value}" for value in children_dict.values()) 38 | else: 39 | children = "" 40 | children_description = "" 41 | 42 | # Add row dynamically based on column presence 43 | table += f"| `:{subtag_name}` | {description}" 44 | if has_children: 45 | table += f" | {children} | {children_description}" 46 | table += " |\n" 47 | 48 | return table 49 | 50 | def load_template(filepath): 51 | """Load the README_TEMPLATE.md template.""" 52 | with open(filepath, 'r') as file: 53 | return file.read() 54 | 55 | def generate_readme(tags_data, template_path, output_path): 56 | """Generate the README.md file using the README_TEMPLATE.md template.""" 57 | template = load_template(template_path) 58 | generated_content = "" 59 | 60 | # Generate tables for each category 61 | for category_name, category_data in tags_data.items(): 62 | if category_name == "tag_structure": # Skip special keys 63 | continue 64 | description = category_data.get('description', 'No description available') 65 | # Wrap the entire section in a collapsible part 66 | generated_content += "
\n" 67 | generated_content += f"#{category_name} - {description}\n\n" 68 | if 'subtag' in category_data: 69 | table_content = generate_table_for_category(category_data) 70 | generated_content += table_content 71 | generated_content += "\n
\n\n" 72 | 73 | # Insert the generated content into the template 74 | final_content = template.replace("", generated_content) 75 | 76 | # Write the final README.md 77 | with open(output_path, 'w') as readme: 78 | readme.write(final_content) 79 | 80 | print(f"README.md has been generated at {output_path}") 81 | 82 | def main(): 83 | script_dir = os.path.dirname(os.path.abspath(__file__)) 84 | root_dir = os.path.dirname(script_dir) 85 | tags_path = os.path.join(root_dir, 'tags.yml') 86 | template_path = os.path.join(root_dir, 'scripts', 'README_TEMPLATE.md') # Updated template path 87 | readme_path = os.path.join(root_dir, 'README.md') 88 | 89 | tags_data = load_tags_yaml(tags_path) 90 | generate_readme(tags_data, template_path, readme_path) 91 | 92 | if __name__ == "__main__": 93 | main() 94 | -------------------------------------------------------------------------------- /scripts/tag_guardian.py: -------------------------------------------------------------------------------- 1 | import os 2 | import yaml 3 | import pandas as pd 4 | import time 5 | import argparse 6 | import sys 7 | import platform 8 | import random 9 | from colorama import init, Fore, Style, AnsiToWin32 10 | 11 | # Initialize colorama for Windows support 12 | if platform.system() == 'Windows': 13 | init(wrap=False) 14 | import sys 15 | sys.stdout = AnsiToWin32(sys.stdout) 16 | else: 17 | init() 18 | 19 | # Simplified argument processing 20 | parser = argparse.ArgumentParser(description='Tag Guardian - Validate game tags in CSV files') 21 | parser.add_argument('files', nargs='*', 22 | help='CSV files to process. If none provided, all CSV files will be processed') 23 | parser.add_argument('--output', type=str, 24 | help='Output path for the report (default: tag_guardian_report.md)') 25 | 26 | # Report sections control 27 | report_group = parser.add_argument_group('Report sections') 28 | report_group.add_argument('--no-stats', action='store_true', help='Hide Games and Tags statistics') 29 | report_group.add_argument('--no-overview', action='store_true', help='Hide Overview section') 30 | report_group.add_argument('--no-validation', action='store_true', help='Hide Validation Results') 31 | report_group.add_argument('--no-actions', action='store_true', help='Hide Suggested Actions') 32 | report_group.add_argument('--no-unregistered', action='store_true', help='Hide Unregistered Tags') 33 | report_group.add_argument('--no-errors', action='store_true', help='Hide Invalid Tags Found') 34 | report_group.add_argument('--no-warnings', action='store_true', help='Hide Warnings section') 35 | report_group.add_argument('--compact', action='store_true', help='Show only Essential sections') 36 | 37 | # Load tags.yml 38 | script_dir = os.path.dirname(os.path.abspath(__file__)) 39 | root_dir = os.path.dirname(script_dir) 40 | 41 | with open(os.path.join(root_dir, 'tags.yml'), 'r') as file: 42 | tags_definitions = yaml.safe_load(file) 43 | print("Loaded tags.yml") 44 | 45 | # Function to validate tags 46 | def validate_tag_structure(tag: str, tags_definitions: dict) -> list: 47 | """Validate the structure of a single tag""" 48 | if not tag.startswith('#'): 49 | return [] 50 | 51 | parts = tag[1:].split(':') 52 | main_category = parts[0] 53 | errors = validate_main_category(main_category, tags_definitions) 54 | if errors: 55 | return errors 56 | 57 | if len(parts) > 1: 58 | subtag_groups = parts[1:] 59 | errors.extend(validate_subtag_groups(subtag_groups, main_category, tags_definitions)) 60 | 61 | return errors 62 | 63 | 64 | def validate_main_category(main_category: str, tags_definitions: dict) -> list: 65 | """Validate that the main category exists""" 66 | if main_category not in tags_definitions: 67 | return [(f"Unknown category: '{main_category}'", None)] 68 | return [] 69 | 70 | 71 | def validate_subtag_groups(subtag_groups: list, main_category: str, tags_definitions: dict) -> list: 72 | """Validate all subtag groups after the main category""" 73 | errors = [] 74 | for subtag_group in subtag_groups: 75 | subtag_parts = subtag_group.split('>') 76 | if not subtag_parts: 77 | continue 78 | 79 | subtag_name = subtag_parts[0].split(':')[0] 80 | category_subtags = tags_definitions[main_category].get('subtag', {}) 81 | errors.extend(validate_subtags(subtag_parts[0], category_subtags, main_category)) 82 | if len(subtag_parts) > 1: 83 | errors.extend(validate_children(subtag_parts[1:], subtag_name, category_subtags, main_category)) 84 | return errors 85 | 86 | 87 | def validate_subtags(subtag_group: str, category_subtags: dict, main_category: str) -> list: 88 | """Validate each subtag in the group""" 89 | errors = [] 90 | for subtag in subtag_group.split(':'): 91 | if subtag not in category_subtags: 92 | errors.append((f"Unknown subtag: '{subtag}' in '{main_category}'", None)) 93 | return errors 94 | 95 | 96 | def validate_children(children: list, subtag_name: str, category_subtags: dict, main_category: str) -> list: 97 | """Validate each child in the subtag group""" 98 | errors = [] 99 | if subtag_name in category_subtags and 'children' in category_subtags[subtag_name]: 100 | valid_children = category_subtags[subtag_name]['children'] 101 | for child in children: 102 | if child not in valid_children: 103 | errors.append((f"Invalid child: '{child}' for '{main_category}:{subtag_name}'", None)) 104 | return errors 105 | 106 | def validate_tags(tags_str, tags_definitions): 107 | """Validate tags for a single game""" 108 | if not isinstance(tags_str, str): 109 | return [], [], 0, 0 110 | 111 | individual_tags = [t.strip() for t in tags_str.split() if t.strip()] 112 | tag_set = set(individual_tags) 113 | 114 | warnings = validate_essential_tags(tag_set) 115 | warnings += validate_language_and_region(tag_set) 116 | warnings += validate_hardware_dependencies(tag_set) 117 | warnings += validate_player_tags(tag_set) 118 | warnings += validate_genre_tags(tag_set) 119 | warnings += validate_status_and_version(tag_set, tags_definitions) 120 | warnings += validate_special_devices(tag_set) 121 | 122 | tag_errors, valid_count, total_tags = validate_individual_tags(individual_tags, tags_definitions) 123 | 124 | return tag_errors, warnings, valid_count, total_tags 125 | 126 | 127 | def validate_essential_tags(tag_set): 128 | """Check for missing essential tags.""" 129 | essential_tags = ['#genre', '#players'] 130 | missing_essential = [tag for tag in essential_tags if not any(t.startswith(tag) for t in tag_set)] 131 | if missing_essential: 132 | return [f"Missing essential tags: {', '.join(missing_essential)}"] 133 | return [] 134 | 135 | 136 | def validate_language_and_region(tag_set): 137 | """Check for language and region-related warnings.""" 138 | warnings = [] 139 | if any('@' in tag and ('デ' in tag or 'ド' in tag or 'ー' in tag) for tag in tag_set): 140 | if not any(t.startswith('#lang:ja') for t in tag_set): 141 | warnings.append("Game appears to be Japanese but missing #lang:ja tag") 142 | return warnings 143 | 144 | 145 | def validate_hardware_dependencies(tag_set): 146 | """Check for hardware dependency warnings.""" 147 | warnings = [] 148 | hardware_pairs = { 149 | 'randnetmodem': '64dd', 150 | 'capturecassette': '64dd', 151 | 'n64mic': '64dd', 152 | } 153 | addon_tags = [t for t in tag_set if t.startswith('#addon:')] 154 | for addon in addon_tags: 155 | for req_hw, dep_hw in hardware_pairs.items(): 156 | if req_hw in addon and not any(dep_hw in t for t in addon_tags): 157 | warnings.append(f"Game uses {req_hw} but {dep_hw} may be required") 158 | return warnings 159 | 160 | 161 | def validate_player_tags(tag_set): 162 | """Check for player-related warnings.""" 163 | warnings = [] 164 | player_tags = [t for t in tag_set if t.startswith('#players:')] 165 | numeric_players = [ 166 | subtag.split(':')[1] for t in player_tags 167 | for subtag in t.split('>') if ':' in subtag and subtag.split(':')[1].isdigit() 168 | ] 169 | for ptag in player_tags: 170 | if ':vs' in ptag and not numeric_players: 171 | warnings.append("Game marked as versus but player count not specified") 172 | if ':coop' in ptag and not numeric_players: 173 | warnings.append("Game marked as cooperative but player count not specified") 174 | return warnings 175 | 176 | 177 | def validate_genre_tags(tag_set): 178 | """Check for genre-related warnings.""" 179 | genre_tags = [t for t in tag_set if t.startswith('#genre:')] 180 | if len(genre_tags) > 3: 181 | return ["Too many genre tags (more than 3)"] 182 | return [] 183 | 184 | 185 | def validate_status_and_version(tag_set, tags_definitions): 186 | """Check for status and version-related warnings.""" 187 | warnings = [] 188 | if any('unfinished:' in tag for tag in tag_set): 189 | unfinished_tags = [tag for tag in tag_set if tag.startswith('#unfinished:')] 190 | for unfinished_tag in unfinished_tags: 191 | parts = unfinished_tag.split(':', 2) 192 | if len(parts) > 1: 193 | subtag = parts[1].split('>')[0] 194 | if subtag not in tags_definitions['unfinished'].get('subtag', {}): 195 | warnings.append(f"Game marked as unfinished with unknown subtag: '{subtag}'") 196 | else: 197 | warnings.append("Game marked as unfinished but specific status not provided") 198 | return warnings 199 | 200 | 201 | def validate_special_devices(tag_set): 202 | """Check for special device-related warnings.""" 203 | warnings = [] 204 | special_devices = { 205 | 'lightphaser': 'shooting', 206 | 'menacer': 'shooting', 207 | 'zapper': 'shooting', 208 | 'superscope': 'shooting', 209 | 'justifier': 'shooting', 210 | 'laserscope': 'shooting', 211 | 'bandaihypershot': 'shooting', 212 | 'gamegun': 'shooting' 213 | } 214 | addon_tags = [t for t in tag_set if t.startswith('#addon:')] 215 | genre_tags = [t for t in tag_set if t.startswith('#genre:')] 216 | for device in special_devices.keys(): 217 | if any(device in t for t in addon_tags): 218 | if not any(special_devices[device] in t for t in genre_tags): 219 | warnings.append(f"Game uses {device} but genre:{special_devices[device]} not specified") 220 | return warnings 221 | 222 | 223 | def validate_individual_tags(individual_tags, tags_definitions): 224 | """Validate individual tags and count valid/total tags.""" 225 | tag_errors = [] 226 | valid_count = 0 227 | total_tags = 0 228 | for tag in individual_tags: 229 | if not tag.startswith('#'): 230 | continue 231 | total_tags += 1 232 | current_tag_errors = validate_tag_structure(tag, tags_definitions) 233 | if current_tag_errors: 234 | tag_errors.append((tag, current_tag_errors)) 235 | else: 236 | valid_count += 1 237 | return tag_errors, valid_count, total_tags 238 | 239 | def get_csv_files(root_dir: str, specified_files: list = None) -> list: 240 | """Get list of CSV files to process""" 241 | csv_files = [] 242 | 243 | # If no files specified, search recursively in all directories 244 | if not specified_files: 245 | for root, _, files in os.walk(root_dir): 246 | # Skip scripts directory using platform-independent path split 247 | if 'scripts' in root.split(os.path.sep): 248 | continue 249 | csv_files.extend(os.path.join(root, f) for f in files if f.endswith('.csv')) 250 | else: 251 | csv_files = [os.path.abspath(f) for f in specified_files if f.endswith('.csv')] 252 | 253 | if not csv_files: 254 | print("No CSV files found in", root_dir) 255 | sys.exit(1) 256 | 257 | print(f"\nFound {Fore.CYAN}{len(csv_files)}{Style.RESET_ALL} CSV files to process:") 258 | for f in csv_files: 259 | # Use os.path.relpath for cross-platform path display 260 | print(f" - {Fore.BLUE}{os.path.relpath(f, root_dir)}{Style.RESET_ALL}") 261 | print() 262 | 263 | return sorted(csv_files) 264 | 265 | def process_csv_file(file_path: str, tags_definitions: dict) -> tuple: 266 | """Process single CSV file and return results""" 267 | print(f"Processing file: {os.path.basename(file_path)}") 268 | df = pd.read_csv(file_path, encoding='utf-8') 269 | 270 | if 'Tags' not in df.columns: 271 | print(f"Skipping file (no 'Tags' column): {os.path.basename(file_path)}") 272 | return ({'file': os.path.basename(file_path), 'valid': 0, 'total': 0, 'invalid': 0, 'warnings': 0}, [], [], {}) 273 | 274 | file_result = { 275 | 'file': os.path.basename(file_path), 276 | 'valid': 0, 'total': 0, 'invalid': 0, 'warnings': 0 277 | } 278 | 279 | file_errors = [] 280 | file_warnings = [] 281 | games_processed = {} 282 | 283 | for idx, row in df.iterrows(): 284 | results = process_game_row(row, idx, file_path, tags_definitions) 285 | if results: 286 | game_stats, errors, warnings = results 287 | update_file_stats(file_result, game_stats) 288 | file_errors.extend(errors) 289 | file_warnings.extend(warnings) 290 | games_processed.update(game_stats['games']) 291 | 292 | return file_result, file_errors, file_warnings, games_processed 293 | 294 | def process_game_row(row: pd.Series, idx: int, file_path: str, tags_definitions: dict) -> tuple: 295 | """Process single game row and return results""" 296 | game_title = row['Screen title @ Exact'] if 'Screen title @ Exact' in row else 'Unknown' 297 | 298 | # Create internal row tracking without showing it in reports 299 | internal_id = f"{game_title}__row_{idx + 1}" # Double underscore to avoid conflicts 300 | display_id = game_title # Only show game title in reports 301 | 302 | tags_str = row['Tags'] 303 | tag_errors, warnings, valid_count, total_tags = validate_tags(tags_str, tags_definitions) 304 | 305 | # Ensure warnings are associated with the correct tag 306 | warning_details = [] 307 | for warning in warnings: 308 | related_tag = next((tag for tag in tags_str.split() if warning.lower() in tag.lower()), None) 309 | warning_details.append({ 310 | 'warning': warning, 311 | 'related_tag': related_tag or "Unknown" 312 | }) 313 | 314 | game_stats = { 315 | 'games': { 316 | internal_id: { 317 | 'has_errors': bool(tag_errors), 318 | 'has_warnings': bool(warning_details), 319 | 'total_tags': total_tags, 320 | 'valid_tags': valid_count, 321 | 'processed': True, 322 | 'original_title': game_title, 323 | 'display_title': display_id, 324 | 'row': idx + 1, # Keep row number for internal reference 325 | 'warnings_count': len(warning_details) 326 | } 327 | } 328 | } 329 | 330 | errors = [] 331 | if tag_errors: 332 | errors.append({ 333 | 'file': os.path.basename(file_path), 334 | 'row': idx + 1, 335 | 'game': display_id, # Use clean title for display 336 | 'internal_id': internal_id, # Keep internal reference 337 | 'original_title': game_title, 338 | 'tag_errors': tag_errors 339 | }) 340 | 341 | game_warnings = [] 342 | if warning_details: 343 | game_warnings.append({ 344 | 'file': os.path.basename(file_path), 345 | 'row': idx + 1, 346 | 'game': display_id, # Use clean title for display 347 | 'internal_id': internal_id, # Keep internal reference 348 | 'original_title': game_title, 349 | 'warnings': warning_details 350 | }) 351 | 352 | return game_stats, errors, game_warnings 353 | 354 | def update_file_stats(file_result: dict, game_stats: dict): 355 | """Update file statistics with game statistics""" 356 | for game, stats in game_stats['games'].items(): 357 | file_result['valid'] += stats['valid_tags'] 358 | file_result['total'] += stats['total_tags'] 359 | file_result['invalid'] = file_result['total'] - file_result['valid'] 360 | # Accumulate warnings instead of overwriting 361 | file_result['warnings'] += stats['warnings_count'] 362 | 363 | def generate_markdown_report(stats: dict, file_results: list, file_path: str, args): 364 | """Generate markdown report with given statistics based on command line arguments""" 365 | # Clean up previous reports using platform-independent paths 366 | reports_dir = os.path.join(os.path.dirname(file_path), 'reports') 367 | 368 | # Remove old report file if exists 369 | if os.path.exists(file_path): 370 | print(f"{Fore.YELLOW}Removing old report:{Style.RESET_ALL} {file_path}") 371 | os.remove(file_path) 372 | 373 | # Remove old reports directory and its contents 374 | if os.path.exists(reports_dir): 375 | print(f"{Fore.YELLOW}Removing old reports directory:{Style.RESET_ALL} {reports_dir}") 376 | import shutil 377 | 378 | try: 379 | shutil.rmtree(reports_dir) 380 | except PermissionError: 381 | print(f"{Fore.RED}Error removing reports directory. Please close any open files.{Style.RESET_ALL}") 382 | sys.exit(1) 383 | 384 | # Create fresh reports directory 385 | print(f"{Fore.GREEN}Creating reports directory:{Style.RESET_ALL} {reports_dir}") 386 | os.makedirs(reports_dir, exist_ok=True) 387 | 388 | # Generate new reports 389 | with open(file_path, 'w', encoding='utf-8') as report_file: 390 | # Write header and basic sections 391 | write_main_report(report_file, stats, file_results, args) 392 | 393 | # List of detailed reports 394 | if not args.no_errors or not args.no_warnings: 395 | write_detailed_reports_index(report_file, stats, file_results) 396 | 397 | # Generate individual reports by file 398 | for file_result in file_results: 399 | generate_file_reports(stats, file_result, reports_dir) 400 | 401 | def write_detailed_reports_index(report_file, stats, file_results): 402 | """Write index of detailed reports with links""" 403 | report_file.write("\n## 📑 Detailed Reports by File\n\n") 404 | 405 | # List of error reports 406 | report_file.write("### ❌ Invalid Tags Reports\n") 407 | for file_result in file_results: 408 | file_errors = [e for e in stats['errors'] if e['file'] == file_result['file']] 409 | if file_errors: 410 | csv_name = os.path.splitext(file_result['file'])[0] 411 | report_file.write(f"- [📋 {file_result['file']} ({len(file_errors)} errors)](reports/{csv_name}_errors.md)\n") 412 | report_file.write("\n") 413 | 414 | # List of warning reports 415 | report_file.write("### ⚠️ Warning Reports\n") 416 | for file_result in file_results: 417 | file_warnings = [w for w in stats['warnings'] if w['file'] == file_result['file']] 418 | if file_warnings: 419 | csv_name = os.path.splitext(file_result['file'])[0] 420 | report_file.write(f"- [📋 {file_result['file']} ({len(file_warnings)} warnings)](reports/{csv_name}_warnings.md)\n") 421 | report_file.write("\n") 422 | 423 | def write_main_report(report_file, stats, file_results, args): 424 | """Write main sections of the report""" 425 | report_file.write("# 📊 Tag Guardian Report\n\n") 426 | 427 | if not args.no_stats and not args.compact: 428 | write_header_stats(report_file, stats) 429 | 430 | if not args.no_overview and not args.compact: 431 | write_overview_section(report_file, stats) 432 | 433 | if not args.no_validation: 434 | write_validation_results(report_file, file_results) 435 | 436 | if not args.no_unregistered and not args.compact and stats['unregistered_tags']: 437 | write_unregistered_tags(report_file, stats['unregistered_tags']) 438 | 439 | if not args.no_actions and not args.compact: 440 | write_suggested_actions(report_file) 441 | 442 | def generate_file_reports(stats: dict, file_result: dict, reports_dir: str): 443 | """Generate separate error and warning reports for each CSV file""" 444 | csv_name = os.path.splitext(file_result['file'])[0] 445 | 446 | # Generate errors reports 447 | file_errors = [e for e in stats['errors'] if e['file'] == file_result['file']] 448 | if file_errors: 449 | error_path = os.path.join(reports_dir, f"{csv_name}_errors.md") 450 | with open(error_path, 'w') as error_file: 451 | error_file.write(f"# ❌ Invalid Tags Report - {file_result['file']}\n\n") 452 | write_error_section(error_file, file_errors, [file_result]) 453 | 454 | # Generate warnings reports 455 | file_warnings = [w for w in stats['warnings'] if w['file'] == file_result['file']] 456 | if file_warnings: 457 | warning_path = os.path.join(reports_dir, f"{csv_name}_warnings.md") 458 | with open(warning_path, 'w') as warning_file: 459 | warning_file.write(f"# ⚠️ Warnings Report - {file_result['file']}\n\n") 460 | write_warning_section(warning_file, file_warnings, [file_result]) 461 | 462 | def generate_errors_report(errors: list, file_results: list): 463 | """Generate separate report for invalid tags""" 464 | with open('tag_guardian_errors.md', 'w') as report_file: 465 | report_file.write("# ❌ Invalid Tags Report\n\n") 466 | write_error_section(report_file, errors, file_results) 467 | 468 | def generate_warnings_report(warnings: list, file_results: list): 469 | """Generate separate report for warnings""" 470 | with open('tag_guardian_warnings.md', 'w') as report_file: 471 | report_file.write("# ⚠️ Warnings Report\n\n") 472 | write_warning_section(report_file, warnings, file_results) 473 | 474 | def load_tag_definitions(root_dir: str) -> dict: 475 | """Load tag definitions from tags.yml""" 476 | with open(os.path.join(root_dir, 'tags.yml'), 'r') as file: 477 | return yaml.safe_load(file) 478 | 479 | def calculate_statistics(results: list) -> dict: 480 | """Calculate overall statistics from results""" 481 | stats = { 482 | 'total_tags': 0, 483 | 'valid_tags': 0, 484 | 'invalid_tags': 0, 485 | 'warnings_count': 0, 486 | 'total_games': 0, 487 | 'valid_games': 0, 488 | 'games_with_errors': 0, 489 | 'games_with_warnings': 0, 490 | 'errors': [], 491 | 'warnings': [], 492 | 'unregistered_tags': [], 493 | 'games_list': { 494 | 'valid': [], 495 | 'invalid': [], 496 | 'warnings': [] 497 | }, 498 | 'files_processed': len([r for r in results if r[0] is not None]) # Count only processed files 499 | } 500 | 501 | processed_games = {} 502 | for result in results: 503 | file_result, file_errors, file_warnings, games_processed = result 504 | stats['total_tags'] += file_result['total'] 505 | stats['valid_tags'] += file_result['valid'] 506 | stats['invalid_tags'] += file_result['invalid'] 507 | stats['warnings_count'] += sum(len(w['warnings']) for w in file_warnings) # Correct warning count 508 | stats['errors'].extend(file_errors) 509 | stats['warnings'].extend(file_warnings) 510 | processed_games.update(games_processed) 511 | 512 | stats['total_games'] = len(processed_games) 513 | stats['valid_games'] = sum(1 for status in processed_games.values() 514 | if not status['has_errors'] and not status['has_warnings']) 515 | stats['games_with_errors'] = sum(1 for status in processed_games.values() 516 | if status['has_errors']) 517 | stats['games_with_warnings'] = sum(1 for status in processed_games.values() 518 | if status['has_warnings']) 519 | stats['unregistered_tags'] = collect_unregistered_tags(stats['errors']) 520 | 521 | # Collect valid, invalid, and warning games 522 | for game, status in processed_games.items(): 523 | if status['has_errors']: 524 | stats['games_list']['invalid'].append(game) 525 | elif status['has_warnings']: 526 | stats['games_list']['warnings'].append(game) 527 | else: 528 | stats['games_list']['valid'].append(game) 529 | 530 | return stats 531 | 532 | def collect_unregistered_tags(all_errors): 533 | # Count occurrences of unregistered tags 534 | tag_counts = {} 535 | for error in all_errors: 536 | if error['tag_errors'][0][1][0][0].startswith('Unknown category'): 537 | # Split compound tags 538 | tags = error['tag_errors'][0][0].split() 539 | for single_tag in tags: 540 | tag_counts[single_tag] = tag_counts.get(single_tag, 0) + 1 541 | 542 | # Generate suggestions based on tag patterns 543 | tag_suggestions = {} 544 | common_categories = { 545 | 'players': 'Add player count category with numeric values', 546 | 'save': 'Add save feature category (backup, memory, etc)', 547 | 'lang': 'Add language support category (en, ja, etc)', 548 | 'region': 'Add region category (jp, us, eu, etc)', 549 | 'mode': 'Add game mode category (vs, coop, etc)' 550 | } 551 | 552 | for tag in tag_counts: 553 | category = tag.split(':')[0] if ':' in tag else tag 554 | category = category.replace('#', '') 555 | if category in common_categories: 556 | tag_suggestions[tag] = common_categories[category] 557 | else: 558 | tag_suggestions[tag] = f"Consider adding {category} category" 559 | 560 | return [(tag, count, tag_suggestions[tag]) 561 | for tag, count in sorted(tag_counts.items(), key=lambda x: x[1], reverse=True)] 562 | 563 | def write_header_stats(report_file, stats): 564 | """Write header statistics to report file""" 565 | # Common column headers for both tables 566 | header_format = "| 📊 Metric | 🔢 Count | 📈 % | 🚦 Status | 📝 Details |\n" 567 | separator = "|------------|-----------|-------|-----------|------------|\n" 568 | 569 | # Games Statistics 570 | report_file.write("### 🎮 Games Stats\n") 571 | report_file.write(header_format) 572 | report_file.write(separator) 573 | report_file.write(f"| ✅ Valid Games | **{stats['valid_games']}** | `{stats['valid_games']/stats['total_games']*100:.1f}%` | 🟢 | No issues found |\n") 574 | report_file.write(f"| ❌ Invalid Games | **{stats['games_with_errors']}** | `{stats['games_with_errors']/stats['total_games']*100:.1f}%` | 🔴 | Need fixes |\n") 575 | report_file.write(f"| ⚠️ Warning Games | **{stats['games_with_warnings']}** | `{stats['games_with_warnings']/stats['total_games']*100:.1f}%` | 🟡 | Review suggested |\n") 576 | report_file.write(f"| 🎲 Total Processed | **{stats['total_games']}** | `100%` | ⚪ | Unique entries |\n\n") 577 | 578 | # Tags Statistics 579 | report_file.write("### 🏷️ Tags Stats\n") 580 | report_file.write(header_format) 581 | report_file.write(separator) 582 | report_file.write(f"| ✅ Valid Tags | **{stats['valid_tags']}** | `{stats['valid_tags']/stats['total_tags']*100:.1f}%` | 🟢 | Correct format |\n") 583 | report_file.write(f"| ❌ Invalid Tags | **{stats['invalid_tags']}** | `{stats['invalid_tags']/stats['total_tags']*100:.1f}%` | 🔴 | Format errors |\n") 584 | report_file.write(f"| ⚠️ Warning Tags | **{stats['warnings_count']}** | `{stats['warnings_count']/stats['total_tags']*100:.1f}%` | 🟡 | Need review |\n") 585 | report_file.write(f"| 📝 Total Tags | **{stats['total_tags']}** | `100%` | ⚪ | All entries |\n\n") 586 | 587 | def write_overview_section(report_file, stats): 588 | """Write overview section to report file""" 589 | report_file.write("## 📈 Overview\n\n") 590 | 591 | # Processing Statistics 592 | report_file.write("### 🔄 Processing Stats\n") 593 | report_file.write("| Metric | Value | Details |\n") 594 | report_file.write("|--------|--------|----------|\n") 595 | # Use length of results list instead of errors 596 | report_file.write(f"| Files Processed | {stats['files_processed']} | 📁 Total CSV files analyzed |\n") 597 | report_file.write(f"| Processing Time | {stats['processing_time']:.2f}s | ⏱️ Total execution time |\n\n") 598 | 599 | def write_validation_results(report_file, file_results): 600 | """Write validation results to report file""" 601 | report_file.write("### 📊 Validation Results\n") 602 | report_file.write("_Note: Total Tags are the non-unique Individual tags in each file_\n\n") 603 | report_file.write("| 📁 File | ✅ Valid | ❌ Invalid | ⚠️ Warnings | 📝 Total |\n") 604 | report_file.write("|---------|-----------|------------|-------------|----------|\n") 605 | for result in file_results: 606 | report_file.write(f"| `{result['file']}` | **{result['valid']}** | **{result['invalid']}** | **{result['warnings']}** | {result['total']} |\n") 607 | 608 | def write_suggested_actions(report_file): 609 | """Write suggested actions to report file""" 610 | # Main section with key points 611 | report_file.write("\n## 🎯 Suggested Actions\n\n") 612 | report_file.write("1. 🔍 Review and fix invalid tags\n") 613 | report_file.write("2. ⭐ Ensure essential tags are present\n") 614 | report_file.write("3. 🌏 Check regional content tags\n") 615 | report_file.write("4. 🎮 Verify hardware compatibility\n\n") 616 | 617 | # Collapsible detailed section 618 | report_file.write("
\n") 619 | report_file.write("📚 More details\n\n") 620 | 621 | # Fix Invalid Tags 622 | report_file.write("### ❌ Fix Invalid Tags\n") 623 | report_file.write("1. 🔄 Check and correct tag format:\n") 624 | report_file.write(" - Use `#category:subcategory>value` format\n") 625 | report_file.write(" - Example: `#genre:sports>football`\n") 626 | report_file.write("2. 🎯 Verify tags against tags.yml:\n") 627 | report_file.write(" - All categories must be defined\n") 628 | report_file.write(" - All subcategories must exist\n") 629 | report_file.write(" - Values must match allowed options\n\n") 630 | 631 | # Essential Tags 632 | report_file.write("### ⭐ Add Essential Tags\n") 633 | report_file.write("1. Required for all games:\n") 634 | report_file.write(" - `#genre:` - Main game genre\n") 635 | report_file.write(" - `#players:` - Number of players\n") 636 | report_file.write(" - `#lang:` - Language\n\n") 637 | 638 | 639 | # Common Categories 640 | report_file.write("### 🏷️ Common Tag Categories\n") 641 | report_file.write("| Category | Description | Example |\n") 642 | report_file.write("|----------|-------------|----------|\n") 643 | for category, details in tags_definitions.items(): 644 | description = details.get('description', 'No description available') 645 | subtags = details.get('subtag', {}) 646 | example = ( 647 | f"#{category}:{random.choice(list(subtags.keys()))}" 648 | if subtags else 'No example available' 649 | ) 650 | report_file.write(f"| `#{category}` | {description} | `{example}` |\n") 651 | 652 | report_file.write("\n") 653 | 654 | # Hardware Related Tags 655 | report_file.write("### 🎮 Hardware Related Tags\n") 656 | report_file.write("1. Required peripherals:\n") 657 | report_file.write(" - Use `#addon:` for hardware requirements\n") 658 | report_file.write(" - Example: `#addon:64dd:expasionpak:mouse>n64`\n") 659 | report_file.write("2. Hardware dependencies:\n") 660 | report_file.write(" - Some addons require other hardware\n") 661 | report_file.write(" - Example: randnetmodem requires 64dd\n\n") 662 | 663 | # Regional Content 664 | report_file.write("### 🌏 Regional Content\n") 665 | report_file.write("1. Language tags:\n") 666 | report_file.write(" - Use `#lang:` for game text language\n") 667 | report_file.write(" - Japanese games must include `#lang:ja`\n") 668 | report_file.write("2. Region-specific content:\n") 669 | report_file.write(" - Check title in different regions\n") 670 | report_file.write(" - Verify hardware compatibility\n\n") 671 | 672 | # Special Cases 673 | report_file.write("### 🔍 Special Cases\n") 674 | report_file.write("1. Game status:\n") 675 | report_file.write(" - Mark unfinished games (beta, proto, demo)\n") 676 | report_file.write(" - Add revision info if needed\n\n") 677 | 678 | # Documentation 679 | report_file.write("### 📚 Documentation\n") 680 | report_file.write("1. Tags.yml reference:\n") 681 | report_file.write(" - Complete list of valid tags\n") 682 | report_file.write(" - Category descriptions\n") 683 | report_file.write(" - Allowed values and formats\n") 684 | report_file.write("2. Command options:\n") 685 | report_file.write(" - Use `--help` for more information\n") 686 | report_file.write(" - Check validation rules\n\n") 687 | 688 | # Close collapsible section 689 | report_file.write("
\n") 690 | 691 | def write_unregistered_tags(report_file, unregistered_tags): 692 | """Write unregistered tags section to report file""" 693 | report_file.write("\n## Unregistered Tags\n") 694 | report_file.write("| Tag | Usage Count | Suggestion |\n") 695 | report_file.write("|-----|-------------|------------|\n") 696 | for tag, count, suggestion in unregistered_tags: 697 | report_file.write(f"| `{tag}` | {count} | {suggestion} |\n") 698 | 699 | def write_error_section(report_file, errors, file_results): 700 | """Write error section to report file""" 701 | report_file.write("\n## ❌ Invalid Tags Found\n") 702 | use_collapsible = len(file_results) > 1 703 | 704 | for file_result in file_results: 705 | file_errors = [error for error in errors if error['file'] == file_result['file']] 706 | if file_errors: 707 | write_file_error_header(report_file, file_result, file_errors, use_collapsible) 708 | grouped_errors = group_errors_by_game(file_errors) 709 | write_grouped_errors(report_file, grouped_errors) 710 | if use_collapsible: 711 | report_file.write("\n\n") 712 | 713 | 714 | def write_file_error_header(report_file, file_result, file_errors, use_collapsible): 715 | """Write the header for a file's error section""" 716 | if use_collapsible: 717 | report_file.write(f"\n
\n### 📄 {file_result['file']} ({len(file_errors)} errors)\n\n") 718 | else: 719 | report_file.write(f"\n### 📄 {file_result['file']}\n\n") 720 | report_file.write("| 🔢 Row | 🎮 Game | ❌ Invalid Tag | ℹ️ Error Types |\n") 721 | report_file.write("|--------|---------|---------------|---------------|\n") 722 | 723 | 724 | def group_errors_by_game(file_errors): 725 | """Group errors by row and game""" 726 | grouped_errors = {} 727 | error_counts = count_errors_per_game(file_errors) 728 | 729 | for error in file_errors: 730 | game = error['game'] 731 | if error_counts[game] == 0: 732 | continue 733 | key = (error['row'], game) 734 | if key not in grouped_errors: 735 | grouped_errors[key] = {'tags': [], 'messages': []} 736 | process_error_tags(error, grouped_errors[key]) 737 | 738 | return grouped_errors 739 | 740 | 741 | def count_errors_per_game(file_errors): 742 | """Count the number of errors per game""" 743 | error_counts = {} 744 | for error in file_errors: 745 | game = error['game'] 746 | if game not in error_counts: 747 | error_counts[game] = 0 748 | error_counts[game] += len(error['tag_errors']) 749 | return error_counts 750 | 751 | 752 | def process_error_tags(error, error_group): 753 | """Process the tags and messages for an error""" 754 | for tag, tag_errors in error['tag_errors']: 755 | error_group['tags'].append(f'`{tag}`') 756 | for e in tag_errors: 757 | error_group['messages'].append(format_error_message(e[0])) 758 | 759 | 760 | def format_error_message(msg): 761 | """Format an error message for display""" 762 | if msg.startswith("Unknown category:"): 763 | category = msg.split("'")[1] 764 | return f"Unknown category: '**{category}**'" 765 | if msg.startswith("Unknown subcategory:"): 766 | subcategory = msg.split("'")[1] 767 | return msg.replace(f"'{subcategory}'", f"'**{subcategory}**'") 768 | if msg.startswith("Invalid value:"): 769 | value = msg.split("'")[1] 770 | return msg.replace(f"'{value}'", f"'**{value}**'") 771 | if msg.startswith("Invalid tag format:"): 772 | invalid_tag = msg.split("'")[1] 773 | return f"Invalid tag format: '**{invalid_tag}**'" 774 | if msg.startswith("Standalone tag"): 775 | tag = msg.split("'")[1] 776 | return msg.replace(f"'{tag}'", f"'**{tag}**'") 777 | return msg 778 | 779 | 780 | def write_grouped_errors(report_file, grouped_errors): 781 | """Write grouped errors to the report file""" 782 | for (row, game), error_group in grouped_errors.items(): 783 | if error_group['tags']: 784 | tags = '
'.join(error_group['tags']) 785 | messages = '
'.join(error_group['messages']) 786 | report_file.write(f"| {row} | {game} | {tags} | {messages} |\n") 787 | 788 | def write_warning_section(report_file, warnings, file_results): 789 | """Write warning section to report file""" 790 | report_file.write("\n## ⚠️ Warnings\n") 791 | use_collapsible = len(file_results) > 1 792 | 793 | for file_result in file_results: 794 | file_warnings = [warning for warning in warnings if warning['file'] == file_result['file']] 795 | if file_warnings: 796 | write_file_warning_header(report_file, file_result, file_warnings, use_collapsible) 797 | grouped_warnings = group_warnings_by_game(file_warnings) 798 | write_grouped_warnings(report_file, grouped_warnings, use_collapsible) 799 | 800 | 801 | def write_file_warning_header(report_file, file_result, file_warnings, use_collapsible): 802 | """Write the header for a file's warning section""" 803 | if use_collapsible: 804 | report_file.write(f"\n
\n### 📄 {file_result['file']} ({len(file_warnings)} warnings)\n\n") 805 | else: 806 | report_file.write(f"\n### 📄 {file_result['file']}\n\n") 807 | report_file.write("| 🔢 Row | 🎮 Game | 🏷️ Related Tags | ⚠️ Warning Message |\n") 808 | report_file.write("|--------|---------|----------------|------------------|\n") 809 | 810 | 811 | def group_warnings_by_game(file_warnings): 812 | """Group warnings by row and game""" 813 | grouped_warnings = {} 814 | for warning in file_warnings: 815 | key = (warning['row'], warning['game']) 816 | if key not in grouped_warnings: 817 | grouped_warnings[key] = {'tags': [], 'messages': []} 818 | process_warning_details(warning, grouped_warnings[key]) 819 | return grouped_warnings 820 | 821 | 822 | def process_warning_details(warning, warning_group): 823 | """Process the details of a warning""" 824 | for warning_detail in warning['warnings']: 825 | tag_display = warning_detail['related_tag'] 826 | warning_group['tags'].append(f'`{tag_display}`') 827 | warning_group['messages'].append(warning_detail['warning']) 828 | 829 | 830 | def write_grouped_warnings(report_file, grouped_warnings, use_collapsible): 831 | """Write grouped warnings to the report file""" 832 | for (row, game), warning_group in grouped_warnings.items(): 833 | if warning_group['tags']: 834 | tags = '
'.join(warning_group['tags']) 835 | messages = '
'.join(warning_group['messages']) 836 | report_file.write(f"| {row} | {game} | {tags} | {messages} |\n") 837 | if use_collapsible: 838 | report_file.write("\n
\n") 839 | 840 | def extract_relevant_tag(tags_str, warnings): 841 | """Extract the relevant tag based on the warning message""" 842 | tags = tags_str.split() 843 | if not tags: 844 | return '' 845 | 846 | warning = warnings[0] if isinstance(warnings, list) else warnings 847 | 848 | # Handle franchise tag warnings 849 | franchise_tag = handle_franchise_warning(warning) 850 | if franchise_tag: 851 | return franchise_tag 852 | 853 | # Match specific patterns 854 | tag_patterns = get_tag_patterns() 855 | matched_tag = match_warning_to_pattern(warning, tags, tag_patterns) 856 | if matched_tag: 857 | return matched_tag 858 | 859 | # Search for relevant tag based on warning text 860 | relevant_tag = find_relevant_tag_by_warning(warning, tags) 861 | if relevant_tag: 862 | return relevant_tag 863 | 864 | # Default to the first tag 865 | return tags[0] 866 | 867 | 868 | def handle_franchise_warning(warning): 869 | """Handle franchise-related warnings""" 870 | if 'Has $' in warning and 'but missing equivalent #franchise:' in warning: 871 | franchise_name = warning.split('$')[1].split()[0] 872 | return f"${franchise_name}" 873 | return None 874 | 875 | 876 | def get_tag_patterns(): 877 | """Define tag patterns and their corresponding extractors""" 878 | return { 879 | 'Missing essential tags': lambda t: [tag for tag in t if any(p in tag for p in ['#genre', '#players', '#lang'])], 880 | 'missing #lang:ja': lambda t: next((tag for tag in t if tag.startswith('#lang:ja')), '#lang:ja'), 881 | 'requires 64dd': lambda t: next((tag for tag in t if '64dd' in tag), '#addon:64dd'), 882 | 'but player count': lambda t: next((tag for tag in t if tag.startswith('#players:')), '#players:'), 883 | 'versus but player': lambda t: next((tag for tag in t if ':vs' in tag), '#players:vs'), 884 | 'cooperative but player': lambda t: next((tag for tag in t if ':coop' in tag), '#players:coop'), 885 | 'Too many genre': lambda t: [tag for tag in t if tag.startswith('#genre:')], 886 | 'but specific status': lambda t: next((tag for tag in t if tag.startswith('#unfinished:')), '#unfinished:'), 887 | 'but genre:shooting': lambda t: next((tag for tag in t if 'shooting' in tag), '#genre:shooting'), 888 | 'Game appears to be Japanese': lambda t: '#lang:ja' 889 | } 890 | 891 | 892 | def match_warning_to_pattern(warning, tags, tag_patterns): 893 | """Match a warning to a predefined pattern and extract the tag""" 894 | for pattern, extractor in tag_patterns.items(): 895 | try: 896 | if pattern in warning: 897 | result = extractor(tags) 898 | if isinstance(result, list): 899 | return ' '.join(result) 900 | return result if result else pattern.split()[0] 901 | except StopIteration: 902 | return pattern.split()[0] 903 | return None 904 | 905 | 906 | def find_relevant_tag_by_warning(warning, tags): 907 | """Find a relevant tag based on the warning text""" 908 | warning_words = set(w.lower() for w in warning.split()) 909 | for tag in tags: 910 | tag_words = set(w.lower() for w in tag.split(':')) 911 | if any(w in warning_words for w in tag_words): 912 | return tag 913 | return None 914 | 915 | def validate_tag_symbols(tags_definitions): 916 | """Validate that tag symbols are not duplicated and are not empty""" 917 | tag_structure = tags_definitions.get('tag_structure') 918 | if not tag_structure or 'symbols' not in tag_structure: 919 | raise ValueError("Tag structure or symbols key is missing in tags.yml") 920 | symbols = tag_structure.get('symbols', {}) 921 | if not symbols: 922 | raise ValueError("Symbols are empty in tag_structure in tags.yml") 923 | 924 | seen_symbols = set() 925 | for symbol_name, symbol_value in symbols.items(): 926 | if not symbol_value: 927 | raise ValueError(f"Symbol '{symbol_name}' is empty in tag_structure") 928 | if symbol_value in seen_symbols: 929 | raise ValueError(f"Duplicate symbol '{symbol_value}' found in tag_structure for symbol '{symbol_name}'") 930 | seen_symbols.add(symbol_value) 931 | 932 | def main(): 933 | args = parser.parse_args() 934 | start_time = time.time() 935 | 936 | # Only show help if explicitly asked with -h/--help 937 | if '-h' in sys.argv or '--help' in sys.argv: 938 | print("\nTag Guardian - Validate tags in CSV files") 939 | print("\nExamples:") 940 | print(" Basic usage:") 941 | print(" python tag_guardian.py") 942 | print(" python tag_guardian.py file1.csv file2.csv") 943 | # ...existing help text... 944 | parser.print_help() 945 | sys.exit(0) 946 | 947 | # Load tags definitions from default location 948 | tags_definitions = load_tag_definitions(root_dir) 949 | 950 | # Validate tag symbols 951 | validate_tag_symbols(tags_definitions) 952 | 953 | # Process files - Pass None if no files specified to process all 954 | csv_files = get_csv_files(root_dir, args.files if args.files else None) 955 | results = [process_csv_file(f, tags_definitions) for f in csv_files if f] 956 | results = [r for r in results if r] 957 | 958 | # Generate report 959 | stats = calculate_statistics(results) 960 | stats['processing_time'] = time.time() - start_time 961 | 962 | report_path = args.output or os.path.join(root_dir, 'tag_guardian_report.md') 963 | generate_markdown_report(stats, [r[0] for r in results], report_path, args) 964 | 965 | print(f"{Fore.GREEN}\nProcessed {len(csv_files)} files{Style.RESET_ALL}") 966 | print(f"{Fore.GREEN}Generated main report:{Style.RESET_ALL} {os.path.basename(report_path)}") 967 | print(f"{Fore.GREEN}Generated detail reports in:{Style.RESET_ALL} reports/") 968 | 969 | if __name__ == '__main__': 970 | main() 971 | -------------------------------------------------------------------------------- /src/retroseek/.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | /.pnp 4 | .pnp.js 5 | 6 | # Testing 7 | /coverage 8 | 9 | # Production 10 | /dist 11 | /build 12 | 13 | # Misc 14 | .DS_Store 15 | .env 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | # Logs 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | # Editor directories and files 27 | .vscode/* 28 | !.vscode/extensions.json 29 | .idea 30 | *.suo 31 | *.ntvs* 32 | *.njsproj 33 | *.sln 34 | *.sw? 35 | 36 | # Vite 37 | .vite/ 38 | -------------------------------------------------------------------------------- /src/retroseek/RetroSeek.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { SearchForm } from './components/SearchForm'; 3 | import { GameList } from './components/GameList'; 4 | import { GameService } from './services/GameService'; 5 | import { Game } from './models/Game'; 6 | import './styles/RetroSeek.css'; 7 | 8 | const gameService = new GameService(); 9 | 10 | export const RetroSeek: React.FC = () => { 11 | const [games, setGames] = useState([]); 12 | const [darkMode, setDarkMode] = useState(false); 13 | 14 | const handleSearch = async (criteria: any) => { 15 | const results = await gameService.searchGames(criteria); 16 | setGames(results); 17 | }; 18 | 19 | const toggleDarkMode = () => { 20 | setDarkMode(!darkMode); 21 | document.body.classList.toggle('dark-mode', !darkMode); 22 | }; 23 | 24 | return ( 25 |
26 |

RetroSeek

27 | 28 |
29 |

by kenta2097 designed with Copilot

30 | 33 |
34 |
35 | ); 36 | }; 37 | 38 | export default RetroSeek; 39 | -------------------------------------------------------------------------------- /src/retroseek/components/GameList.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Game } from '../models/Game'; 3 | import '../styles/GameList.css'; 4 | 5 | interface GameListProps { 6 | games: Game[]; 7 | } 8 | 9 | export const GameList: React.FC = ({ games }) => { 10 | 11 | const formatDate = (date: Date): string => { 12 | if (date.getTime() === 0) return 'Unknown'; 13 | 14 | const year = date.getFullYear(); 15 | const month = date.getMonth() + 1; 16 | const day = date.getDate(); 17 | 18 | if (day === 1 && month === 1) { 19 | return year.toString(); 20 | } else if (day === 1) { 21 | return `${year}-${month.toString().padStart(2, '0')}`; 22 | } 23 | return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`; 24 | }; 25 | 26 | const formatTags = (tags: string[]): JSX.Element[] => { 27 | return tags.map((tag, index) => ( 28 | 29 | #{tag} 30 | 31 | )); 32 | }; 33 | 34 | return ( 35 |
36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | {games.map((game) => ( 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | ))} 63 | 64 |
TitlePlatformRegionDeveloperPublisherRelease DateIDTags
{game.title}{game.platform.join(', ')}{game.region.join(', ')}{game.developer}{game.publisher}{game.releaseDate ? formatDate(game.releaseDate) : 'Unknown'}{game.id}{formatTags(game.tags).reduce((prev, curr) => [prev, ' ', curr])}
65 |
66 |
67 | ); 68 | }; 69 | 70 | export default GameList; 71 | -------------------------------------------------------------------------------- /src/retroseek/components/SearchForm.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from 'react'; 2 | import { GameSearchCriteria } from '../models/Game'; 3 | import { GameService } from '../services/GameService'; 4 | import GameList from './GameList'; 5 | import '../styles/SearchForm.css'; 6 | 7 | interface SearchFormProps { 8 | onSearch: (criteria: GameSearchCriteria) => void; 9 | } 10 | 11 | const gameService = new GameService(); 12 | 13 | export const SearchForm: React.FC = ({ onSearch }) => { 14 | const [criteria, setCriteria] = useState({}); 15 | const [platforms, setPlatforms] = useState([]); 16 | const [regions, setRegions] = useState([]); 17 | const [games, setGames] = useState([]); 18 | const [includeUnknownReleaseDate, setIncludeUnknownReleaseDate] = useState(false); 19 | 20 | useEffect(() => { 21 | const loadOptions = async () => { 22 | const [platformList, regionList] = await Promise.all([ 23 | gameService.getAvailablePlatforms(), 24 | gameService.getAvailableRegions() 25 | ]); 26 | setPlatforms(platformList); 27 | setRegions(regionList); 28 | }; 29 | loadOptions(); 30 | }, []); 31 | 32 | const handleSelect = (e: React.ChangeEvent, field: string) => { 33 | const selectedOptions = Array.from(e.target.selectedOptions).map(o => o.value); 34 | setCriteria(prevCriteria => ({ 35 | ...prevCriteria, 36 | [field]: selectedOptions 37 | })); 38 | }; 39 | 40 | const handleSubmit = async (e: React.FormEvent) => { 41 | e.preventDefault(); 42 | if (!criteria.title && !criteria.platform?.length && !criteria.region?.length && !criteria.dateFrom && !criteria.dateTo && !criteria.developer && !criteria.publisher && !includeUnknownReleaseDate) { 43 | alert('Please select at least one filter before searching.'); 44 | return; 45 | } 46 | setGames([]); 47 | const newGames = await gameService.searchGames({ ...criteria, includeUnknownReleaseDate }); 48 | setGames(newGames); 49 | }; 50 | 51 | return ( 52 |
53 |
54 |
55 | 56 | setCriteria({...criteria, title: e.target.value})} 59 | /> 60 |
61 |
62 | 63 | 70 |
71 |
72 | 73 | 80 |
81 |
82 | 83 | setCriteria({...criteria, developer: e.target.value})} 86 | /> 87 |
88 |
89 | 90 | setCriteria({...criteria, publisher: e.target.value})} 93 | /> 94 |
95 |
96 | 97 | setCriteria({...criteria, dateFrom: new Date(e.target.value)})} 100 | /> 101 |
102 |
103 | 104 | setCriteria({...criteria, dateTo: new Date(e.target.value)})} 107 | /> 108 |
109 |
110 | 117 |
118 | 119 |
120 | 121 |
122 | ); 123 | }; 124 | 125 | export default SearchForm; 126 | -------------------------------------------------------------------------------- /src/retroseek/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | RetroSeek 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/retroseek/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import { RetroSeek } from './RetroSeek' 4 | import './styles/main.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /src/retroseek/models/Game.ts: -------------------------------------------------------------------------------- 1 | export interface Game { 2 | // La propiedad id se mantiene pero normalmente no se muestra 3 | id: string; 4 | // Orden solicitado de campos 5 | title: string; 6 | platform: string[]; 7 | region: string[]; 8 | developer: string; 9 | publisher: string; 10 | releaseDate: Date; 11 | tags: string[]; 12 | } 13 | 14 | export interface GameSearchCriteria { 15 | title?: string; 16 | platform?: string[]; 17 | dateFrom?: Date; 18 | dateTo?: Date; 19 | region?: string[]; 20 | developer?: string; 21 | publisher?: string; 22 | } 23 | -------------------------------------------------------------------------------- /src/retroseek/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "retroseek", 3 | "private": true, 4 | "version": "0.1.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "react": "^18.2.0", 13 | "react-dom": "^18.2.0", 14 | "react-router-dom": "^6.22.3" 15 | }, 16 | "devDependencies": { 17 | "@types/react": "^18.2.64", 18 | "@types/react-dom": "^18.2.21", 19 | "@vitejs/plugin-react": "^4.0.0", 20 | "typescript": "^5.2.2", 21 | "vite": "^4.3.9" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/retroseek/services/CSVReader.ts: -------------------------------------------------------------------------------- 1 | import { Game } from '../models/Game'; 2 | 3 | export class CSVReader { 4 | private static baseUrl = 'https://raw.githubusercontent.com/PigSaint/GameDataBase/main'; 5 | private static platformFiles = { 6 | 'Arcade CAPCOM': 'arcade_capcom.csv', 7 | 'Arcade IREM': 'arcade_irem.csv', 8 | 'Arcade SEGA': 'arcade_sega.csv', 9 | 'Arcade SNK': 'arcade_snk.csv', 10 | 'Arcade TAITO': 'arcade_taito.csv', 11 | 'NEC PC-Engine CD': 'console_nec_cdrom2.csv', 12 | 'NEC PC-Engine/TurboGrafx-16/SuperGrafx': 'console_nec_pcengine_turbografx_supergrafx.csv', 13 | 'NEC PC-FX': 'console_nec_pcfx.csv', 14 | 'Nintendo 64DD': 'console_nintendo_64dd.csv', 15 | 'Nintendo Famicom/NES': 'console_nintendo_famicom_nes.csv', 16 | 'Nintendo Famicom Disk System': 'console_nintendo_famicomdisksystem.csv', 17 | 'Nintendo Game Boy': 'console_nintendo_gameboy.csv', 18 | 'Nintendo 64': 'console_nintendo_nintendo64.csv', 19 | 'Nintendo Satellaview': 'console_nintendo_satellaview.csv', 20 | 'Nintendo Super Famicom/SNES': 'console_nintendo_superfamicom_snes.csv', 21 | 'Nintendo Virtual Boy': 'console_nintendo_virtualboy.csv', 22 | 'Pioneer LaserActive': 'console_pioneer_laseractive.csv', 23 | 'SEGA Game Gear': 'console_sega_gamegear.csv', 24 | 'SEGA Mark III/Master System': 'console_sega_markIII_mastersystem.csv', 25 | 'SEGA Mega CD/Sega CD': 'console_sega_megacd_segacd.csv', 26 | 'SEGA Mega Drive/Genesis': 'console_sega_megadrive_genesis.csv', 27 | 'SEGA SG-1000/SC-3000/Othello Multivision': 'console_sega_sg1000_sc3000_othellomultivision.csv', 28 | 'SEGA 32X': 'console_sega_super32x.csv', 29 | 'SNK Neo Geo Pocket/Neo Geo Pocket Color': 'console_snk_neogeopocket_neogeopocketcolor.csv' 30 | }; 31 | 32 | private static validRegions = [ 33 | 'Japan', 34 | 'USA', 35 | 'Europe', 36 | 'World', 37 | 'Asia', 38 | 'Korea', 39 | 'Hong Kong', 40 | 'Taiwan', 41 | 'Brazil', 42 | 'Australia' 43 | ]; 44 | 45 | static async readAllGames(): Promise { 46 | const allGames: Game[] = []; 47 | 48 | for (const [platform, fileName] of Object.entries(this.platformFiles)) { 49 | try { 50 | const response = await fetch(`${this.baseUrl}/${fileName}`); 51 | if (!response.ok) { 52 | throw new Error(`HTTP error! status: ${response.status}`); 53 | } 54 | const text = await response.text(); 55 | const games = this.parseCSV(text, platform); 56 | allGames.push(...games); 57 | } catch (error) { 58 | console.error(`Error loading ${platform} games:`, error); 59 | } 60 | } 61 | 62 | return allGames; 63 | } 64 | 65 | private static parseCSV(csv: string, platform: string): Game[] { 66 | const lines = csv.split('\n'); 67 | const headers = lines[0].split(','); 68 | 69 | const columnIndexes = { 70 | id: headers.indexOf('ID'), 71 | screenTitle: headers.indexOf('Screen title @ Exact'), 72 | releaseDate: headers.indexOf('Release date'), 73 | developer: headers.indexOf('Developer'), 74 | publisher: headers.indexOf('Publisher'), 75 | region: headers.indexOf('Region'), 76 | tags: headers.indexOf('Tags') 77 | }; 78 | 79 | return lines.slice(1) 80 | .filter(line => line.trim() !== '') 81 | .map((line) => { 82 | const values = line.split(','); 83 | const game: Game = { 84 | id: values[columnIndexes.id]?.trim() || '', 85 | title: values[columnIndexes.screenTitle]?.trim() || '', 86 | platform: [platform], 87 | region: [values[columnIndexes.region]?.trim() || 'Unknown'], 88 | developer: values[columnIndexes.developer]?.trim() || 'Unknown', 89 | publisher: values[columnIndexes.publisher]?.trim() || 'Unknown', 90 | releaseDate: this.parseDate(values[columnIndexes.releaseDate]), 91 | tags: this.parseTags(values[columnIndexes.tags] || '') 92 | }; 93 | return game; 94 | }) 95 | .filter(game => game.title); 96 | } 97 | 98 | private static parseDate(dateStr: string | undefined): Date { 99 | if (!dateStr) return new Date(0); 100 | 101 | const fullDate = /^(\d{4})-(\d{2})-(\d{2})$/; 102 | const yearMonth = /^(\d{4})-(\d{2})$/; 103 | const yearOnly = /^(\d{4})$/; 104 | 105 | let date = new Date(0); 106 | 107 | if (fullDate.test(dateStr)) { 108 | date = new Date(dateStr); 109 | } else if (yearMonth.test(dateStr)) { 110 | const [year, month] = dateStr.split('-').map(Number); 111 | date = new Date(year, month - 1); 112 | } else if (yearOnly.test(dateStr)) { 113 | date = new Date(parseInt(dateStr), 0); 114 | } 115 | 116 | return isNaN(date.getTime()) ? new Date(0) : date; 117 | } 118 | 119 | private static parseRegions(regionStr: string): string[] { 120 | if (!regionStr) return ['Unknown']; 121 | 122 | const regions = regionStr 123 | .split('/') 124 | .map(r => r.trim()) 125 | .filter(r => r.length > 0); 126 | 127 | const validatedRegions = regions 128 | .filter(region => this.validRegions.some( 129 | validRegion => region.toLowerCase().includes(validRegion.toLowerCase()) 130 | )); 131 | 132 | return validatedRegions.length > 0 ? validatedRegions : ['Unknown']; 133 | } 134 | 135 | private static parseTags(tags: string): string[] { 136 | if (!tags) return []; 137 | return tags.split(' ') 138 | .filter(tag => tag.startsWith('#')) 139 | .map(tag => tag.substring(1)) 140 | .filter(tag => tag.length > 0); 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /src/retroseek/services/GameService.ts: -------------------------------------------------------------------------------- 1 | import { Game, GameSearchCriteria } from '../models/Game'; 2 | import { CSVReader } from './CSVReader'; 3 | 4 | export class GameService { 5 | private games: Game[] = []; 6 | private initialized = false; 7 | 8 | private async initialize() { 9 | if (!this.initialized) { 10 | this.games = await CSVReader.readAllGames(); 11 | this.games.forEach(game => { 12 | if (!game.releaseDate) { 13 | game.releaseDate = new Date(0); // Set empty release dates to a default value 14 | } 15 | }); 16 | this.initialized = true; 17 | } 18 | } 19 | 20 | async searchGames(criteria: GameSearchCriteria & { includeUnknownReleaseDate?: boolean }): Promise { 21 | await this.initialize(); 22 | 23 | return this.games.filter(game => { 24 | let matches = true; 25 | 26 | if (criteria.title) { 27 | matches = matches && game.title.toLowerCase().includes(criteria.title.toLowerCase()); 28 | } 29 | if (criteria.platform?.length) { 30 | matches = matches && game.platform.some(p => criteria.platform?.includes(p)); 31 | } 32 | if (criteria.region?.length) { 33 | matches = matches && criteria.region.some(region => game.region.some(r => r.split('/').includes(region))); 34 | } 35 | if (criteria.developer) { 36 | matches = matches && game.developer.toLowerCase().includes(criteria.developer.toLowerCase()); 37 | } 38 | if (criteria.publisher) { 39 | matches = matches && game.publisher.toLowerCase().includes(criteria.publisher.toLowerCase()); 40 | } 41 | if (criteria.includeUnknownReleaseDate) { 42 | matches = matches && game.releaseDate.getTime() === 0; 43 | } else { 44 | if (criteria.dateFrom || criteria.dateTo) { 45 | matches = matches && ( 46 | (criteria.dateFrom && new Date(game.releaseDate) >= new Date(criteria.dateFrom)) || 47 | (criteria.dateTo && new Date(game.releaseDate) <= new Date(criteria.dateTo)) || 48 | game.releaseDate.getTime() === 0 49 | ); 50 | } 51 | } 52 | 53 | return matches; 54 | }); 55 | } 56 | 57 | async getAvailablePlatforms(): Promise { 58 | await this.initialize(); 59 | return [...new Set(this.games.flatMap(game => game.platform))]; 60 | } 61 | 62 | async getAvailableRegions(): Promise { 63 | await this.initialize(); 64 | return [...new Set(this.games.flatMap(game => game.region.flatMap(r => r.split('/'))))]; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/retroseek/styles/GameList.css: -------------------------------------------------------------------------------- 1 | .game-list { 2 | display: grid; 3 | grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); 4 | gap: 1rem; 5 | padding: 1rem; 6 | } 7 | 8 | .game-card { 9 | background-color: var(--card-background); 10 | border: 1px solid var(--border-color); 11 | border-radius: 8px; 12 | padding: 1rem; 13 | transition: border-color 0.25s; 14 | } 15 | 16 | .game-card:hover { 17 | border-color: var(--primary-color); 18 | } 19 | 20 | .game-card h3 { 21 | margin: 0 0 1rem 0; 22 | color: var(--text-color); 23 | } 24 | 25 | .game-info p { 26 | margin: 0.5rem 0; 27 | font-size: 0.9rem; 28 | color: var(--text-color); 29 | } 30 | 31 | .game-info strong { 32 | color: var(--primary-color); 33 | } 34 | 35 | .game-list-container { 36 | width: 100%; 37 | overflow-x: auto; 38 | margin: 20px 0; 39 | padding: 1rem; 40 | background-color: var(--background-color); 41 | overflow-x: auto; 42 | margin-top: 20px; 43 | } 44 | 45 | .game-table { 46 | width: 100%; 47 | border-collapse: separate; 48 | border-spacing: 0; 49 | background: var(--background-color); 50 | border-radius: 8px; 51 | overflow: hidden; 52 | box-shadow: var(--card-shadow); 53 | width: 100%; 54 | border-collapse: collapse; 55 | margin-top: 20px; 56 | } 57 | 58 | .game-table th, 59 | .game-table td { 60 | padding: 8px; 61 | text-align: left; 62 | white-space: nowrap; 63 | overflow: hidden; 64 | text-overflow: ellipsis; 65 | border: 1px solid #ddd; 66 | padding: 8px; 67 | } 68 | 69 | .game-table th:nth-child(1), 70 | .game-table td:nth-child(1) { /* Title */ 71 | min-width: 200px; 72 | max-width: 300px; 73 | } 74 | 75 | .game-table th:nth-child(2), 76 | .game-table td:nth-child(2) { /* Platform */ 77 | width: 150px; 78 | } 79 | 80 | .game-table th:nth-child(3), 81 | .game-table td:nth-child(3) { /* Region */ 82 | width: 100px; 83 | } 84 | 85 | .game-table th:nth-child(4), 86 | .game-table td:nth-child(4) { /* Developer */ 87 | width: 120px; 88 | } 89 | 90 | .game-table th:nth-child(5), 91 | .game-table td:nth-child(5) { /* Publisher */ 92 | width: 120px; 93 | } 94 | 95 | .game-table th:nth-child(6), 96 | .game-table td:nth-child(6) { /* Release Date */ 97 | width: 100px; 98 | } 99 | 100 | .game-table th:nth-child(7), 101 | .game-table td:nth-child(7) { /* ID */ 102 | width: 200px; /* Increased from 120px to better fit IDs */ 103 | } 104 | 105 | .game-table th:nth-child(8), 106 | .game-table td:nth-child(8) { /* Tags */ 107 | min-width: 150px; 108 | } 109 | 110 | .game-table th { 111 | background: var(--primary-color); 112 | color: var(--background-color); 113 | padding: 1rem; 114 | text-align: left; 115 | font-weight: 500; 116 | font-size: 0.9rem; 117 | text-transform: uppercase; 118 | letter-spacing: 0.05em; 119 | background-color: grey; 120 | color: white; 121 | } 122 | 123 | .game-table td { 124 | padding: 1rem; 125 | border-bottom: 1px solid var(--border-color); 126 | color: var(--text-color); 127 | font-size: 0.95rem; 128 | } 129 | 130 | .game-table tr:last-child td { 131 | border-bottom: none; 132 | } 133 | 134 | .game-table tbody tr { 135 | transition: background-color 0.2s ease; 136 | } 137 | 138 | .game-table tbody tr:hover { 139 | background-color: var(--hover-color); 140 | } 141 | 142 | .tags-column { 143 | white-space: pre-wrap; /* Permitir que las etiquetas se envuelvan */ 144 | word-wrap: break-word; /* Permitir que las etiquetas se dividan en varias líneas */ 145 | } 146 | 147 | .tag { 148 | display: inline-block; 149 | background-color: #e0e0e0; 150 | color: #333; 151 | padding: 2px 6px; 152 | margin: 2px; 153 | border-radius: 4px; 154 | font-size: 0.85rem; 155 | } 156 | 157 | @media (max-width: 768px) { 158 | .game-table { 159 | font-size: 0.85rem; 160 | } 161 | 162 | .game-table th, 163 | .game-table td { 164 | padding: 0.75rem; 165 | } 166 | 167 | .game-table th, 168 | .game-table td { 169 | padding: 6px; 170 | font-size: 0.8rem; 171 | } 172 | } 173 | 174 | :root { 175 | --background-color: #f9f9f9; 176 | --text-color: #333; 177 | --accent-color: #007bff; 178 | --border-color: #ddd; 179 | --hover-color: #e0e0e0; 180 | --card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); 181 | } 182 | -------------------------------------------------------------------------------- /src/retroseek/styles/RetroSeek.css: -------------------------------------------------------------------------------- 1 | .retroseek { 2 | max-width: 1200px; 3 | margin: 0 auto; 4 | padding: 2rem; 5 | background-color: var(--card-background); 6 | border-radius: 8px; 7 | box-shadow: var(--card-shadow); 8 | } 9 | 10 | .retroseek h1 { 11 | text-align: center; 12 | margin-bottom: 2rem; 13 | color: var(--primary-color); 14 | font-size: 3em; /* Aumenta el tamaño de la fuente */ 15 | font-weight: 700; /* Aumenta el grosor de la fuente */ 16 | text-transform: uppercase; /* Convierte el texto a mayúsculas */ 17 | letter-spacing: 0.1em; /* Aumenta el espaciado entre letras */ 18 | text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2); /* Añade sombra al texto */ 19 | } 20 | 21 | .retroseek p { 22 | font-size: 1.2em; 23 | line-height: 1.6; 24 | color: var(--text-color); 25 | margin-bottom: 1.5rem; 26 | } 27 | 28 | footer { 29 | text-align: center; 30 | margin-top: 2rem; 31 | font-size: 0.7em; 32 | color: #888; /* Usa un gris desvanecido */ 33 | border-top: 1px solid #ddd; /* Añade una línea superior */ 34 | padding-top: 1rem; /* Añade un relleno superior */ 35 | position: relative; 36 | } 37 | 38 | .dark-mode-toggle { 39 | position: absolute; 40 | bottom: 1rem; 41 | right: 1rem; 42 | padding: 0.5rem 1rem; 43 | background-color: var(--primary-color); 44 | color: white; 45 | border: none; 46 | border-radius: 4px; 47 | cursor: pointer; 48 | transition: background-color 0.25s; 49 | } 50 | 51 | .dark-mode-toggle:hover { 52 | background-color: var(--primary-hover); 53 | } 54 | 55 | body.dark-mode { 56 | --background-color: #121212; 57 | --text-color: #e0e0e0; 58 | --card-background: #1e1e1e; 59 | --border-color: #333; 60 | --accent-color: var(--primary-color); 61 | --hover-color: #333; 62 | --card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.5); 63 | } 64 | 65 | @media (max-width: 768px) { 66 | .retroseek { 67 | padding: 1rem; 68 | } 69 | 70 | .retroseek h1 { 71 | font-size: 2.5em; /* Ajusta el tamaño de la fuente para pantallas pequeñas */ 72 | } 73 | 74 | .retroseek p { 75 | font-size: 1em; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/retroseek/styles/SearchForm.css: -------------------------------------------------------------------------------- 1 | .search-form { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 1rem; 5 | padding: 1.5rem; 6 | background-color: var(--background-color); 7 | border-radius: 8px; 8 | box-shadow: var(--card-shadow); 9 | margin-bottom: 2rem; 10 | } 11 | 12 | .form-group { 13 | display: flex; 14 | flex-direction: column; 15 | gap: 0.5rem; 16 | } 17 | 18 | .form-group label { 19 | color: var(--text-color); 20 | font-size: 0.9rem; 21 | font-weight: 500; 22 | } 23 | 24 | .form-group input, 25 | .form-group select { 26 | padding: 0.75rem; 27 | border-radius: 4px; 28 | border: 1px solid var(--border-color); 29 | background-color: var(--card-background); 30 | color: var(--text-color); 31 | font-size: 0.9rem; 32 | } 33 | 34 | .form-group input:focus, 35 | .form-group select:focus { 36 | outline: none; 37 | border-color: var(--accent-color); 38 | } 39 | 40 | .form-group select[multiple] { 41 | min-height: 120px; 42 | } 43 | 44 | button[type="submit"] { 45 | padding: 0.75rem 1.5rem; 46 | background-color: var(--accent-color); 47 | color: var(--background-color); 48 | border: none; 49 | border-radius: 4px; 50 | font-size: 0.9rem; 51 | font-weight: 500; 52 | cursor: pointer; 53 | transition: background-color 0.2s ease; 54 | } 55 | 56 | button[type="submit"]:hover { 57 | background-color: var(--primary-hover); 58 | } 59 | 60 | .unknown-release-date-btn { 61 | padding: 0.75rem 1.5rem; 62 | background-color: var(--card-background); 63 | color: var(--text-color); 64 | border: 1px solid var(--border-color); 65 | border-radius: 4px; 66 | font-size: 0.9rem; 67 | font-weight: 500; 68 | cursor: pointer; 69 | transition: background-color 0.2s ease, color 0.2s ease; 70 | } 71 | 72 | .unknown-release-date-btn.active { 73 | background-color: var(--accent-color); 74 | color: var(--background-color); 75 | border-color: var(--accent-color); 76 | } 77 | 78 | .unknown-release-date-btn:hover { 79 | background-color: var(--primary-hover); 80 | color: white; 81 | border-color: var(--primary-hover); 82 | } 83 | 84 | .unknown-release-date-group { 85 | display:flex; 86 | align-items:flex-start ; 87 | gap: 0.5rem; 88 | } 89 | 90 | .form-group input[type="checkbox"] { 91 | margin-right: 0.5rem; 92 | } 93 | 94 | @media (min-width: 768px) { 95 | .search-form { 96 | flex-direction: row; 97 | flex-wrap: wrap; 98 | } 99 | 100 | .form-group { 101 | flex: 1; 102 | min-width: 200px; 103 | } 104 | 105 | .unknown-release-date-group { 106 | flex: 1; 107 | min-width: 200px; 108 | } 109 | 110 | button[type="submit"] { 111 | align-self: flex-end; 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /src/retroseek/styles/main.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --primary-color: #007bff; /* Cambia a un azul más claro */ 3 | --primary-hover: #3399ff; /* Cambia a un azul más suave para el hover */ 4 | --background-color: #f9f9f9; 5 | --text-color: #333; 6 | --card-background: #ffffff; 7 | --border-color: #ddd; 8 | --accent-color: var(--primary-color); 9 | --hover-color: #e0e0e0; 10 | --card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); 11 | font-family: system-ui, -apple-system, sans-serif; 12 | line-height: 1.5; 13 | font-weight: 400; 14 | } 15 | 16 | body { 17 | margin: 0; 18 | min-width: 320px; 19 | min-height: 100vh; 20 | color: var(--text-color); 21 | background-color: var(--background-color); 22 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 23 | } 24 | 25 | .retroseek { 26 | max-width: 1280px; 27 | margin: 0 auto; 28 | padding: 2rem; 29 | } 30 | 31 | button { 32 | border-radius: 8px; 33 | border: 1px solid transparent; 34 | padding: 0.6em 1.2em; 35 | font-size: 1em; 36 | font-weight: 500; 37 | font-family: inherit; 38 | background-color: var(--primary-color); 39 | color: white; 40 | cursor: pointer; 41 | transition: background-color 0.25s, border-color 0.25s; 42 | } 43 | 44 | button:hover { 45 | background-color: var(--primary-hover); 46 | border-color: var(--primary-color); 47 | } 48 | -------------------------------------------------------------------------------- /src/retroseek/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | "moduleResolution": "bundler", 9 | "allowImportingTsExtensions": true, 10 | "resolveJsonModule": true, 11 | "isolatedModules": true, 12 | "noEmit": true, 13 | "jsx": "react-jsx", 14 | "strict": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "noFallthroughCasesInSwitch": true, 18 | "outDir": "./dist", 19 | "rootDir": "./src", 20 | "esModuleInterop": true, 21 | "forceConsistentCasingInFileNames": true 22 | }, 23 | "include": ["src/**/*.ts", "src/**/*.tsx"], 24 | "exclude": ["node_modules", "dist", "vite.config.ts"], 25 | "references": [{ "path": "./tsconfig.node.json" }] 26 | } 27 | -------------------------------------------------------------------------------- /src/retroseek/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /src/retroseek/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | import path from 'path' 4 | 5 | export default defineConfig({ 6 | plugins: [react()], 7 | base: '/GameDataBase/', // Asegúrate de que la base esté configurada correctamente para GitHub Pages 8 | build: { 9 | outDir: 'build', // Asegúrate de que el directorio de salida sea correcto 10 | rollupOptions: { 11 | input: { 12 | main: path.resolve(__dirname, 'index.html') 13 | } 14 | } 15 | }, 16 | server: { 17 | port: 5173, 18 | host: '0.0.0.0', 19 | open: true, 20 | }, 21 | resolve: { 22 | alias: { 23 | '@': path.resolve(__dirname, './src') 24 | } 25 | } 26 | }) 27 | -------------------------------------------------------------------------------- /tags.yml: -------------------------------------------------------------------------------- 1 | input: 2 | description: "Input system" 3 | subtag: 4 | joystick: 5 | description: "Joystick" 6 | children: 7 | "2h": "2-way horizontal" 8 | "2v": "2-way vertical" 9 | "3": "3-way" 10 | "4": "4-way" 11 | "8": "8-way" 12 | double: "Double joystick" 13 | rotary: "Rotary joystick" 14 | stick: 15 | description: "Stick" 16 | children: 17 | twin: "Twin stick" 18 | trackball: 19 | description: "Trackball" 20 | paddle: 21 | description: "Paddle" 22 | spinner: 23 | description: "Spinner" 24 | wheel: 25 | description: "Wheel" 26 | dial: 27 | description: "Dial" 28 | lightgun: 29 | description: "Lightgun" 30 | optical: 31 | description: "Optical device" 32 | positional: 33 | description: "Positional crank" 34 | children: 35 | "2": "Two positions" 36 | "3": "Three positions" 37 | buttons: 38 | description: "In-game buttons" 39 | children: 40 | "1": "1 button" 41 | "2": "2 buttons" 42 | "3": "3 buttons" 43 | "4": "4 buttons" 44 | "5": "5 buttons" 45 | "6": "6 buttons" 46 | "7": "7 buttons" 47 | "8": "8 buttons" 48 | "11": "11 buttons" 49 | "12": "12 buttons" 50 | "19": "19 keys" 51 | "23": "23 keys" 52 | "27": "27 keys" 53 | pneumatic: "Pneumatic button" 54 | pedals: 55 | description: "Foot pedals" 56 | children: 57 | "1": "One pedal" 58 | "2": "Two pedals" 59 | puncher: 60 | description: "Puncher" 61 | motion: 62 | description: "Motion detection device" 63 | 64 | players: 65 | description: "Players" 66 | subtag: 67 | "1": 68 | description: "Single player" 69 | "2": 70 | description: "2 players" 71 | "3": 72 | description: "3 players" 73 | "4": 74 | description: "4 players" 75 | "5": 76 | description: "5 players" 77 | "6": 78 | description: "6 players" 79 | "8": 80 | description: "8 players" 81 | "9": 82 | description: "9 players" 83 | "10": 84 | description: "10 players" 85 | "12": 86 | description: "12 players" 87 | vs: 88 | description: "Versus" 89 | coop: 90 | description: "Cooperative" 91 | alt: 92 | description: "Alternating" 93 | 94 | genre: 95 | description: "Genre" 96 | subtag: 97 | action: 98 | description: "Action" 99 | children: 100 | platformer: "Platformer" 101 | maze: "Maze" 102 | blockbreaker: "Block breaker" 103 | runandgun: "Run and gun" 104 | hackandslash: "Hack and slash" 105 | metroidvania: "Metroidvania" 106 | roguelite: "Roguelite" 107 | adventure: 108 | description: "Adventure" 109 | children: 110 | pointandclick: "Point and click" 111 | visualnovel: "Visual novel" 112 | survivalhorror: "Survival horror" 113 | text: "Text" 114 | board: 115 | description: "Classic analogic board game" 116 | children: 117 | cards: "Classic cards" 118 | hanafuda: "Hanafuda" 119 | chess: "Chess" 120 | shougi: "Shōgi" 121 | go: "Go" 122 | mahjong: "Mahjong" 123 | reversi: "Reversi" 124 | othello: "Othello" 125 | party: "Party" 126 | jankenpon: "Rock paper scissors" 127 | brawler: 128 | description: "Brawler / Beat'em up" 129 | fighting: 130 | description: "Fighting" 131 | minigames: 132 | description: "Minigames" 133 | parlor: 134 | description: "Classic analogic arcade games" 135 | children: 136 | pinball: "Pinball" 137 | jackpot: "Jackpot" 138 | pachinko: "Pachinko" 139 | darts: "Darts" 140 | bowling: "Bowling" 141 | billiards: "Billiards" 142 | mogurataiji: "Whac-A-Mole" 143 | kiddieride: "Kiddie ride" 144 | mechanical: "Mechanical" 145 | quiz: 146 | description: "Quiz" 147 | racing: 148 | description: "Racing" 149 | children: 150 | combat: "Combat racing" 151 | driving: "Non-competition driving" 152 | rpg: 153 | description: "Role-Playing Game" 154 | children: 155 | a: "ARPG / Action RPG" 156 | j: "JRPG" 157 | s: "SRPG / Tactics RPG" 158 | dungeoncrawler: "Dungeon crawler" 159 | rhythm: 160 | description: "Rhythm" 161 | children: 162 | karaoke: "Karaoke" 163 | dance: "Dance" 164 | shmup: 165 | description: "Shoot'em up" 166 | children: 167 | h: "Horizontal" 168 | v: "Vertical" 169 | i: "Isometric" 170 | danmaku: "Bullet hell" 171 | shooting: 172 | description: "Aim-based shooting games" 173 | children: 174 | gallery: "Shooting gallery" 175 | rail: "Rail shooter" 176 | fps: "FPS / First person Shooter" 177 | tps: "TPS / Third person shooter" 178 | puzzle: 179 | description: "Puzzle" 180 | children: 181 | drop: "Drop pieces puzzle" 182 | mind: "Mind game" 183 | sim: 184 | description: "Simulation" 185 | children: 186 | strategy: "Strategy" 187 | cardgame: "Card game" 188 | flight: "Flight simulator" 189 | train: "Train simulator" 190 | date: "Date simulator" 191 | otome: "Otome game / 乙女ゲーム" 192 | life: "Life simulator" 193 | farm: "Farm simulator" 194 | pet: "Pet simulator" 195 | fishing: "Fishing" 196 | god: "God simulator" 197 | derby: "Derby horse ride" 198 | building: "Building" 199 | cooking: "Cooking" 200 | sports: 201 | description: "Sports" 202 | children: 203 | soccer: "Soccer" 204 | basketball: "Basketball" 205 | baseball: "Baseball" 206 | volleyball: "Volleyball" 207 | rugby: "Rugby" 208 | football: "American football" 209 | dodgeball: "Dodgeball" 210 | hockey: "Ice hockey" 211 | skiing: "Skiing" 212 | skateboarding: "Skateboarding" 213 | snowboarding: "Snowboarding" 214 | tennis: "Tennis" 215 | pingpong: "Table tennis" 216 | paddle: "Paddle" 217 | squash: "Squash" 218 | badminton: "Badminton" 219 | flyingdisc: "Flying disc / Frisbee" 220 | cycling: "Cycling" 221 | formula1: "Formula 1" 222 | rally: "Rally" 223 | nascar: "NASCAR" 224 | motogp: "Moto GP" 225 | motocross: "Motocross" 226 | karting: "Karting" 227 | jetski: "Jet ski / PWC" 228 | golf: "Golf" 229 | cricket: "Cricket" 230 | boxing: "Boxing" 231 | kickboxing: "Kickboxing" 232 | wrestling: "Wrestling" 233 | sumo: "Sumo" 234 | karate: "Karate" 235 | judo: "Judo" 236 | kendo: "Kendo" 237 | mma: "Mixed Martial Arts / MMA" 238 | decathlon: "Decathlon" 239 | running: "Running" 240 | archery: "Archery" 241 | swimming: "Swimming" 242 | rowing: "Rowing" 243 | kayak: "Kayak" 244 | surf: "Surf" 245 | notagame: 246 | description: "Not a game" 247 | children: 248 | educational: "Educational" 249 | drawing: "Drawing" 250 | popcorn: "Popcorn" 251 | purikura: "Photo stickers" 252 | redemption: "Redemption" 253 | media: "Media" 254 | application: "Application" 255 | test: "Test" 256 | sdk: "Software Development Kit" 257 | slideshow: "Picture slideshow" 258 | sound: "Only sound" 259 | 260 | addon: 261 | description: "Specific external hardware recommended or required" 262 | subtag: 263 | peripheral: 264 | description: "Peripheral" 265 | children: 266 | megacd: "SEGA Mega-CD / SEGA-CD" 267 | super32x: "SEGA Super 32X / MegaDrive 32X / Genesis 32X" 268 | disksystem: "Nintendo Famicom Disk System / ディスクシステム" 269 | sufami: "Bandai SuFami Turbo / スーファミターボ" 270 | 64dd: "Nintendo 64DD" 271 | cdromrom: "NEC CD-ROM² / Super CD-ROM² / Arcade CD-ROM² / PC Engine Duo / TurboGrafx-CD / TurboDuo" 272 | controller: 273 | description: "Special controller" 274 | children: 275 | bikehandle: "SEGA Bike Handle" 276 | paddlecontrol: "SEGA Paddle Control" 277 | sportspad: "SEGA Sports Pad" 278 | 6button: "SEGA Six Button Control Pad" 279 | activator: "SEGA Activator" 280 | xe1ap: "Dempa Micomsoft XE-1 AP" 281 | avenuepad3: "NEC Avenue Pad 3" 282 | avenuepad6: "NEC Avenue Pad 6" 283 | 10key: "NEC 10 Key Controller Pad" 284 | arkanoid: "Taito Arkanoid controller" 285 | familytrainera: "Bandai Family Trainer Mat A / ファミリートレーナー マットA / Power Pad Side A / Family Fun Fitness A" 286 | familytrainerb: "Bandai Family Trainer Mat B / ファミリートレーナー マットB / Power Pad Side B / Family Fun Fitness B" 287 | reeladapter: "Bandai Reel Adapter" 288 | powerglove: "Mattel Power Glove" 289 | mahjong: "CAPCOM Mahjong Controller / Mahjong Controller II / 麻雀コントローラー" 290 | hypershot: "Konami HyperShot" 291 | ddr: "Konami Dance Dance Revolution controller" 292 | taikanfamicom: "Konami Taikan Famicom / 大汗ファミコン" 293 | hardwarebike: "Varie Hardware Bike / ハードウーアバイク" 294 | pachinko: "Coconuts Pachinko Controller / パチンココントローラー" 295 | hissatsupachinko: "Sunsoft Hissatsu Pachinko Controller / 必殺パチンココントローラー" 296 | pashislot: "Sammy Jissen! PachiSlo Controller / 実戦! パチスロ コントローラー" 297 | horitrack: "Hori Track / ホリトラック" 298 | uforce: "Brøderbund UForce" 299 | smash: "Realtec Smash Controller" 300 | lifefitness: "Life Fitness Exertainment System" 301 | taptapmat: "IGS Tap-Tap Mat + Tonkachi / タップタップマット + トンカチ" 302 | teevgolf: "Sports Sciences TeeVGolf" 303 | lasabirdie: "Ricoh Lasabirdie / レーザーバーディー" 304 | tsurikon64: "ASCII Tsurikon 64 / つりコン64" 305 | partytap: "PR21 Party Tap" 306 | climberstick: "Nichibutsu Climber Stick / クライマー・スティック" 307 | juujikeycover: "NAMCO Jūji Key Cover / 十字キーカバー" 308 | lightgun: 309 | description: "Lightgun" 310 | children: 311 | lightphaser: "SEGA Light Phaser" 312 | menacer: "SEGA Menacer" 313 | zapper: "Nintendo Zapper" 314 | superscope: "Nintendo Super Scope" 315 | justifier: "Konami The Justifier / サ・ジャスティファイアー" 316 | laserscope: "Konami LaserScope" 317 | bandaihypershot: "Bandai Hyper Shot / ハイパーショット" 318 | gamegun: "American Laser GameGun" 319 | ap74: "Jäger AP74" 320 | mouse: 321 | description: "Mouse" 322 | children: 323 | md: "SEGA Mouse" 324 | sfc: "Nintendo Super Famicom Mouse / スーパーファミコンマウス / Super NES Mouse" 325 | pce: "NEC PC Engine Mouse" 326 | pcfx: "NEC PC-FX Mouse" 327 | n64: "Nintendo 64 Mouse" 328 | keyboard: 329 | description: "Typing keyboard" 330 | children: 331 | fc: "Famicom Keyboard" 332 | n64: "Nintendo 64 Keyboard" 333 | workboy: "Fabtek WorkBoy" 334 | multitap: 335 | description: "Multitap for adding more controllers to the same system" 336 | children: 337 | segatap: "SEGA Tap / Multiplayer / Team Player / セガタップ" 338 | 4playersadaptor: "Hori 4 Player Adaptor / Nintendo Four Score" 339 | super: "Hudson Super Multitap" 340 | pce: "Hudson Multitap / NEC TurboTap" 341 | 4wayplay: "Electronic Arts 4 Way Play" 342 | link: 343 | description: "Hardware for interconnecting systems" 344 | children: 345 | taisencable: "SEGA Game Gear Taisen Cable / Gear-to-Gear Cable" 346 | gamelinkcable: "Nintendo Tsūshin Cable / Game Link Cable" 347 | fourplayeradapter: "Nintendo Four Player Adapter" 348 | comcable: "NEC COM Cable / TurboExpress" 349 | linkup: "Technopop Link-up Cable" 350 | ngplink: "SNK NeoGeo Pocket Link Cable" 351 | radiounitwireless: "SNK Musen Unit / Radio Unit Wireless Adaptor" 352 | setsuzoku: "SNK NeoGeo Pocket-Dreamcast Setsuzoku Cable / ネオジオポケット/ドリームキャスト接続ケーブル" 353 | senyoucord: "Epoch Sen'yō Setsuzoku Cord / 専用接続コード" 354 | bb2interface: "Epoch Barcode Battler II Interface / BBII Interface / バーコードバトラーIIインターフェース" 355 | voicerkun: "Koei Voicer-kun / ボイサーくん" 356 | expansion: 357 | description: "Additional hardware for expansing system capabilities" 358 | children: 359 | fmsoundunit: "SEGA FM Sound Unit / FMサウンドユニット" 360 | memorypak: "Nintendo Satellaview 8M Memory Pak / サテラビュー 8Mメモルーパック" 361 | samegame: "Hudson SameGame Cassette / 鮫亀カセット" 362 | expansionpak: "Nintendo Memory Kakuchō Pak / メモリー拡張パック / Expansion Pak" 363 | megald: "Pioneer LaserActive PAC-S / SEGA Mega-LD" 364 | ldromrom: "Pioneer LaserActive PAC-N / NEC LD-ROM²" 365 | supersystemcard: "NEC PC Engine Super System Card CD-ROM²" 366 | arcadecard: "NEC PC Engine Arcade Card Pro CD-ROM² / NEC PC Engine Arcade Card Duo CD-ROM²" 367 | gamesexpresscard: "Games Express CD Card" 368 | lockon: 369 | description: "Lock-on cartridge" 370 | children: 371 | supergameboy: "Nintendo Super GameBoy / Super GameBoy 2 / スーパーゲームボーイ" 372 | transferpak: "Nintendo 64GB Pak / 64GBパック / Transfer Pak" 373 | datach: "Bandai Datach Joint ROM System / データック" 374 | deckenhancer: "Camerica Aladdin Deck Enhancer" 375 | oyagame: "Sunsoft Oyagame / 親ガメ" 376 | qtai: "Konami QTai / Q太" 377 | karaokestudio: "Bandai Karaoke Studio / カラオケスタジオ" 378 | sxt2: "Super X-Terminator 2 Sasuke / サスケ" 379 | backup: 380 | description: "Back-up based accessory for saving progress" 381 | children: 382 | backupramcart: "Mega-CD Back Up RAM Cartridge / バックアップRAMカートリッジ" 383 | controllerpak: "Nintendo Controller Pak / コントローラパック" 384 | smartmediacard: "Hagiwara Syscom SmartMedia Card" 385 | datarecorder: "Panasonic Famicom Data Recorder / データレコーダ" 386 | battlebox: "IGS Battle Box / バトルボックス" 387 | tennokoe: "Hudson Ten no Koe 2 / Ten no Koe Bank / 天の声 / NEC Backup Booster I / Backup Booster II / バックアップブースター / NEC TurboBooster-Plus" 388 | memorybase128: "NEC Memory Base 128 / メモリーベース128" 389 | turbofile: "ASCII Turbo File / Turbo File II / Turbo File GB / ターボファイル / Turbo File Adapter / ターボファイルアダプター / Turbo File Twin / ターボファイルツイン" 390 | online: 391 | description: "Online based accessory" 392 | children: 393 | megamodem: "SEGA Mega Modem / メガモデム" 394 | megaanser: "SEGA Mega Anser / メガアンサー" 395 | toshokan: "SEGA Game Toshokan / ゲーム図書館" 396 | segachannel: "SEGA Channel / セガチャンネル" 397 | xband: "Catapult XB∀ND" 398 | meganet: "Tec Toy MegaNet" 399 | teleplay: "Baton Teleplay System" 400 | networksystem: "Nintendo Family Computer Network System / ファミリーコンピュータ ネットワークシステム" 401 | ndm24: "NTT Data Tsūshin Modem NDM24 / 通信モデムNDM24" 402 | satellaview: "Nintendo SatellaView / サテラビュー" 403 | randnetmodem: "Randnet Modem / ランドネット" 404 | vibration: 405 | description: "Vibration" 406 | children: 407 | rumblepak: "Nintendo Shindō Pak / 振動パック / Rumble Pak" 408 | glasses: 409 | description: "Glasses" 410 | children: 411 | 3dglasses: "SEGA 3-D Glasses / セガ3-Dグラス" 412 | segavr: "SEGA VR Headset" 413 | 3dsystem: "Nintendo Famicom 3D System / ファミコン3Dシステム" 414 | 3dgoggle: "Pioneer LaserActive 3D Goggle / 3D ゴーグル / 3-D Goggles" 415 | mic: 416 | description: "Microphone" 417 | children: 418 | n64: "Nintendo 64 Mic" 419 | vrs: "VRS / Onseininshiki System / 音声認識システム / Voice Recognition Unit" 420 | drawing: 421 | description: "Drawing board" 422 | children: 423 | graphicboard: "SEGA Graphic Board" 424 | illustbooster: "NEC Illust Booster" 425 | oekakids: "Bandai Oekakids / おえかキッズ" 426 | health: 427 | description: "Health monitoring" 428 | children: 429 | catalyst: "HeartBeat Catalyst" 430 | biosensor: "SETA Bio Sensor" 431 | midi: 432 | description: "MIDI Keyboard" 433 | children: 434 | miracle: "The Miracle MIDI Keyboard" 435 | pianokeyboard: "Konami MIDI Keyboard" 436 | rob: 437 | description: "Nintendo Family Computer Robot / ファミリーコンピュータ ロボット/ R.O.B. / Robotic Operating Buddy" 438 | children: 439 | gyro: "Gyro Set / ジャイロ セット" 440 | block: "Block Set / ブロック セット" 441 | printer: 442 | description: "Printer" 443 | children: 444 | pocketprinter: "Nintendo Pocket Printer / GameBoy Printer" 445 | printbooster: "NEC Print Booster" 446 | barcodeboy: 447 | description: "NAMCOT Barcode Boy" 448 | rss: 449 | description: "Roland Sound Space" 450 | pocketcamera: 451 | description: "Nintendo Pocket Camera / ポケットカメラ / GameBoy Camera" 452 | capturecassette: 453 | description: "Nintendo 64 Capture Cassette" 454 | photoreader: 455 | description: "NEC Photo Reader" 456 | develobox: 457 | description: "Tokuma Shoten Develo Box / でべろ Box" 458 | teststation: 459 | description: "Nintendo NES Test Station" 460 | 461 | embedded: 462 | description: "Embedded extra hardware in cartridge" 463 | subtag: 464 | backup: 465 | description: "Back-up embeded system for saving progress" 466 | children: 467 | battery: "Battery backed SRAM" 468 | flashram: "Flash RAM" 469 | feram: "Ferroelectric RAM" 470 | eeprom: "EEPROM" 471 | chip: 472 | description: "Enhancement chip" 473 | children: 474 | ram: "Extra RAM" 475 | rtc: "Real-Time Clock" 476 | svp: "SEGA Virtua Processor / SVP" 477 | mmc5: "Nintendo MMC5" 478 | dsp1: "Nintendo DSP-1" 479 | dsp1a: "Nintendo DSP-1a" 480 | dsp1b: "Nintendo DSP-1b" 481 | dsp2: "Nintendo DSP-2" 482 | dsp3: "Nintendo DSP-3" 483 | dsp4: "Nintendo DSP-4" 484 | sa1: "Nintendo SA-1" 485 | sdd1: "Nintendo S-DD1" 486 | sfx1: "Nintendo Super FX GSU-1" 487 | sfx2: "Nintendo Super FX GSU-2" 488 | obc1: "Nintendo OBC-1" 489 | vrc6: "Konami VRC VI" 490 | vrc7: "Konami VRC VII" 491 | n163: "NAMCO 163" 492 | fme7: "Sunsoft FME-7" 493 | 5a: "Sunsoft 5A" 494 | 5b: "Sunsoft 5B" 495 | m50805: "Mitsubishi M50805" 496 | "7755": "NEC µPD7755C" 497 | "7756": "NEC µPD7756C" 498 | cx4: "CAPCOM CX4" 499 | spc7110: "Epson SPC7110" 500 | st010: "SETA ST010" 501 | st011: "SETA ST011" 502 | st018: "SETA ST018" 503 | slot: 504 | description: "Slot in cartridge" 505 | children: 506 | rj11: "RJ-11 port" 507 | jcart: "Codemasters J-Cart" 508 | lockon: "SEGA Sonic & Knuckles Lock-On Technology" 509 | kogame: "Sunsoft Kogame Cassette / 子ガメカセット" 510 | smartmedia: "Tokyo Electron SmartMedia Double Slot" 511 | led: 512 | description: "LED" 513 | gbkiss: 514 | description: "Hudson GB Kiss" 515 | pocketsonar: 516 | description: "Bandai Pocket Sonar" 517 | 518 | save: 519 | description: "The way you can save your progress" 520 | subtag: 521 | backup: "Memory backup" 522 | password: "Password" 523 | 524 | arcadeboard: 525 | description: "Arcade board" 526 | subtag: 527 | capcom: 528 | description: "CAPCOM board" 529 | children: 530 | cps: "CAPCOM CP System" 531 | cpsdash: "CAPCOM CP System Dash" 532 | cpschanger: "CAPCOM CP System Changer" 533 | cps2: "CAPCOM CP System II" 534 | cps3: "CAPCOM CP System III" 535 | sega: 536 | description: "SEGA board" 537 | children: 538 | vco: "SEGA VCO Object" 539 | system1: "SEGA System 1" 540 | system2: "SEGA System 2" 541 | system16: "SEGA System 16" 542 | system16a: "SEGA System 16A" 543 | system16b: "SEGA System 16B" 544 | system16c: "SEGA System 16C" 545 | system18: "SEGA System 18" 546 | system24: "SEGA System 24" 547 | system32: "SEGA System 32" 548 | multi32: "SEGA System Multi 32" 549 | systemc: "SEGA System C" 550 | systemc2: "SEGA System C-2" 551 | systeme: "SEGA System E" 552 | xboard: "SEGA X Board" 553 | yboard: "SEGA Y Board" 554 | stv: "SEGA Titan Video" 555 | irem: 556 | description: "Irem board" 557 | children: 558 | m10: "Irem M10" 559 | m15: "Irem M15" 560 | m27: "Irem M27" 561 | m52: "Irem M52" 562 | m57: "Irem M57" 563 | m58: "Irem M58" 564 | m62: "Irem M62" 565 | m63: "Irem M63" 566 | m72: "Irem M72" 567 | m75: "Irem M75" 568 | m77: "Irem M77" 569 | m81: "Irem M81" 570 | m82: "Irem M82" 571 | m84: "Irem M84" 572 | m85: "Irem M85" 573 | m90: "Irem M90" 574 | m92: "Irem M92" 575 | m97: "Irem M97" 576 | m107: "Irem M107" 577 | snk: 578 | description: "SNK board" 579 | children: 580 | mvs: "SNK Multi Video System / MVS" 581 | taito: 582 | description: "Taito board" 583 | children: 584 | xsystem: "Taito X System" 585 | bsystem: "Taito B System" 586 | hsystem: "Taito H System" 587 | lsystem: "Taito L System" 588 | zsystem: "Taito Z System" 589 | osystem: "Taito O System" 590 | f1system: "Taito F1 System / F2 System Extended" 591 | f2system: "Taito F2 System" 592 | f3system: "Taito F3 System" 593 | lgsystem: "Taito LG System" 594 | toaplan: 595 | description: "Toaplan board" 596 | children: 597 | version1: "Toaplan Version 1" 598 | version2: "Toaplan Version 2" 599 | jaleco: 600 | description: "Jaleco board" 601 | children: 602 | megasystem1: "Jaleco Mega System 1" 603 | 604 | compatibility: 605 | description: "System compatibility" 606 | subtag: 607 | sg1000: 608 | description: "SEGA SG-1000" 609 | children: 610 | sc3000: "SEGA SC-3000" 611 | othello: "Othello Multivision" 612 | mark3: 613 | description: "SEGA Mark III / master System" 614 | children: 615 | mycard: "SEGA My Card" 616 | epmycard: "SEGA EP My Card" 617 | thesegacard: "The SEGA Card" 618 | themegacartridge: "The Mega Cartridge (Japan)" 619 | silvercartridge: "Silver Cartridge" 620 | goldcartridge1: "Gold Cartridge (1 mega)" 621 | goldcartridge2: "Gold Cartridge (2 mega)" 622 | goldcartridge4: "Gold Cartridge (4 mega)" 623 | disksystem: 624 | description: "Famicom Disk System" 625 | children: 626 | dw: "Disk Writer" 627 | gameboy: 628 | description: "Nintendo GameBoy" 629 | children: 630 | mono: "Monochrome" 631 | color: "Color" 632 | sgb: "Super GameBoy" 633 | np: "Nintendo Power / ニンテンドウパワー / GB Memory Cartridge / GBメモリカートリッジ" 634 | superfamicom: 635 | description: "Nintendo Super Famicom / Super Nintendo Entertainment System / SNES" 636 | children: 637 | hirom: "HiROM" 638 | lorom: "LoROM" 639 | exhirom: "Extended HiROM" 640 | exlorom: "Extended LoRom" 641 | nss: "Nintendo Super System / NSS" 642 | soundlink: "SoundLink / サウンドリンクゲーム / VoiceLink / 音声連動ゲーム" 643 | np: "Nintendo Power / ニンテンドウパワー / SF Memory Cassette / SFメモリカセット" 644 | gs: "Nintendo Gateway System" 645 | pcengine: 646 | description: "NEC PC Engine" 647 | children: 648 | supergrafx: "PC SuperGrafx" 649 | neogeopocket: 650 | description: "NeoGeo Pocket" 651 | children: 652 | mono: "Monochrome" 653 | color: "Color" 654 | 655 | disc: 656 | description: "Disc Number" 657 | subtag: 658 | "1": "Disc 1" 659 | "2": "Disc 2" 660 | "3": "Disc 3" 661 | "4": "Disc 4" 662 | children: 663 | "2": "Two discs" 664 | "3": "Three discs" 665 | "4": "Four discs" 666 | 667 | based: 668 | description: "Coming from another media" 669 | subtag: 670 | manganime: 671 | description: "Manga and/or anime" 672 | movie: 673 | description: "Movie" 674 | disney: 675 | description: "Walt Disney" 676 | dnd: 677 | description: "Dungeons & Dragons" 678 | jurassicpark: 679 | description: "Jurassic Park" 680 | looneytunes: 681 | description: "Looney Tunes" 682 | marvel: 683 | description: "Marvel Comics" 684 | simpsons: 685 | description: "The Simpsons" 686 | smurfs: 687 | description: "The Smurfs / Les Schtroumpfs / Los Pitufos / Die Schlümpfe" 688 | starwars: 689 | description: "Star Wars" 690 | tmnt: 691 | description: "Teenage Mutant Ninja Turtles" 692 | 693 | search: 694 | description: "Keywords for searching" 695 | subtag: 696 | franchise: 697 | description: "Games that belong to the same game series" 698 | children: 699 | castlevania: "Castlevania / Akumajō Dracula / 悪魔城ドラキュラ" 700 | dragonslayer: "Dragon Slayer" 701 | wonderboy: "Wonder Boy" 702 | feature: 703 | description: "This character/s appear/s in this game" 704 | children: 705 | alien: "Alien xenomorph" 706 | asterix: "Astérix & Obélix" 707 | batman: "Batman" 708 | compatihero: "Compati Hero / コンパチヒーロー" 709 | dracula: "Dracula" 710 | donald: "Donald Duck" 711 | gundam: "Gundam / ガンダム" 712 | kuniokun: "Kunio-kun / くにおくん" 713 | mario: "Mario / マリオ" 714 | mickey: "Mickey Mouse" 715 | pacman: "Pac-Man / パックマン" 716 | sherlock: "Sherlock Holmes" 717 | sonic: "Sonic The Hedgehog / ソニック・ザ・ヘッジホッグ" 718 | spiderman: "Spider-Man" 719 | superman: "Superman" 720 | xmen: "X-Men" 721 | tate: 722 | description: "Vertical screen orientation" 723 | children: 724 | cw: "Clockwise" 725 | ccw: "Counter clockwise" 726 | 3d: 727 | description: "Game uses some kind of 3D effect" 728 | children: 729 | stereo: "Stereoscopic 3D" 730 | anaglyph: "Anaglyph 3D" 731 | keyword: 732 | description: "Other specific game features" 733 | children: 734 | strip: "Stripped girls as a stage clear reward" 735 | promo: "Promotional not-for-sale limited product" 736 | qsound: "QSound support" 737 | dolby: "Dolby Surround" 738 | rs: "Response Sound System / レスポンス サウンド システム / RS" 739 | official: "Official sports game" 740 | endorsed: "Endorsed by public figure" 741 | brand: "Endorsed by company or brand" 742 | 743 | multigame: 744 | description: "Various games in one title" 745 | subtag: 746 | compilation: 747 | description: "Compilation of previously released games" 748 | 749 | reboxed: 750 | description: "Reboxed" 751 | subtag: 752 | bios: 753 | description: "BIOS included game" 754 | bluebox: 755 | description: "Blue Box" 756 | purplebox: 757 | description: "Purple Box" 758 | classicedition: 759 | description: "Classic Edition" 760 | segaclassic: 761 | description: "SEGA Classic" 762 | kixxedition: 763 | description: "Kixx Edition" 764 | megadrive3: 765 | description: "Tec Toy MegaDrive 3" 766 | megadrive4: 767 | description: "Tec Toy MegaDrive 4" 768 | reactor: 769 | description: "AtGames Reactor" 770 | gopher: 771 | description: "AtGames Gopher" 772 | meisaku: 773 | description: "Meisaku Collection" 774 | majesco: 775 | description: "Majesco" 776 | megahit: 777 | description: "Mega Hit Series" 778 | konamiclassics: 779 | description: "Konami Classics" 780 | eaclassics: 781 | description: "Console Classics" 782 | videogameclassics: 783 | description: "Accolade Video Game Classics" 784 | gamenokanzume: 785 | description: "Game no Kanzume Otokuyō / ゲームのかんづめ お徳用" 786 | soundware: 787 | description: "Koei SoundWare audio CD" 788 | playerschoice: 789 | description: "Players Choice / Million Seller" 790 | classicserie: 791 | description: "Nintendo Classic Serie" 792 | kousenjuu: 793 | description: "Kōsenjū Series / 光線銃シリーズ" 794 | disneysclassic: 795 | description: "Disney's Classic Video Games" 796 | snkbestcollection: 797 | description: "Best Collection" 798 | xeye: 799 | description: "JVC X'Eye" 800 | limitedrun: 801 | description: "Limited Run" 802 | famicombox: 803 | description: "Nintendo FamicomBox" 804 | 805 | port: 806 | description: "Port, remaster, remake or conversion from another system" 807 | subtag: 808 | arcade: 809 | description: "Arcade" 810 | commodore: 811 | description: "Commodore" 812 | children: 813 | c64: "Commodore 64 / C64" 814 | amiga: "Amiga" 815 | apple: 816 | description: "Apple" 817 | children: 818 | apple2: "Apple II" 819 | mac: "Macintosh" 820 | bbcmicro: 821 | description: "Acorn BBC Micro" 822 | dragon32: 823 | description: "Dragon 32" 824 | elektronika60: 825 | description: "Elektronika 60 / Электроника 60" 826 | spectrum: 827 | description: "Sinclair ZX Spectrum" 828 | atari: 829 | description: "Atari" 830 | children: 831 | atari400: "Atari 400" 832 | atarist: "Atari ST" 833 | atari2600: "Atari 2600" 834 | lynx: "Lynx" 835 | nec: 836 | description: "NEC / Nippon Electric Company" 837 | children: 838 | pc88: "PC-8801" 839 | pc98: "PC-9801" 840 | pcengine: "PC Engine / PCエンジン / TurboGrafx / TurboGrafx-16" 841 | cdromrom: "CD-ROM² / シーディーロムロム / TurboGrafx-CD" 842 | msx: 843 | description: "MSX" 844 | children: 845 | "2": "MSX2" 846 | sharp: 847 | description: "Sharp" 848 | children: 849 | x1: "Sharp X1" 850 | mz700: "Sharp MZ" 851 | x68000: "X68000" 852 | pc: 853 | description: "PC DOS" 854 | sega: 855 | description: "SEGA / セガ" 856 | children: 857 | sg1000: "SG-1000" 858 | mark3: "Mark III / マークIII / Master System / マスターシステム" 859 | gamegear: "Game Gear / ゲームギア" 860 | megadrive: "MegaDrive / メガドライブ / Genesis" 861 | megacd: "SEGA Mega-CD / メガシーディー / SEGA-CD" 862 | saturn: "SEGA Saturn / セガサターン" 863 | dreamcast: "Dreamcast / ドリームキャスト" 864 | nintendo: 865 | description: "Nintendo / 任天堂" 866 | children: 867 | famicom: "Famicom / Family Computer / ファミリーコンピュータ / Nintendo Entertainment System / NES" 868 | superfamicom: "Super Famicom / スーパーファミコン / Super Nintendo Entertainment System / SNES" 869 | gameboy: "GameBoy / ゲームボーイ" 870 | gbc: "GameBoy Color / ゲームボーイカラー" 871 | gba: "GameBoy Advance / ゲームボーイアドバンス / GBA" 872 | sony: 873 | description: "Sony / ソニー" 874 | children: 875 | playstation: "PlayStation / プレイステーション" 876 | 3do: 877 | description: "Panasonic 3DO / スリーディーオー" 878 | laseractive: 879 | description: "Pioneer LaserActive / レーザーアクティブ" 880 | fmtowns: 881 | description: "Fujitsu FM Towns / エフエムタウンズ" 882 | 883 | lang: 884 | description: "Language" 885 | subtag: 886 | en: 887 | description: "English" 888 | es: 889 | description: "Spanish / Español" 890 | fr: 891 | description: "French / Français" 892 | pt: 893 | description: "Portuguese / Português" 894 | de: 895 | description: "German / Deutsch" 896 | it: 897 | description: "Italian / Italiano" 898 | sv: 899 | description: "Swedish / Svenska" 900 | nl: 901 | description: "Dutch / Nederlands" 902 | da: 903 | description: "Danish / Dansk" 904 | "no": 905 | description: "Norwegian / Norsk" 906 | fi: 907 | description: "Finnish / Suomi" 908 | cs: 909 | description: "Czech / Čeština" 910 | sl: 911 | description: "Slovenian / Slovenščina" 912 | ru: 913 | description: "Russian / Русский" 914 | ja: 915 | description: "Japanese / 日本語" 916 | zh: 917 | description: "Simplified Chinese / 汉语" 918 | ch: 919 | description: "Chinese / 漢語" 920 | ko: 921 | description: "Korean / 한국어" 922 | fremen: 923 | description: "Fremen" 924 | 925 | unfinished: 926 | description: "Unfinished game" 927 | subtag: 928 | beta: 929 | description: "Beta" 930 | children: 931 | "1": "Beta 1" 932 | "2": "Beta 2" 933 | "3": "Beta 3" 934 | "4": "Beta 4" 935 | "5": "Beta 5" 936 | proto: 937 | description: "Prototype" 938 | children: 939 | "1": "Proto 1" 940 | "2": "Proto 2" 941 | "3": "Proto 3" 942 | "4": "Proto 4" 943 | demo: 944 | description: "Demo" 945 | children: 946 | "1": "Demo 1" 947 | "2": "Demo 2" 948 | auto: "Automatic" 949 | kiosk: "Kiosk" 950 | sample: 951 | description: "Sample" 952 | debug: 953 | description: "Debug" 954 | competition: 955 | description: "Competition" 956 | 957 | rerelease: 958 | description: "Re-released games in another system" 959 | subtag: 960 | virtualconsole: 961 | description: "Nintendo Virtual Console" 962 | children: 963 | wii: "Nintendo Wii Virtual Console" 964 | wiiu: "Nintendo Wii-U Virtual Console" 965 | 3ds: "Nintendo 3DS Virtual Console" 966 | switchonline: 967 | description: "Nintendo Switch Online" 968 | ereader: 969 | description: "Nintendo e-Reader" 970 | animalcrossing: 971 | description: "Nintendo Dōbutsu no Mori+ / どうぶつの森+ / Animal Crossing" 972 | capcomtown: 973 | description: "CAPCOM Town" 974 | namcoanthology: 975 | description: "NAMCO Anthology" 976 | children: 977 | "1": "NAMCO Anthology 1" 978 | "2": "NAMCO Anthology 2" 979 | namcot: 980 | description: "NAMCOT Collection / ナムコットコレクション" 981 | children: 982 | "1": "NAMCO Museum Archives Volume 1" 983 | "2": "NAMCO Museum Archives Volume 2" 984 | castlevaniaanniversary: 985 | description: "Akumajō Dracula Anniversary Collection / 悪魔城ドラキュラ Anniversary Collection / Castlevania Anniversary Collection" 986 | castlevaniaadvance: 987 | description: "Castlevania Advance Collection" 988 | contraanniversary: 989 | description: "Contra Anniversary Collection / 魂斗羅 Anniversary Collection" 990 | cowabunga: 991 | description: "Teenage Mutant Ninja Turtles: The Cowabunga Collection" 992 | dariuscozmic: 993 | description: "Darius Cozmic Collection" 994 | rockmanclassic: 995 | description: "Rockman Classic Collection / ロックマン クラシックス コレクション / Megaman Legacy Collection" 996 | children: 997 | "1": "Rockman Classic Collection / ロックマン クラシックス コレクション / Megaman Legacy Collection" 998 | "2": "Rockman Classic Collection 2 / ロックマン クラシックス コレクション 2 / Megaman Legacy Collection 2" 999 | "x": "Rockman X Anniversary Collection / ロックマンX アニバーサリー コレクション / Megaman X Legacy Collection" 1000 | "x2": "Rockman X Anniversary Collection 2 / ロックマンX アニバーサリー コレクション 2 / Megaman X Legacy Collection 2" 1001 | seikendensetsu: "Seiken Densetsu Collection / 聖剣伝説 Collection / Collection of Mana" 1002 | disneyclassic: 1003 | description: "Disney Classic Games Collection" 1004 | bubsytwofur: 1005 | description: "Bubsy Two-Fur" 1006 | blizzardarcadecollection: 1007 | description: "Blizzard Arcade Collection" 1008 | qubyte: 1009 | description: "QUByte Classics" 1010 | limitedrun: 1011 | description: "Limited Run Games" 1012 | iam8bit: 1013 | description: "iam8bit" 1014 | sonicclassic: 1015 | description: "Sonic Classic Collection" 1016 | sonicmegacollection: 1017 | description: "Sonic Mega Collection / Sonic Mega Collection+" 1018 | mdclassics: 1019 | description: "SEGA MegaDrive Classics / SEGA Genesis Classics" 1020 | smashpack: 1021 | description: "SEGA Smash Pack" 1022 | segaages: 1023 | description: "SEGA Ages" 1024 | children: 1025 | "2500": "SEGA Ages 2500" 1026 | 3dfukkoku: 1027 | description: "SEGA 3D Fukkoku Archives / セガ3D復刻アーカイブス / SEGA 3D Classics Collection" 1028 | mdmini: 1029 | description: "SEGA MegaDrive Mini / SEGA Genesis Mini" 1030 | children: 1031 | "1": "SEGA MegaDrive Mini / SEGA Genesis Mini" 1032 | "2": "SEGA MegaDrive Mini 2 / SEGA Genesis Mini 2" 1033 | sfcmini: 1034 | description: "Nintendo Super Famicom Classic Mini / スーパーファミコン クラシックミニ / Super Nintendo Entertainment System Classic Mini" 1035 | gamenokanzume: 1036 | description: "Game no Kanzume / ゲームのかんづめ" 1037 | children: 1038 | "1": "Game no Kanzume Vol.1 / ゲームのかんづめ Vol.1" 1039 | "2": "Game no Kanzume Vol.2 / ゲームのかんづめ Vol.2" 1040 | 1041 | rev: 1042 | description: "Revision" 1043 | subtag: 1044 | "1": 1045 | description: "Revision 1" 1046 | "2": 1047 | description: "Revision 2" 1048 | "3": 1049 | description: "Revision 3" 1050 | "4": 1051 | description: "Revision 4" 1052 | a: 1053 | description: "Revision A" 1054 | b: 1055 | description: "Revision B" 1056 | c: 1057 | description: "Revision C" 1058 | d: 1059 | description: "Revision D" 1060 | e: 1061 | description: "Revision E" 1062 | g: 1063 | description: "Revision G" 1064 | 1065 | set: 1066 | description: "Set" 1067 | subtag: 1068 | "1": 1069 | description: "Set 1" 1070 | "2": 1071 | description: "Set 2" 1072 | "3": 1073 | description: "Set 3" 1074 | "4": 1075 | description: "Set 4" 1076 | "5": 1077 | description: "Set 5" 1078 | "6": 1079 | description: "Set 6" 1080 | "7": 1081 | description: "Set 7" 1082 | "8": 1083 | description: "Set 8" 1084 | 1085 | alt: 1086 | description: "Alternative rip" 1087 | subtag: 1088 | "1": 1089 | description: "Alternative 1" 1090 | "2": 1091 | description: "Alternative 2" 1092 | "3": 1093 | description: "Alternative 3" 1094 | 1095 | unlicensed: 1096 | description: "Unlicensed game" 1097 | subtag: 1098 | bootleg: "Bootleg/pirated game" 1099 | hack: "Hacked game" 1100 | clone: "Cloned game" 1101 | translation: "Translation" 1102 | aftermarket: "Made after original market cycle" 1103 | 1104 | mameparent: 1105 | description: "MAME parent file" 1106 | 1107 | tag_structure: 1108 | symbols: 1109 | main: '#' 1110 | subtag: ':' 1111 | children: '>' 1112 | --------------------------------------------------------------------------------