diff --git a/backend/adapters/services/rahasher.py b/backend/adapters/services/rahasher.py
index c52aa2c1a..44adbb41a 100644
--- a/backend/adapters/services/rahasher.py
+++ b/backend/adapters/services/rahasher.py
@@ -15,7 +15,7 @@ PLATFORM_SLUG_TO_RETROACHIEVEMENTS_ID: dict[UPS, int] = {
UPS.ARCADE: 27,
UPS.ARCADIA_2001: 73,
UPS.ARDUBOY: 71,
- UPS.ATARI_JAGUAR_CD: 77,
+ UPS.JAGUAR_CD: 77,
UPS.ATARI2600: 25,
UPS.ATARI7800: 51,
UPS.COLECOVISION: 44,
diff --git a/backend/alembic/versions/0057_add_giantbomb_metadata.py b/backend/alembic/versions/0057_add_giantbomb_metadata.py
new file mode 100644
index 000000000..0308b84ba
--- /dev/null
+++ b/backend/alembic/versions/0057_add_giantbomb_metadata.py
@@ -0,0 +1,41 @@
+"""empty message
+Revision ID: 0057_add_giantbomb_metadata
+Revises: 0056_gamelist_xml
+Create Date: 2025-09-19 21:37:14.878761
+"""
+
+import sqlalchemy as sa
+from alembic import op
+from sqlalchemy.dialects import postgresql
+
+# revision identifiers, used by Alembic.
+revision = "0057_add_giantbomb_metadata"
+down_revision = "0056_gamelist_xml"
+branch_labels = None
+depends_on = None
+
+
+def upgrade() -> None:
+ with op.batch_alter_table("platforms", schema=None) as batch_op:
+ batch_op.add_column(sa.Column("giantbomb_id", sa.Integer(), nullable=True))
+ with op.batch_alter_table("roms", schema=None) as batch_op:
+ batch_op.add_column(sa.Column("giantbomb_id", sa.Integer(), nullable=True))
+ batch_op.add_column(
+ sa.Column(
+ "giantbomb_metadata",
+ sa.JSON().with_variant(
+ postgresql.JSONB(astext_type=sa.Text()), "postgresql"
+ ),
+ nullable=True,
+ )
+ )
+ batch_op.create_index("idx_roms_giantbomb_id", ["giantbomb_id"], unique=False)
+
+
+def downgrade() -> None:
+ with op.batch_alter_table("roms", schema=None) as batch_op:
+ batch_op.drop_index("idx_roms_giantbomb_id")
+ batch_op.drop_column("giantbomb_metadata")
+ batch_op.drop_column("giantbomb_id")
+ with op.batch_alter_table("platforms", schema=None) as batch_op:
+ batch_op.drop_column("giantbomb_id")
diff --git a/backend/config/__init__.py b/backend/config/__init__.py
index 2fca3cb0d..85463cf7e 100644
--- a/backend/config/__init__.py
+++ b/backend/config/__init__.py
@@ -108,6 +108,9 @@ FLASHPOINT_API_ENABLED: Final[bool] = safe_str_to_bool(
# HOWLONGTOBEAT
HLTB_API_ENABLED: Final[bool] = safe_str_to_bool(_get_env("HLTB_API_ENABLED"))
+# GIANTBOMB
+GIANTBOMB_API_ENABLED: Final = safe_str_to_bool(_get_env("GIANTBOMB_API_ENABLED"))
+
# AUTH
ROMM_AUTH_SECRET_KEY: Final[str | None] = _get_env("ROMM_AUTH_SECRET_KEY")
if not ROMM_AUTH_SECRET_KEY:
@@ -153,7 +156,8 @@ ENABLE_RESCAN_ON_FILESYSTEM_CHANGE: Final[bool] = safe_str_to_bool(
_get_env("ENABLE_RESCAN_ON_FILESYSTEM_CHANGE")
)
RESCAN_ON_FILESYSTEM_CHANGE_DELAY: Final[int] = safe_int(
- _get_env("RESCAN_ON_FILESYSTEM_CHANGE_DELAY"), 5 # 5 minutes
+ _get_env("RESCAN_ON_FILESYSTEM_CHANGE_DELAY"),
+ 5, # 5 minutes
)
ENABLE_SCHEDULED_RESCAN: Final[bool] = safe_str_to_bool(
_get_env("ENABLE_SCHEDULED_RESCAN")
diff --git a/backend/endpoints/heartbeat.py b/backend/endpoints/heartbeat.py
index dc34e8dc6..0bb69a4f1 100644
--- a/backend/endpoints/heartbeat.py
+++ b/backend/endpoints/heartbeat.py
@@ -24,6 +24,7 @@ from handler.filesystem import fs_platform_handler
from handler.metadata import (
meta_flashpoint_handler,
meta_gamelist_handler,
+ meta_giantbomb_handler,
meta_hasheous_handler,
meta_hltb_handler,
meta_igdb_handler,
@@ -62,6 +63,7 @@ async def heartbeat() -> HeartbeatResponse:
playmatch_enabled = meta_playmatch_handler.is_enabled()
hltb_enabled = meta_hltb_handler.is_enabled()
tgdb_enabled = meta_tgdb_handler.is_enabled()
+ giantbomb_enabled = meta_giantbomb_handler.is_enabled()
return {
"SYSTEM": {
@@ -80,6 +82,7 @@ async def heartbeat() -> HeartbeatResponse:
or tgdb_enabled
or flashpoint_enabled
or hltb_enabled
+ or giantbomb_enabled
),
"IGDB_API_ENABLED": igdb_enabled,
"SS_API_ENABLED": ss_enabled,
@@ -92,6 +95,7 @@ async def heartbeat() -> HeartbeatResponse:
"TGDB_API_ENABLED": tgdb_enabled,
"FLASHPOINT_API_ENABLED": flashpoint_enabled,
"HLTB_API_ENABLED": hltb_enabled,
+ "GIANTBOMB_API_ENABLED": giantbomb_enabled,
},
"FILESYSTEM": {
"FS_PLATFORMS": await fs_platform_handler.get_platforms(),
@@ -153,5 +157,7 @@ async def metadata_heartbeat(source: str) -> bool:
return await meta_hltb_handler.heartbeat()
case MetadataSource.GAMELIST:
return await meta_gamelist_handler.heartbeat()
+ case MetadataSource.GIANTBOMB:
+ return await meta_giantbomb_handler.heartbeat()
case _:
return False
diff --git a/backend/endpoints/responses/heartbeat.py b/backend/endpoints/responses/heartbeat.py
index 924ccc3b0..a806bc16c 100644
--- a/backend/endpoints/responses/heartbeat.py
+++ b/backend/endpoints/responses/heartbeat.py
@@ -19,6 +19,7 @@ class MetadataSourcesDict(TypedDict):
TGDB_API_ENABLED: bool
FLASHPOINT_API_ENABLED: bool
HLTB_API_ENABLED: bool
+ GIANTBOMB_API_ENABLED: bool
class FilesystemDict(TypedDict):
diff --git a/backend/endpoints/responses/platform.py b/backend/endpoints/responses/platform.py
index 3da40f93d..474ba7cff 100644
--- a/backend/endpoints/responses/platform.py
+++ b/backend/endpoints/responses/platform.py
@@ -17,6 +17,7 @@ class PlatformSchema(BaseModel):
igdb_slug: str | None
moby_slug: str | None
hltb_slug: str | None
+ giantbomb_slug: str | None = None
custom_name: str | None = None
igdb_id: int | None = None
sgdb_id: int | None = None
@@ -27,6 +28,7 @@ class PlatformSchema(BaseModel):
hasheous_id: int | None = None
tgdb_id: int | None = None
flashpoint_id: int | None = None
+ giantbomb_id: int | None = None
category: str | None = None
generation: int | None = None
family_name: str | None = None
diff --git a/backend/endpoints/responses/rom.py b/backend/endpoints/responses/rom.py
index 169c46e24..b44404786 100644
--- a/backend/endpoints/responses/rom.py
+++ b/backend/endpoints/responses/rom.py
@@ -10,6 +10,7 @@ from pydantic import Field, computed_field, field_validator
from endpoints.responses.assets import SaveSchema, ScreenshotSchema, StateSchema
from handler.metadata.flashpoint_handler import FlashpointMetadata
from handler.metadata.gamelist_handler import GamelistMetadata
+from handler.metadata.giantbomb_handler import GiantBombMetadata
from handler.metadata.hasheous_handler import HasheousMetadata
from handler.metadata.hltb_handler import HLTBMetadata
from handler.metadata.igdb_handler import IGDBMetadata
@@ -69,6 +70,11 @@ RomGamelistMetadata = TypedDict( # type: ignore[misc]
{k: NotRequired[v] for k, v in get_type_hints(GamelistMetadata).items()}, # type: ignore[misc]
total=False,
)
+RomGiantBombMetadata = TypedDict( # type: ignore[misc]
+ "RomGiantBombMetadata",
+ {k: NotRequired[v] for k, v in get_type_hints(GiantBombMetadata).items()}, # type: ignore[misc]
+ total=False,
+)
def rom_user_schema_factory() -> RomUserSchema:
@@ -210,6 +216,7 @@ class RomSchema(BaseModel):
flashpoint_id: str | None
hltb_id: int | None
gamelist_id: str | None
+ giantbomb_id: int | None
platform_id: int
platform_slug: str
@@ -240,6 +247,7 @@ class RomSchema(BaseModel):
flashpoint_metadata: RomFlashpointMetadata | None
hltb_metadata: RomHLTBMetadata | None
gamelist_metadata: RomGamelistMetadata | None
+ giantbomb_metadata: RomGiantBombMetadata | None
path_cover_small: str | None
path_cover_large: str | None
diff --git a/backend/handler/database/roms_handler.py b/backend/handler/database/roms_handler.py
index 854dd9eef..0984ba415 100644
--- a/backend/handler/database/roms_handler.py
+++ b/backend/handler/database/roms_handler.py
@@ -240,6 +240,7 @@ class DBRomsHandler(DBBaseHandler):
Rom.hasheous_id.isnot(None),
Rom.tgdb_id.isnot(None),
Rom.flashpoint_id.isnot(None),
+ Rom.giantbomb_id.isnot(None),
)
if not value:
predicate = not_(predicate)
@@ -465,6 +466,7 @@ class DBRomsHandler(DBBaseHandler):
base_subquery.c.launchbox_id,
base_subquery.c.tgdb_id,
base_subquery.c.flashpoint_id,
+ base_subquery.c.giantbomb_id,
)
.outerjoin(
RomUser,
@@ -516,6 +518,11 @@ class DBRomsHandler(DBBaseHandler):
base_subquery.c.flashpoint_id,
base_subquery.c.platform_id,
),
+ _create_metadata_id_case(
+ MetadataSource.GIANTBOMB,
+ base_subquery.c.giantbomb_id,
+ base_subquery.c.platform_id,
+ ),
_create_metadata_id_case(
"romm",
base_subquery.c.id,
diff --git a/backend/handler/metadata/__init__.py b/backend/handler/metadata/__init__.py
index f09657f25..470f527bf 100644
--- a/backend/handler/metadata/__init__.py
+++ b/backend/handler/metadata/__init__.py
@@ -1,5 +1,6 @@
from .flashpoint_handler import FlashpointHandler
from .gamelist_handler import GamelistHandler
+from .giantbomb_handler import GiantBombHandler
from .hasheous_handler import HasheousHandler
from .hltb_handler import HLTBHandler
from .igdb_handler import IGDBHandler
@@ -23,3 +24,4 @@ meta_tgdb_handler = TGDBHandler()
meta_flashpoint_handler = FlashpointHandler()
meta_gamelist_handler = GamelistHandler()
meta_hltb_handler = HLTBHandler()
+meta_giantbomb_handler = GiantBombHandler()
diff --git a/backend/handler/metadata/base_handler.py b/backend/handler/metadata/base_handler.py
index 9602bd02c..6fb95c18c 100644
--- a/backend/handler/metadata/base_handler.py
+++ b/backend/handler/metadata/base_handler.py
@@ -304,7 +304,7 @@ class UniversalPlatformSlug(enum.StrEnum):
ARDUBOY = "arduboy"
ASTRAL_2000 = "astral-2000"
ASTROCADE = "astrocade"
- ATARI_JAGUAR_CD = "atari-jaguar-cd"
+ JAGUAR_CD = "atari-jaguar-cd"
ATARI_ST = "atari-st"
ATARI_VCS = "atari-vcs"
ATARI_XEGS = "atari-xegs"
@@ -371,6 +371,7 @@ class UniversalPlatformSlug(enum.StrEnum):
DC = "dc"
DEDICATED_CONSOLE = "dedicated-console"
DEDICATED_HANDHELD = "dedicated-handheld"
+ DENSHI_MANGAJUKU = "denshi-mangajuku"
DIDJ = "didj"
DIGIBLAST = "digiblast"
DOJA = "doja"
@@ -406,6 +407,8 @@ class UniversalPlatformSlug(enum.StrEnum):
GAME_WAVE = "game-wave"
GAMEGEAR = "gamegear"
GAMESTICK = "gamestick"
+ GAMEKING = "gameking"
+ GAMEKINGIII = "gamekingiii"
GB = "gb"
GBA = "gba"
GBC = "gbc"
@@ -421,6 +424,7 @@ class UniversalPlatformSlug(enum.StrEnum):
GP32 = "gp32"
GT40 = "gt40"
GVM = "gvm"
+ HALCYON = "halcyon"
HANDHELD_ELECTRONIC_LCD = "handheld-electronic-lcd"
HARTUNG = "hartung"
HD_DVD_PLAYER = "hd-dvd-player"
@@ -472,6 +476,7 @@ class UniversalPlatformSlug(enum.StrEnum):
LYNX = "lynx"
MAC = "mac"
MAEMO = "maemo"
+ MAGIC_LEAP_ONE = "magic-leap-one"
MAINFRAME = "mainframe"
MATSUSHITAPANASONIC_JR = "matsushitapanasonic-jr"
MEEGO = "meego"
@@ -489,6 +494,7 @@ class UniversalPlatformSlug(enum.StrEnum):
MODEL1 = "model1"
MODEL2 = "model2"
MODEL3 = "model3"
+ MONON_COLOR = "monon-color"
MOPHUN = "mophun"
MOS_TECHNOLOGY_6502 = "mos-technology-6502"
MOTOROLA_6800 = "motorola-6800"
@@ -500,6 +506,7 @@ class UniversalPlatformSlug(enum.StrEnum):
MSX2PLUS = "msx2plus"
MTX512 = "mtx512"
MUGEN = "mugen"
+ MULTI_8 = "multi-8"
MULTIVISION = "multivision"
N3DS = "3ds"
N64 = "n64"
@@ -592,6 +599,7 @@ class UniversalPlatformSlug(enum.StrEnum):
RCA_STUDIO_II = "rca-studio-ii"
RESEARCH_MACHINES_380Z = "research-machines-380z"
ROKU = "roku"
+ RX_78 = "rx-78"
SAM_COUPE = "sam-coupe"
SATELLAVIEW = "satellaview"
SATURN = "saturn"
@@ -604,6 +612,7 @@ class UniversalPlatformSlug(enum.StrEnum):
SEGA32 = "sega32"
SEGACD = "segacd"
SEGACD32 = "segacd32"
+ SELECT_A_GAME = "select-a-game"
SERIES_X_S = "series-x-s"
SFAM = "sfam"
SG1000 = "sg1000"
@@ -615,6 +624,7 @@ class UniversalPlatformSlug(enum.StrEnum):
SIGNETICS_2650 = "signetics-2650"
SINCLAIR_QL = "sinclair-ql"
SK_VM = "sk-vm"
+ SMAKY = "smaky"
SMC_777 = "smc-777"
SMS = "sms"
SNES = "snes"
@@ -625,6 +635,7 @@ class UniversalPlatformSlug(enum.StrEnum):
SRI_5001000 = "sri-5001000"
STADIA = "stadia"
STEAM_VR = "steam-vr"
+ STREAMING = "streaming"
STV = "stv"
SUFAMI_TURBO = "sufami-turbo"
SUPER_ACAN = "super-acan"
@@ -673,6 +684,7 @@ class UniversalPlatformSlug(enum.StrEnum):
TRS_80_MC_10 = "trs-80-mc-10"
TRS_80_MODEL_100 = "trs-80-model-100"
TURBOGRAFX_CD = "turbografx-cd"
+ TVBOY = "tvboy"
TVOS = "tvos"
TYPE_X = "type-x"
UZEBOX = "uzebox"
@@ -685,6 +697,7 @@ class UniversalPlatformSlug(enum.StrEnum):
VIC_20 = "vic-20"
VIDEOBRAIN = "videobrain"
VIDEOPAC_G7400 = "videopac-g7400"
+ VIEW_MASTER = "view-master"
VIRTUALBOY = "virtualboy"
VIS = "vis"
VISIONOS = "visionos"
diff --git a/backend/handler/metadata/giantbomb_handler.py b/backend/handler/metadata/giantbomb_handler.py
new file mode 100644
index 000000000..0ff8e6004
--- /dev/null
+++ b/backend/handler/metadata/giantbomb_handler.py
@@ -0,0 +1,1631 @@
+from typing import NotRequired, TypedDict
+
+from config import GIANTBOMB_API_ENABLED
+
+from .base_handler import MetadataHandler
+from .base_handler import UniversalPlatformSlug as UPS
+
+
+class GiantBombPlatform(TypedDict):
+ slug: str
+ giantbomb_id: int | None
+ giantbomb_slug: NotRequired[str]
+ name: NotRequired[str]
+ description: NotRequired[str]
+ url: NotRequired[str]
+ url_logo: NotRequired[str]
+
+
+class GiantBombMetadata(TypedDict):
+ guid: str
+ alternative_names: list[str]
+ deck: str
+ description: str
+ first_release_date: str
+ image: dict
+ age_ratings: list[str]
+ site_url: str
+
+
+class GiantBombHandler(MetadataHandler):
+ """Handler for Giant Bomb metadata."""
+
+ def __init__(self) -> None:
+ pass
+
+ @classmethod
+ def is_enabled(cls) -> bool:
+ return GIANTBOMB_API_ENABLED
+
+ async def heartbeat(self) -> bool:
+ return self.is_enabled()
+
+ def get_platform(self, slug: str) -> GiantBombPlatform:
+ if slug not in GIANTBOMB_PLATFORM_LIST:
+ return GiantBombPlatform(giantbomb_id=None, slug=slug)
+
+ platform = GIANTBOMB_PLATFORM_LIST[UPS(slug)]
+
+ return GiantBombPlatform(
+ slug=slug,
+ giantbomb_id=platform["id"],
+ giantbomb_slug=platform["slug"],
+ name=platform["title"],
+ description=platform["description"],
+ url=platform["url"],
+ url_logo=platform["url_logo"],
+ )
+
+
+class SlugToGiantBombPlatform(TypedDict):
+ id: int
+ slug: str
+ title: str
+ description: str
+ url: str
+ url_logo: str
+
+
+GIANTBOMB_PLATFORM_LIST: dict[UPS, SlugToGiantBombPlatform] = {
+ UPS._3DO: {
+ "id": 26,
+ "slug": "3do",
+ "title": "3DO",
+ "description": "3DO was a video game console manufactured by Panasonic, Goldstar, and Sanyo. Despite the initial hype surrounding the system, the console's $700 price tag proved to be the ultimate kiss of death for the system.",
+ "url": "https://www.giantbomb.com/3do/3045-26/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/1/12419/254585-3do_fz1.jpg",
+ },
+ UPS.N3DS: {
+ "id": 117,
+ "slug": "nintendo-3ds",
+ "title": "Nintendo 3DS",
+ "description": "The Nintendo 3DS is a portable game console produced by Nintendo. The handheld features stereoscopic 3D technology that doesn't require glasses. It was released in Japan on February 26, 2011 and in North America on March 27, 2011.",
+ "url": "https://www.giantbomb.com/nintendo-3ds/3045-117/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/5150/1686079-3dshw11911.jpg",
+ },
+ UPS.N64DD: {
+ "id": 101,
+ "slug": "nintendo-64dd",
+ "title": "Nintendo 64DD",
+ "description": "The Nintendo 64 Disk Drive was an expansion for the Nintendo 64 allowing the use of magnetic disks that offered greater storage capacity and the ability to be written to.",
+ "url": "https://www.giantbomb.com/nintendo-64dd/3045-101/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/9566/394176-n64_disc_drive.jpg",
+ },
+ UPS.ABC_80: {
+ "id": 170,
+ "slug": "luxor-abc80",
+ "title": "Luxor ABC 80",
+ "description": "The Advanced BASIC Computer line was created in 1978 with the release of the ABC 80, a joint venture between Luxor AB, DIAB and Scandia Metric.",
+ "url": "https://www.giantbomb.com/luxor-abc80/3045-170/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2975830-1340529857-Luxor.jpg",
+ },
+ UPS.ACORN_ARCHIMEDES: {
+ "id": 125,
+ "slug": "acorn-archimedes",
+ "title": "Acorn Archimedes",
+ "description": "The Acorn Archimedes was a range of personal computers from Acorn Computers aimed at both educational and home use. It featured a 32-bit ARM processor and the RISC OS operating system.",
+ "url": "https://www.giantbomb.com/acorn-archimedes/3045-125/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/1529461-acorna30002.jpg",
+ },
+ UPS.ACPC: {
+ "id": 11,
+ "slug": "amstrad-cpc",
+ "title": "Amstrad CPC",
+ "description": "The Amstrad CPC (Colour Personal Computer) was a series of 8-bit personal computers developed by Amstrad between 1984 and 1990. During its lifetime, approximately 3 million CPCs were sold.",
+ "url": "https://www.giantbomb.com/amstrad-cpc/3045-11/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10073-Amstrad_CPC464.jpg",
+ },
+ UPS.ACTION_MAX: {
+ "id": 148,
+ "slug": "action-max",
+ "title": "Action Max",
+ "description": "Worlds of Wonder created this VCR-based console in 1987.",
+ "url": "https://www.giantbomb.com/action-max/3045-148/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954575-action-max-set-fl.jpg",
+ },
+ UPS.ADVANCED_PICO_BEENA: {
+ "id": 174,
+ "slug": "advanced-pico-beena",
+ "title": "Advanced Pico Beena",
+ "description": "SegaToys launched this successor to the kid-focused Pico console in 2005. A lower-priced model called the BeenaLite followed in 2008, but neither was released outside Japan.",
+ "url": "https://www.giantbomb.com/advanced-pico-beena/3045-174/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/3061845-8449526446-Advan.jpg",
+ },
+ UPS.ADVENTURE_VISION: {
+ "id": 93,
+ "slug": "adventure-vision",
+ "title": "Adventure Vision",
+ "description": "The Adventure Vision is a handheld video game console developed by Entex Industries in 1982.",
+ "url": "https://www.giantbomb.com/adventure-vision/3045-93/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/46/1248213-adventurevision.jpg",
+ },
+ UPS.AMAZON_ALEXA: {
+ "id": 172,
+ "slug": "amazon-alexa",
+ "title": "Amazon Alexa",
+ "description": "Amazon Alexa is a virtual assistant that reacts to voice commands.",
+ "url": "https://www.giantbomb.com/amazon-alexa/3045-172/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3028557-51tfnr7atgl._sy300_ql70_.jpg",
+ },
+ UPS.AMAZON_FIRE_TV: {
+ "id": 158,
+ "slug": "amazon-fire-tv",
+ "title": "Amazon Fire TV",
+ "description": "Amazon Fire TV is a streaming device that allows users to stream content from the internet to their TV.",
+ "url": "https://www.giantbomb.com/amazon-fire-tv/3045-158/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/3276566-0122928757-0-599.jpg",
+ },
+ UPS.AMIGA: {
+ "id": 1,
+ "slug": "amiga",
+ "title": "Amiga",
+ "description": "The Amiga was a personal computer from Commodore that was released in a variety of different configurations.",
+ "url": "https://www.giantbomb.com/amiga/3045-1/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10069-a500_plus1.jpg",
+ },
+ UPS.AMIGA_CD32: {
+ "id": 39,
+ "slug": "amiga-cd32",
+ "title": "Amiga CD32",
+ "description": "The Amiga CD32 was Commodore's attempt at a gaming console and what turned out to be their swan song. The majority of its library were upgraded Amiga games.",
+ "url": "https://www.giantbomb.com/amiga-cd32/3045-39/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10070-cd32.jpg",
+ },
+ UPS.AMSTRAD_PCW: {
+ "id": 197,
+ "slug": "amstrad-pcw",
+ "title": "Amstrad PCW",
+ "description": "Amstrad's PCW was primarily built as a word processor that was cheaper than the other computers offered at the time. Some games were also made available for the platform.",
+ "url": "https://www.giantbomb.com/amstrad-pcw/3045-197/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/3235400-9113310639-Amstr.jpg",
+ },
+ UPS.ANDROID: {
+ "id": 123,
+ "slug": "android",
+ "title": "Android",
+ "description": "Google's mobile OS, available across multiple devices.",
+ "url": "https://www.giantbomb.com/android/3045-123/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/1465136-android_robot_logo.jpg",
+ },
+ UPS.APF: {
+ "id": 190,
+ "slug": "apf-mp-1000",
+ "title": "APF MP-1000",
+ "description": "The APF MP-1000 is an 8-bit console released by APF Electronics in 1978.",
+ "url": "https://www.giantbomb.com/apf-mp-1000/3045-190/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195621-c9bef87c3a182a89d06bdde5a5dfc081.jpg",
+ },
+ UPS.APPLE_IIGS: {
+ "id": 38,
+ "slug": "apple-iigs",
+ "title": "Apple IIgs",
+ "description": 'The Apple ][gs - which stood for "Graphics and Sound" - was Apple\'s upgraded version of the popular Apple ][ line of computers. The system was capable of playing standard Apple ][ games, as well as games made specifically for the GS.',
+ "url": "https://www.giantbomb.com/apple-iigs/3045-38/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10075-appleiigs.jpg",
+ },
+ UPS.APPLEII: {
+ "id": 12,
+ "slug": "apple-ii",
+ "title": "Apple II",
+ "description": "The Apple II was a line of personal computers produced by Apple Computer, Inc. from 1977 to 1993.",
+ "url": "https://www.giantbomb.com/apple-ii/3045-12/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10074-apple_ii_large.jpg",
+ },
+ UPS.AQUARIUS: {
+ "id": 100,
+ "slug": "aquarius",
+ "title": "Aquarius",
+ "description": "Aquarius is a home computer made by Mattel. Released in June 1983, it was discontinued only a few months later in October 1983.\n\n",
+ "url": "https://www.giantbomb.com/aquarius/3045-100/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/46/187822-aquarius.jpg",
+ },
+ UPS.ARCADE: {
+ "id": 84,
+ "slug": "arcade",
+ "title": "Arcade",
+ "description": "Stand-alone machines specialized for individual games. Arcades began the game industry and peaked in popularity before home consoles took over the gaming public. Arcade games usually cost 25 cents, or 100 yen, per play. Known for the most cutting-edge technology of their time, arcades have the largest video game library, and greatest variety of control methods, of any platform.",
+ "url": "https://www.giantbomb.com/arcade/3045-84/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/9566/401036-mame_arcade_essential_cabinet.jpg",
+ },
+ UPS.ARCADIA_2001: {
+ "id": 99,
+ "slug": "arcadia-2001",
+ "title": "Arcadia 2001",
+ "description": "Arcadia 2001 is an 8-bit console made by Emerson.",
+ "url": "https://www.giantbomb.com/arcadia-2001/3045-99/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/46/187197-arcadia2001.gif",
+ },
+ UPS.ASTROCADE: {
+ "id": 120,
+ "slug": "bally-astrocade",
+ "title": "Bally Astrocade",
+ "description": "The Astrocade is a cartridge-based video game system that competed directly with the Atari 2600 in the late 1970s.",
+ "url": "https://www.giantbomb.com/bally-astrocade/3045-120/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/1322955-ballystm.jpg",
+ },
+ UPS.JAGUAR_CD: {
+ "id": 171,
+ "slug": "jaguar-cd",
+ "title": "Jaguar CD",
+ "description": "Atari released a CD-ROM drive for the Jaguar on September 21, 1995 for $149.99.",
+ "url": "https://www.giantbomb.com/jaguar-cd/3045-171/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2988687-atari_jaguar_cd_retropixl_retrogaming_retro_gaming_2.png",
+ },
+ UPS.ATARI_ST: {
+ "id": 13,
+ "slug": "atari-st",
+ "title": "Atari ST",
+ "description": "Atari's 16-bit computer line was one of the most popular computers in the mid-1980s to early 1990s.",
+ "url": "https://www.giantbomb.com/atari-st/3045-13/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/5258/220119-atari_1040stf.jpg",
+ },
+ UPS.ATARI_VCS: {
+ "id": 202,
+ "slug": "atari-vcs",
+ "title": "Atari VCS",
+ "description": 'The Atari VCS is billed as a "PC/Console Hybrid," with the console side having its own online storefront and a selection of games and apps.',
+ "url": "https://www.giantbomb.com/atari-vcs/3045-202/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/3302676-atarivcs2019.jpg",
+ },
+ UPS.ATARI2600: {
+ "id": 40,
+ "slug": "atari-2600",
+ "title": "Atari 2600",
+ "description": "The Atari 2600 is one of the first home game consoles, and one of the most successful at the time. Though it could be seen as the Grandfather of Consoles, it was also nearly the Grim Reaper, contributing to the industry collapse years later.",
+ "url": "https://www.giantbomb.com/atari-2600/3045-40/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10066-atari2600.jpg",
+ },
+ UPS.ATARI5200: {
+ "id": 67,
+ "slug": "atari-5200",
+ "title": "Atari 5200",
+ "description": "The Atari 5200 Supersystem was released in 1982, as a followup to the successful VCS/Atari 2600.",
+ "url": "https://www.giantbomb.com/atari-5200/3045-67/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10083-5200.jpg",
+ },
+ UPS.ATARI7800: {
+ "id": 70,
+ "slug": "atari-7800",
+ "title": "Atari 7800",
+ "description": "The third console released by Atari, and successor to the Atari 5200. It features backwards compatibility with the Atari 2600.",
+ "url": "https://www.giantbomb.com/atari-7800/3045-70/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10088-7800.gif",
+ },
+ UPS.ATARI8BIT: {
+ "id": 24,
+ "slug": "atari-8-bit",
+ "title": "Atari 8-bit",
+ "description": "A line of 8-bit computers produced by Atari, Inc. from 1979 to 1992.",
+ "url": "https://www.giantbomb.com/atari-8-bit/3045-24/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10170-Atari-800.jpg",
+ },
+ UPS.BBCMICRO: {
+ "id": 110,
+ "slug": "bbc-micro",
+ "title": "BBC Micro",
+ "description": "Designed and built by Acorn Computers in 1981 as part of the BBC's Computer Literacy Project, the BBC Microcomputer System was notable for its rugged build quality, expandability and feature set. Several notable British developers started out making games for this system.",
+ "url": "https://www.giantbomb.com/bbc-micro/3045-110/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/5028/1738077-bbc_micro_owl.png",
+ },
+ UPS.BROWSER: {
+ "id": 140,
+ "slug": "browser",
+ "title": "Browser",
+ "description": "Browser-based games are typically platform-independent pieces of software that run directly in the same application you use to read this web page.",
+ "url": "https://www.giantbomb.com/browser/3045-140/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4231/942780-q20.jpg",
+ },
+ UPS.C128: {
+ "id": 58,
+ "slug": "commodore-128",
+ "title": "Commodore 128",
+ "description": "The Commodore 128 is the successor to the extremely popular Commodore 64 computer. The Commodore 128 is the last 8-bit computer produced by Commodore Business Machines.",
+ "url": "https://www.giantbomb.com/commodore-128/3045-58/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954661-4388797273-C5YEu.jpg",
+ },
+ UPS.C16: {
+ "id": 150,
+ "slug": "commodore-16",
+ "title": "Commodore 16",
+ "description": "Commodore's successor to the VIC-20 that never sold well.",
+ "url": "https://www.giantbomb.com/commodore-16/3045-150/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2359950-1280px_commodore_16_002a.png",
+ },
+ UPS.C64: {
+ "id": 14,
+ "slug": "commodore-64",
+ "title": "Commodore 64",
+ "description": "The Commodore 64 personal computer dominated the market from 1983-1985, and stands as one of the best-selling personal computers of all time.",
+ "url": "https://www.giantbomb.com/commodore-64/3045-14/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10289-c64.jpg",
+ },
+ UPS.CASIO_LOOPY: {
+ "id": 126,
+ "slug": "casio-loopy",
+ "title": "Casio Loopy",
+ "description": "This Japan-only release was targeted at young girls and featured a built-in thermal printer to allow users to print their own puri-kura-style stickers. Only 10 games were released for the console.",
+ "url": "https://www.giantbomb.com/casio-loopy/3045-126/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/1643279-casioloopy.jpg",
+ },
+ UPS.CASIO_PV_1000: {
+ "id": 149,
+ "slug": "casio-pv-1000",
+ "title": "Casio PV-1000",
+ "description": "The Casio PV-1000 was released in Japan in 1983. Only 15 games were produced.",
+ "url": "https://www.giantbomb.com/casio-pv-1000/3045-149/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/14/148570/2318191-casio_pv_1000.jpg",
+ },
+ UPS.CASIO_PV_2000: {
+ "id": 187,
+ "slug": "casio-pv-2000",
+ "title": "Casio PV-2000",
+ "description": "The Casio PV-2000 was a gaming computer released by Casio in Japan in 1983. Only eleven games were released in its lifetime, and it is not compatible with Casio PV-1000 games.",
+ "url": "https://www.giantbomb.com/casio-pv-2000/3045-187/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195587-casio_pv2000_1.jpg",
+ },
+ UPS.COLECOADAM: {
+ "id": 207,
+ "slug": "coleco-adam",
+ "title": "Coleco Adam",
+ "description": "The Coleco Adam is a standalone home computer as well as an expansion module released for the ColecoVision in October 1983. Several games were released that required an Adam-compatible devices.",
+ "url": "https://www.giantbomb.com/coleco-adam/3045-207/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3376494-8410875235-adam-.jpg",
+ },
+ UPS.COLECOVISION: {
+ "id": 47,
+ "slug": "colecovision",
+ "title": "ColecoVision",
+ "description": "The ColecoVision came out in 1982 and had a successful run as the Atari 5200's competitor until 1984.",
+ "url": "https://www.giantbomb.com/colecovision/3045-47/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/1270971-colecovision.jpg",
+ },
+ UPS.COMMODORE_CDTV: {
+ "id": 142,
+ "slug": "commodore-cdtv",
+ "title": "Commodore CDTV",
+ "description": "The CDTV was a repurposed Amiga 500 that focused on multimedia games and applications in the early 1990s.",
+ "url": "https://www.giantbomb.com/commodore-cdtv/3045-142/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/10/103881/2017382-cdtv.jpg",
+ },
+ UPS.CPET: {
+ "id": 62,
+ "slug": "commodore-petcbm",
+ "title": "Commodore PET/CBM",
+ "description": "The PET (Personal Electronic Transactor) was a home-/personal computer produced by Commodore starting in 1977.",
+ "url": "https://www.giantbomb.com/commodore-petcbm/3045-62/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10320-Commodore_PET4032.jpg",
+ },
+ UPS.CREATIVISION: {
+ "id": 209,
+ "slug": "vtech-creativision",
+ "title": "VTech CreatiVision",
+ "description": "The VTech CreatiVision is a video game console developed by VTech in 1983. It was released in the USA and Canada in 1983 and in Europe in 1984.",
+ "url": "https://www.giantbomb.com/vtech-creativision/3045-209/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3341713-images.jpeg",
+ },
+ UPS.DC: {
+ "id": 37,
+ "slug": "dreamcast",
+ "title": "Dreamcast",
+ "description": "The Dreamcast is the fifth and final console developed by Sega. As the first 128-bit system, it was the first to offer truly arcade-quality 3D graphics. It is famous for being the first console to include worldwide online capability, its game library, and its unexpectedly short life span.",
+ "url": "https://www.giantbomb.com/dreamcast/3045-37/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426199-logo.jpg",
+ },
+ UPS.DENSHI_MANGAJUKU: {
+ "id": 200,
+ "slug": "denshi-mangajuku",
+ "title": "Denshi Mangajuku",
+ "description": "The Denshi Manga (Design Master) was released by Bandai in 1995. It is considered the first touch screen gaming device ever produced.",
+ "url": "https://www.giantbomb.com/denshi-mangajuku/3045-200/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3281904-designmastersenshimangajukuun_box.jpg",
+ },
+ UPS.DIDJ: {
+ "id": 144,
+ "slug": "leapfrog-didj",
+ "title": "Leapfrog Didj",
+ "description": "The Leapfrog Didj is a handheld console that was originally released in 2008. It's built for educational software, but runs a Linux distribution that has created a bit of hacker interest.",
+ "url": "https://www.giantbomb.com/leapfrog-didj/3045-144/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/14/148570/2203035-didj_custom_gaming_system_product_shot_540x360.jpg",
+ },
+ UPS.DIGIBLAST: {
+ "id": 192,
+ "slug": "digiblast",
+ "title": "Digiblast",
+ "description": "The Digiblast (digiBLAST) is a handheld console produced by Nikko in the Netherlands and released in 2005.",
+ "url": "https://www.giantbomb.com/digiblast/3045-192/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195630-unnamed.jpg",
+ },
+ UPS.DRAGON_32_SLASH_64: {
+ "id": 61,
+ "slug": "dragon-3264",
+ "title": "Dragon 32/64",
+ "description": "The Dragon 32 and Dragon 64 is to date the only computer to be made in Wales, UK. The companies short history spanned only August 1982 - June 1984.",
+ "url": "https://www.giantbomb.com/dragon-3264/3045-61/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10321-dragon64.gif",
+ },
+ UPS.DVD_PLAYER: {
+ "id": 208,
+ "slug": "dvd",
+ "title": "DVD",
+ "description": "While primarily a format for movies and other video, video games were made that are playable via a standard DVD player.",
+ "url": "https://www.giantbomb.com/dvd/3045-208/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3377656-screenshot2022-05-30at10.43.03am.png",
+ },
+ UPS.EPOCH_CASSETTE_VISION: {
+ "id": 135,
+ "slug": "epoch-cassette-vision",
+ "title": "Epoch Cassette Vision",
+ "description": "A cartridge-based system released in Japan in 1981.",
+ "url": "https://www.giantbomb.com/epoch-cassette-vision/3045-135/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/12/125537/1749867-giant_bomb_sub.jpg",
+ },
+ UPS.EPOCH_GAME_POCKET_COMPUTER: {
+ "id": 182,
+ "slug": "epoch-game-pocket-computer",
+ "title": "Epoch Game Pocket Computer",
+ "description": "The Epoch Game Pocket Computer was released in Japan in 1984. It features a 75x64 resolution LCD screen with two built-in games. Only five other game cartridges were released.",
+ "url": "https://www.giantbomb.com/epoch-game-pocket-computer/3045-182/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3185773-screen%20shot%202020-04-24%20at%206.46.42%20pm.png",
+ },
+ UPS.EPOCH_SUPER_CASSETTE_VISION: {
+ "id": 136,
+ "slug": "super-cassette-vision",
+ "title": "Super Cassette Vision",
+ "description": "Epoch's follow-up to the Cassette Vision was released in 1984.",
+ "url": "https://www.giantbomb.com/super-cassette-vision/3045-136/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/12/126726/1755684-images.jpeg",
+ },
+ UPS.EVERCADE: {
+ "id": 180,
+ "slug": "evercade",
+ "title": "Evercade",
+ "description": "Evercade is a range of consoles that plays officially licensed cartridge-based collections of retro 8-bit, 16-bit, 32-bit and 64-bit console games, arcade games and 8-bit and 16-bit home computer games.",
+ "url": "https://www.giantbomb.com/evercade/3045-180/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3134988-evercade-featured-graphic-with-cart.jpg",
+ },
+ UPS.FAIRCHILD_CHANNEL_F: {
+ "id": 66,
+ "slug": "channel-f",
+ "title": "Channel F",
+ "description": "The Fairchild Video Entertainment System, later called the Fairchild Channel F, was the first video game console to feature a microprocessor, interchangeable game cartridges, and detachable controllers.",
+ "url": "https://www.giantbomb.com/channel-f/3045-66/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10174-fairchild%20channel%20f.jpg",
+ },
+ UPS.FDS: {
+ "id": 91,
+ "slug": "famicom-disk-system",
+ "title": "Famicom Disk System",
+ "description": "The Famicom Disk System was an add-on accessory for the Nintendo Entertainment System's Japanese counterpart. With its games coming on a floppy disk-like medium, many of its releases saw conversions to cartridges both overseas and within Japan.",
+ "url": "https://www.giantbomb.com/famicom-disk-system/3045-91/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10341-fds.jpg",
+ },
+ UPS.FM_7: {
+ "id": 114,
+ "slug": "fm-7",
+ "title": "FM-7",
+ "description": "The second in Fujitsu's FM line of computers, the FM-7 was intended more for the mass market, and received fair popularity in Japan.",
+ "url": "https://www.giantbomb.com/fm-7/3045-114/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4/1151387-fm7ad.jpg",
+ },
+ UPS.FM_TOWNS: {
+ "id": 108,
+ "slug": "fm-towns",
+ "title": "FM Towns",
+ "description": "A proprietary 32-bit computer from Fujitsu, released in 1989 only in Japan. The first computer with a standard CD-ROM drive, it had many CD enhanced versions of Eastern and Western games (including action, adventure and RPG titles) which are sought after to this day by collectors. Its console version, FM Towns Marty, released in 1993 as the first 5th-gen console.",
+ "url": "https://www.giantbomb.com/fm-towns/3045-108/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4527/1109993-fmtowns.jpg",
+ },
+ UPS.GAMATE: {
+ "id": 166,
+ "slug": "gamate",
+ "title": "Gamate",
+ "description": 'The Gamate, also known as the "Super Boy" in Taiwan, is a handheld platform originally manufactured in 1990.',
+ "url": "https://www.giantbomb.com/gamate/3045-166/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2917446-gamate_ad.jpg",
+ },
+ UPS.GAME_DOT_COM: {
+ "id": 77,
+ "slug": "gamecom",
+ "title": "Game.Com",
+ "description": "Tiger's second short-lived portable console was a video game and PDA hybrid",
+ "url": "https://www.giantbomb.com/gamecom/3045-77/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954597-tiger-game-com-fl.jpg",
+ },
+ UPS.GAME_WAVE: {
+ "id": 105,
+ "slug": "game-wave",
+ "title": "Game Wave",
+ "description": "The Game Wave Family Entertainment System is a simple DVD-based game platform from ZAPiT Games.",
+ "url": "https://www.giantbomb.com/game-wave/3045-105/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954589-game-wave-console-set-fl.jpg",
+ },
+ UPS.GAMEGEAR: {
+ "id": 5,
+ "slug": "game-gear",
+ "title": "Game Gear",
+ "description": "Sega's first hand held video game system. It was the portable version of the Master System.",
+ "url": "https://www.giantbomb.com/game-gear/3045-5/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426271-logo.jpg",
+ },
+ UPS.GAMEKING: {
+ "id": 188,
+ "slug": "timetop-gameking",
+ "title": "Timetop GameKing",
+ "description": "The Timetop GameKing is a Chinese handheld console. While being a gray-scale, 8-bit system, it was notable for its excellent audio.",
+ "url": "https://www.giantbomb.com/timetop-gameking/3045-188/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195589-cam06453_orig.jpg",
+ },
+ UPS.GAMEKINGIII: {
+ "id": 189,
+ "slug": "timetop-gameking-iii",
+ "title": "Timetop GameKing III",
+ "description": "The Timetop GameKing III is a handheld console release in Asia by Guangzhou Daidaixing Electronics Tech. Unlike previous iterations, the GameKing III features a color screen. It is backwards compatible with GameKing I & II games.",
+ "url": "https://www.giantbomb.com/timetop-gameking-iii/3045-189/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195620-2560px-gameking_iii_%28gm-221%29.jpg",
+ },
+ UPS.GB: {
+ "id": 3,
+ "slug": "game-boy",
+ "title": "Game Boy",
+ "description": "Nintendo's first handheld gaming console was immensely popular among gamers, selling millions. Despite its grayscale color scheme, it still got support from developers and publishers.",
+ "url": "https://www.giantbomb.com/game-boy/3045-3/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426210-logo.jpg",
+ },
+ UPS.GBA: {
+ "id": 4,
+ "slug": "game-boy-advance",
+ "title": "Game Boy Advance",
+ "description": "The third platform in the Game Boy line, the Game Boy Advance was offered in a multitude of colors and had three hardware offerings, the sideways Game Boy Advance, the flip Game Boy Advance SP and the tiny Game Boy Advance Micro.",
+ "url": "https://www.giantbomb.com/game-boy-advance/3045-4/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2121789-gba.png",
+ },
+ UPS.GBC: {
+ "id": 57,
+ "slug": "game-boy-color",
+ "title": "Game Boy Color",
+ "description": "Nintendo's successor to the Game Boy, featuring a color screen and backwards compatibility for all previous Game Boy titles.",
+ "url": "https://www.giantbomb.com/game-boy-color/3045-57/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426240-logo.jpg",
+ },
+ UPS.GENESIS: {
+ "id": 6,
+ "slug": "genesis",
+ "title": "Genesis",
+ "description": "After the cult success of their 8-bit Master System, Sega decided to give gamers a taste of their arcade capabilities with a 16-bit console. Known worldwide as the Mega Drive but called Genesis in the US, it provided graphics and sound a couple of steps below their popular System 16 arcade cabinets. The Mega Drive/Genesis turned out to be Sega's most successful console.",
+ "url": "https://www.giantbomb.com/genesis/3045-6/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10576-genesis.jpg",
+ },
+ UPS.GIZMONDO: {
+ "id": 78,
+ "slug": "gizmondo",
+ "title": "Gizmondo",
+ "description": "The Gizmondo is a failed handheld console, which launched in 2005. It was potentially revolutionary for having functionality such as GPRS mobile data connection, a camera, GPS, a multimedia player and of course game playing all in one unit.",
+ "url": "https://www.giantbomb.com/gizmondo/3045-78/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10602-gizmondo.jpg",
+ },
+ UPS.GP32: {
+ "id": 133,
+ "slug": "gamepark-32",
+ "title": "GamePark 32",
+ "description": "The GamePark 32 is a Korean handheld that actually attained popularity in European markets after its release. The console was popular due to its vast abilities, including emulation, freeware, homebrew, music playback, and more.",
+ "url": "https://www.giantbomb.com/gamepark-32/3045-133/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/7465/1749578-gp3201.jpg",
+ },
+ UPS.HALCYON: {
+ "id": 107,
+ "slug": "rdi-halcyon",
+ "title": "RDI Halcyon",
+ "description": "The RDI Halcyon was a short-lived laserdisc-based game platform. Only two games were properly released for the system. It was the most expensive video game console ever released, retailing at $2,500.",
+ "url": "https://www.giantbomb.com/rdi-halcyon/3045-107/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/874497-rdi.jpg",
+ },
+ UPS.HARTUNG: {
+ "id": 158,
+ "slug": "game-master",
+ "title": "Game Master",
+ "description": "The Hartung Game Master is a monochrome handheld gaming machine that was marketed under different names, including the Systema 2000 and Super Game.",
+ "url": "https://www.giantbomb.com/game-master/3045-158/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2780052-hgm.jpg",
+ },
+ UPS.HITACHI_S1: {
+ "id": 198,
+ "slug": "hitachi-s1",
+ "title": "Hitachi S1",
+ "description": 'The Hitachi S1 is a home computer that was primarily sold in Japan, but also in parts of Australia. It used proprietary 5.25" floppy disks.',
+ "url": "https://www.giantbomb.com/hitachi-s1/3045-198/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3242271-hitachi-s1-01.jpg",
+ },
+ UPS.HYPERSCAN: {
+ "id": 104,
+ "slug": "hyperscan",
+ "title": "HyperScan",
+ "description": "Mattel's HyperScan allowed players to scan in RFID-equipped cards to bring in new characters, weapons, and powers. It came packaged with X-Men, Spider-Man and Ben 10.",
+ "url": "https://www.giantbomb.com/hyperscan/3045-104/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/2681/841197-hyperscan.jpg",
+ },
+ UPS.INTELLIVISION: {
+ "id": 51,
+ "slug": "intellivision",
+ "title": "Intellivision",
+ "description": "The Intellivision by Mattel Electronics was a system known for its unique controllers and cutting-edge graphics in the early 1980s, but it was ultimately overshadowed by the technically less powerful, Atari 2600.",
+ "url": "https://www.giantbomb.com/intellivision/3045-51/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/24/176540-intellivision_small.jpg",
+ },
+ UPS.INTELLIVISION_AMICO: {
+ "id": 181,
+ "slug": "intellivision-amico",
+ "title": "Intellivision Amico",
+ "description": "A console that's intended to be a reimagining of the Intellivision brand.",
+ "url": "https://www.giantbomb.com/intellivision-amico/3045-181/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/3161447-dims.jpeg",
+ },
+ UPS.IOS: {
+ "id": 96,
+ "slug": "iphone",
+ "title": "iPhone",
+ "description": "The iPhone is a multimedia multi-touch smartphone created by Apple Inc.",
+ "url": "https://www.giantbomb.com/iphone/3045-96/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3383085-5925865434-Apple.jpg",
+ },
+ UPS.IPAD: {
+ "id": 121,
+ "slug": "ipad",
+ "title": "iPad",
+ "description": "The iPad is a series of touch-screen tablet devices developed by Apple. The iPad can browse the web, playback local and streamed content, and run a large variety of third party apps, including games.",
+ "url": "https://www.giantbomb.com/ipad/3045-121/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3383081-8892238218-ipad-pro-12-select-wifi-spacegray-202104_FMT_WHH.jpg",
+ },
+ UPS.IPOD_CLASSIC: {
+ "id": 72,
+ "slug": "ipod",
+ "title": "iPod Classic",
+ "description": "The iPod is a line of portable media players and portable digital audio players developed and marketed by Apple Inc.",
+ "url": "https://www.giantbomb.com/ipod/3045-72/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2564462-ipod.png",
+ },
+ UPS.JAGUAR: {
+ "id": 28,
+ "slug": "jaguar",
+ "title": "Jaguar",
+ "description": "The Atari Jaguar was the first 64-Bit game console, and Atari's final console.",
+ "url": "https://www.giantbomb.com/jaguar/3045-28/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954600-atari-jaguar-console-set.jpg",
+ },
+ UPS.LASERACTIVE: {
+ "id": 92,
+ "slug": "pioneer-laseractive",
+ "title": "Pioneer LaserActive",
+ "description": "Pioneer LaserActive was a failed modular laserdisc-based game console notable for its use of expansion modules as well as being the second highest priced console of all time.",
+ "url": "https://www.giantbomb.com/pioneer-laseractive/3045-92/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4/176058-laserinteractive.jpg",
+ },
+ UPS.LEAPFROG_EXPLORER: {
+ "id": 185,
+ "slug": "leapster-explorer",
+ "title": "Leapster Explorer",
+ "description": "Leapster Explorer is a cartridge-based handheld console developed by LeapFrog and intended for children under the age of ten.",
+ "url": "https://www.giantbomb.com/leapster-explorer/3045-185/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195577-91b99%2B96oel._ac_sx425_.jpg",
+ },
+ UPS.LEAPSTER: {
+ "id": 89,
+ "slug": "leapster",
+ "title": "Leapster",
+ "description": "The LeapFrog Leapster is a stylus-based educational game device aimed at children under 10.",
+ "url": "https://www.giantbomb.com/leapster/3045-89/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10607-leapster.jpg",
+ },
+ UPS.LEAPSTER_EXPLORER_SLASH_LEADPAD_EXPLORER: {
+ "id": 186,
+ "slug": "leappad",
+ "title": "LeapPad",
+ "description": "LeapPad is a series of tablets developed by LeapFrog beginning in 1999. They are primarily intended for children.",
+ "url": "https://www.giantbomb.com/leappad/3045-186/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195586-91siqfml3ul._ac_sl1500_.jpg",
+ },
+ UPS.LINUX: {
+ "id": 152,
+ "slug": "linux",
+ "title": "Linux",
+ "description": "The Linux operating system was initially released in 1991 and has gone on to become a very popular free alternative to other, commercial systems.",
+ "url": "https://www.giantbomb.com/linux/3045-152/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/1/14761/2435328-tux.png",
+ },
+ UPS.LUNA: {
+ "id": 199,
+ "slug": "amazon-luna",
+ "title": "Amazon Luna",
+ "description": 'Amazon\'s cloud-based streaming service takes a "channel" style approach to access, with a basic monthly fee for the Luna core and additional monthly fees for more games from specific publishers.',
+ "url": "https://www.giantbomb.com/amazon-luna/3045-199/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/3244842-luna.jpg",
+ },
+ UPS.LYNX: {
+ "id": 7,
+ "slug": "atari-lynx",
+ "title": "Atari Lynx",
+ "description": "Atari's 1989 color, backlit handheld console",
+ "url": "https://www.giantbomb.com/atari-lynx/3045-7/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10608-lynx2.jpg",
+ },
+ UPS.MAC: {
+ "id": 17,
+ "slug": "mac",
+ "title": "Mac",
+ "description": 'The Macintosh (Mac) line of personal computers is designed and developed by Apple, Inc. - formerly Apple Computer, Inc. It runs macOS, a Unix operating system. Its current version, macOS 13.4 "Ventura" was released on May 18, 2023.',
+ "url": "https://www.giantbomb.com/mac/3045-17/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/5150/1500874-overview_gallery3_20090828.jpg",
+ },
+ UPS.MAGIC_LEAP_ONE: {
+ "id": 173,
+ "slug": "magic-leap-one",
+ "title": "Magic Leap One",
+ "description": 'The Magic Leap One launched as a developer-focused "Creator Edition" in August 2018.',
+ "url": "https://www.giantbomb.com/magic-leap-one/3045-173/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/3059027-product-family-shot_3x.jpeg",
+ },
+ UPS.MEGA_DUCK_SLASH_COUGAR_BOY: {
+ "id": 137,
+ "slug": "mega-duck",
+ "title": "Mega Duck",
+ "description": "The Mega Duck is a 1993 handheld that was released in some territories under the name Cougar Boy. It was released as the Mega Duck in France, Germany, Brazil, and China. The handheld was also released as the Cougar Boy in the USA and some other countries.",
+ "url": "https://www.giantbomb.com/mega-duck/3045-137/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/12/126726/1755677-8347458953222508.jpg",
+ },
+ UPS.MEMOTECH_MTX: {
+ "id": 206,
+ "slug": "memotech-mtx",
+ "title": "Memotech MTX",
+ "description": "The Memotech MTX is a series of British-developed home computers released in 1983 and 1984.",
+ "url": "https://www.giantbomb.com/memotech-mtx/3045-206/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3341703-images.jpeg",
+ },
+ UPS.META_QUEST_2: {
+ "id": 177,
+ "slug": "meta-quest",
+ "title": "Meta Quest",
+ "description": "Oculus Quest is a self-contained virtual reality platform from the makers of the Oculus Rift.",
+ "url": "https://www.giantbomb.com/meta-quest/3045-177/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/3099536-71nk%2Bjjlzzl._sx679_.jpg",
+ },
+ UPS.MICROBEE: {
+ "id": 168,
+ "slug": "micro-bee",
+ "title": "MicroBee",
+ "description": "The MicroBee line of computers started with the release of a mail-order kit computer in 1982.",
+ "url": "https://www.giantbomb.com/micro-bee/3045-168/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2974952-microbee_computer-in-a-book.jpg",
+ },
+ UPS.MICROVISION: {
+ "id": 90,
+ "slug": "microvision",
+ "title": "Microvision",
+ "description": "The first gaming handheld, Surpizingly big but extremely rare.",
+ "url": "https://www.giantbomb.com/microvision/3045-90/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10813-MicroVision.jpg",
+ },
+ UPS.MONON_COLOR: {
+ "id": 204,
+ "slug": "monon-color",
+ "title": "Monon Color",
+ "description": "The Monon Color is a portable game console produced by Nintendo. It was released in Japan in 1980.",
+ "url": "https://www.giantbomb.com/monon-color/3045-204/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/scale_small/0/1992/3341671-4c3443fd23473ce64296b645f6507ade.jpeg",
+ },
+ UPS.MSX: {
+ "id": 15,
+ "slug": "msx",
+ "title": "MSX",
+ "description": "MSX is a standardized home computer architecture. It was popular in Japan, South Korea, Brazil, Netherlands, France, Spain, Finland, Arabian Gulf countries and former Soviet Union during the 1980s. Like the PC of today, the MSX computers were manufactured by many different companies.",
+ "url": "https://www.giantbomb.com/msx/3045-15/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176106-msx_philips_vg8020.jpg",
+ },
+ UPS.MULTI_8: {
+ "id": 205,
+ "slug": "mitsubishi-multi-8",
+ "title": "Mitsubishi Multi 8",
+ "description": "The Mitsubishi Multi 8 is a home computer released in Japan in 1983. Several cartridge-based games were released for it.",
+ "url": "https://www.giantbomb.com/mitsubishi-multi-8/3045-205/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3341686-multi8.jpeg",
+ },
+ UPS.N64: {
+ "id": 43,
+ "slug": "nintendo-64",
+ "title": "Nintendo 64",
+ "description": "The successor to the SNES was Nintendo's first system designed specifically to handle polygonal 3D graphics.",
+ "url": "https://www.giantbomb.com/nintendo-64/3045-43/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426281-logo.jpg",
+ },
+ UPS.NDS: {
+ "id": 52,
+ "slug": "nintendo-ds",
+ "title": "Nintendo DS",
+ "description": "The Nintendo DS is a handheld featuring two screens, one of which is a resistive touchscreen. Four different models are available: the original DS, the DS Lite, the DSi, the DSi XL.",
+ "url": "https://www.giantbomb.com/nintendo-ds/3045-52/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2122822-ds.png",
+ },
+ UPS.NEO_GEO_CD: {
+ "id": 167,
+ "slug": "neo-geo-cd",
+ "title": "Neo Geo CD",
+ "description": "The Neo Geo CD was released after its cartridge-based equivalent, in an effort to reduce manufacturing costs.",
+ "url": "https://www.giantbomb.com/neo-geo-cd/3045-167/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176112-neogeocd.jpg",
+ },
+ UPS.NEO_GEO_POCKET: {
+ "id": 80,
+ "slug": "neo-geo-pocket",
+ "title": "Neo Geo Pocket",
+ "description": "The Neo Geo Pocket is SNK Playmore's first handheld video game console. The console did not do as well as expected, and had a short life span and small game library.",
+ "url": "https://www.giantbomb.com/neo-geo-pocket/3045-80/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954592-neo-geo-pocket-anthra-left.jpg",
+ },
+ UPS.NEO_GEO_POCKET_COLOR: {
+ "id": 81,
+ "slug": "neo-geo-pocket-color",
+ "title": "Neo Geo Pocket Color",
+ "description": "The Neo Geo Pocket Color is a 16 bit color handheld console from SNK.",
+ "url": "https://www.giantbomb.com/neo-geo-pocket-color/3045-81/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426322-logo.jpg",
+ },
+ UPS.NEOGEOAES: {
+ "id": 25,
+ "slug": "neo-geo",
+ "title": "Neo Geo",
+ "description": "The Neo Geo was a console released by SNK in 1990, featuring a 16/32-bit 68000 CPU with an additional 8-bit Z80 CPU and custom 24-bit GPU chipset. An arcade-based console considerably powerful for a home system at the time, the Neo Geo was notoriously expensive (costing $650 at launch) and aggressively marketed as an Advanced Entertainment System (AES).",
+ "url": "https://www.giantbomb.com/neo-geo/3045-25/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/1/13362/613868-neo_20geo.jpg",
+ },
+ UPS.NES: {
+ "id": 21,
+ "slug": "nintendo-entertainment-system",
+ "title": "Nintendo Entertainment System",
+ "description": "The NES, also known as Famicom, launched in 1983 in Japan and 1985 in North America, where the video game industry was headed downhill due to a deluge of poor games and over-saturation. Nintendo's second home console became an enormous success, establishing consoles as a mainstream market in Japan and pulling the North American industry back to its feet.",
+ "url": "https://www.giantbomb.com/nintendo-entertainment-system/3045-21/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/9/99864/2419866-nes_console_set.png",
+ },
+ UPS.NEW_NINTENDON3DS: {
+ "id": 156,
+ "slug": "new-nintendo-3ds",
+ "title": "New Nintendo 3DS",
+ "description": "Nintendo's \"New 3DS\" adds some additional control functionality and horsepower, allowing for some games that can only run on the new hardware, not on Nintendo's original 3DS.",
+ "url": "https://www.giantbomb.com/new-nintendo-3ds/3045-156/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/8/82063/2676248-photo_3ds_01_wmcs1e.jpg",
+ },
+ UPS.NGAGE: {
+ "id": 34,
+ "slug": "n-gage",
+ "title": "N-Gage",
+ "description": "The N-Gage (later re-released as N-Gage QD) was a failed gaming platform developed by phone manufacturer Nokia. Games in MMC-Card format were sold for the platform, and towards the end, games were available for download to your own MMC. ",
+ "url": "https://www.giantbomb.com/n-gage/3045-34/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/1/14912/702653-ngageqd.jpg",
+ },
+ UPS.NGC: {
+ "id": 23,
+ "slug": "gamecube",
+ "title": "GameCube",
+ "description": "The Nintendo GameCube is a video game console released by Nintendo on September 15, 2001 in Japan, November 18, 2001 in North America, May 3, 2002 in Europe, and May 17, 2002 in Australia.",
+ "url": "https://www.giantbomb.com/gamecube/3045-23/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426256-logo.jpg",
+ },
+ UPS.NUON: {
+ "id": 85,
+ "slug": "nuon",
+ "title": "NUON",
+ "description": 'Originally called "Project X", the Nuon started out as a concept for a stand alone console but instead became a built in 3D enhancement technology in a handful of DVD players. NUON technology fared abysmally and the platform only managed to get 8 titles.',
+ "url": "https://www.giantbomb.com/nuon/3045-85/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954590-nuon-n2000-wcontroller-l.jpg",
+ },
+ UPS.ODYSSEY: {
+ "id": 74,
+ "slug": "odyssey",
+ "title": "Odyssey",
+ "description": "The Magnavox Odyssey was the first home video game console.",
+ "url": "https://www.giantbomb.com/odyssey/3045-74/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/13/139866/2606039-3801669138-Magna.jpg",
+ },
+ UPS.ODYSSEY_2: {
+ "id": 60,
+ "slug": "odyssey-2",
+ "title": "Odyssey 2",
+ "description": "The Odyssey 2 was Magnavox's second console, which competed with the Atari 2600 and Fairchild Channel F.",
+ "url": "https://www.giantbomb.com/odyssey-2/3045-60/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176130-o2_hard.jpg",
+ },
+ UPS.ORIC: {
+ "id": 195,
+ "slug": "oric",
+ "title": "Oric",
+ "description": "Oric was a series of computers produced by Tangerine Computer Systems between 1981 and 1986.",
+ "url": "https://www.giantbomb.com/oric/3045-195/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3220230-oric1.jpg",
+ },
+ UPS.OUYA: {
+ "id": 154,
+ "slug": "ouya",
+ "title": "Ouya",
+ "description": "The Ouya is an Android-based device that hooks up to TVs and plays video games.",
+ "url": "https://www.giantbomb.com/ouya/3045-154/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2462186-ouya.jpg",
+ },
+ UPS.PC_6001: {
+ "id": 115,
+ "slug": "nec-pc-6001",
+ "title": "NEC PC-6001",
+ "description": "The first in NEC's PC-6000 line of computers.",
+ "url": "https://www.giantbomb.com/nec-pc-6001/3045-115/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4/1151382-250px_nec_pc_6001.jpg",
+ },
+ UPS.PC_8800_SERIES: {
+ "id": 47,
+ "slug": "nec-pc-8800-series",
+ "title": "NEC PC-8800 Series",
+ "description": "The NEC PC-8800 Series is a series of home computers released by NEC in 1981.",
+ "url": "https://www.giantbomb.com/nec-pc-8800-series/3045-47/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195565-entex-selectagame.jpg",
+ },
+ UPS.PC_9800_SERIES: {
+ "id": 112,
+ "slug": "nec-pc-9801",
+ "title": "NEC PC-9801",
+ "description": "A 16/32-bit Japanese personal computer system launched by NEC in 1982. It was the most successful computer platform in Japan and one of the best-selling computer systems of the 20th century. It has a very large video game library with thousands of titles, the majority of which were never released outside Japan.",
+ "url": "https://www.giantbomb.com/nec-pc-9801/3045-112/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/5/59247/1129864-pc_9801_l.jpg",
+ },
+ UPS.PC_FX: {
+ "id": 75,
+ "slug": "pc-fx",
+ "title": "PC-FX",
+ "description": "The NEC PC-FX was a console designed in the form of a PC and planned to be upgradable. It failed due to lack of 3D graphical power and little developer support. The PC-FX is known for its large percentage of adult titles and was NEC Corporation's last gaming console.",
+ "url": "https://www.giantbomb.com/pc-fx/3045-75/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954599-nec-pc-fx-wcontroller-r.jpg",
+ },
+ UPS.PHILIPS_CD_I: {
+ "id": 27,
+ "slug": "cd-i",
+ "title": "CD-i",
+ "description": "The CD-i was the first CD-based game console. Produced by Philips, it was intended to be a computer for your living room.",
+ "url": "https://www.giantbomb.com/cd-i/3045-27/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10173-cd-i.jpg",
+ },
+ UPS.PINBALL: {
+ "id": 83,
+ "slug": "pinball",
+ "title": "Pinball",
+ "description": 'In a pinball machine the player is in control of two or more "flippers" (small movable bars) that are used to shoot a metal ball against different physical targets inside the machine.',
+ "url": "https://www.giantbomb.com/pinball/3045-83/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/3948/955933-6a00d83452989a69e2010536fbd197970b_800wi.jpg",
+ },
+ UPS.PIPPIN: {
+ "id": 102,
+ "slug": "pippin",
+ "title": "Pippin",
+ "description": "This short-lived multimedia device was designed by Apple and manufactured by Bandai. It is widely regarded as one of the worst video game consoles of all time.",
+ "url": "https://www.giantbomb.com/pippin/3045-102/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954591-pippin-atmark-console-set.jpg",
+ },
+ UPS.PLATO: {
+ "id": 111,
+ "slug": "plato",
+ "title": "PLATO",
+ "description": "PLATO stands for Programmed Logic for Automated Teaching Operations. Mainly used for assisting in instruction and offering coursework originally built by the University of Illinois. ",
+ "url": "https://www.giantbomb.com/plato/3045-111/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/1101577-240px_platovterm1981.jpg",
+ },
+ UPS.PLAYDATE: {
+ "id": 178,
+ "slug": "playdate",
+ "title": "Playdate",
+ "description": "Playdate is a handheld designed by Panic. It has unique controls, a 'season' of games and is an open development platform.",
+ "url": "https://www.giantbomb.com/playdate/3045-178/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3102813-screen%20shot%202019-05-23%20at%209.05.10%20pm.png",
+ },
+ UPS.PLAYDIA: {
+ "id": 127,
+ "slug": "bandai-playdia",
+ "title": "Bandai Playdia",
+ "description": "The Bandai Playdia was an early nineties video game console released only in Japan.",
+ "url": "https://www.giantbomb.com/bandai-playdia/3045-127/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/3/30183/1661326-playdia.jpg",
+ },
+ UPS.POKEMON_MINI: {
+ "id": 134,
+ "slug": "pokemon-mini",
+ "title": "Pokémon mini",
+ "description": "The Pokemon Mini is a handheld game system developed by Nintendo in the early 2000's focusing solely on mini-games within the Pokémon universe.",
+ "url": "https://www.giantbomb.com/pokemon-mini/3045-134/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/1749907-pokemonmini.jpg",
+ },
+ UPS.PS2: {
+ "id": 19,
+ "slug": "playstation-2",
+ "title": "PlayStation 2",
+ "description": "Sony's PlayStation 2 is the second home video game console produced by Sony Computer Entertainment Incorporated, and to date is the best-selling home console of all time, with an install base of 150 million units since its launch.",
+ "url": "https://www.giantbomb.com/playstation-2/3045-19/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/9595/438868-ps2_full_large.jpg",
+ },
+ UPS.PS3: {
+ "id": 35,
+ "slug": "playstation-3",
+ "title": "PlayStation 3",
+ "description": "The PlayStation 3 (often abbreviated PS3) is the third home video game console created and released by Sony Computer Entertainment Inc.",
+ "url": "https://www.giantbomb.com/playstation-3/3045-35/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426360-logo.jpg",
+ },
+ UPS.PS4: {
+ "id": 146,
+ "slug": "playstation-4",
+ "title": "PlayStation 4",
+ "description": "PlayStation 4 is Sony's fourth home video game console, released on November 15, 2013 in North America, and November 29, 2013 in Europe. On November 10 2016, Sony released the Playstation 4 Pro, an updated version of the console targeting 4K gaming.",
+ "url": "https://www.giantbomb.com/playstation-4/3045-146/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/5/56742/2495936-9012444134_80ba47fd6e_o.jpg",
+ },
+ UPS.PS5: {
+ "id": 176,
+ "slug": "playstation-5",
+ "title": "PlayStation 5",
+ "description": "Sony's fifth PlayStation console launched on November 12, 2020 with two models: a standard edition with a disk drive and a digital edition without.",
+ "url": "https://www.giantbomb.com/playstation-5/3045-176/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3202024-eaqr77pu4aavlo6.jpeg",
+ },
+ UPS.PSP: {
+ "id": 18,
+ "slug": "playstation-portable",
+ "title": "PlayStation Portable",
+ "description": "PlayStation Portable (PSP) is Sony's first entry into the handheld gaming market. The PSP also sports multimedia features including music and video playback, a photo viewer, and an online store. Several model revisions have been released: the PSP-2000, 3000, PSPgo and the PSP-E1000.",
+ "url": "https://www.giantbomb.com/playstation-portable/3045-18/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2122792-pspmain.png",
+ },
+ UPS.PSVITA: {
+ "id": 129,
+ "slug": "playstation-vita",
+ "title": "PlayStation Vita",
+ "description": "PlayStation Vita is Sony's second handheld gaming device.",
+ "url": "https://www.giantbomb.com/playstation-vita/3045-129/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2122519-vita.png",
+ },
+ UPS.PSX: {
+ "id": 22,
+ "slug": "playstation",
+ "title": "PlayStation",
+ "description": "Sony's first video game console established the PlayStation brand. It dominated the 32/64-bit era and was the best-selling home console up until the PlayStation 2.",
+ "url": "https://www.giantbomb.com/playstation/3045-22/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1426393-logo.jpg",
+ },
+ UPS.R_ZONE: {
+ "id": 103,
+ "slug": "r-zone",
+ "title": "R-Zone",
+ "description": "The R-Zone was a heavily marketed, cartridge based LCD handheld that ultimately flopped. It marked Tiger's first attempt at a handheld game system.",
+ "url": "https://www.giantbomb.com/r-zone/3045-103/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954595-tiger-rzone-headset.jpg",
+ },
+ UPS.RCA_STUDIO_II: {
+ "id": 131,
+ "slug": "rca-studio-ii",
+ "title": "RCA Studio II",
+ "description": "Considered by many to be one of the worst video game consoles ever released, the RCA Studio II featured monochrome graphics, number pad controllers, and single channel sound.",
+ "url": "https://www.giantbomb.com/rca-studio-ii/3045-131/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/12/126726/1745663-giant_bomb_sub_3.jpg",
+ },
+ UPS.RX_78: {
+ "id": 201,
+ "slug": "bandai-rx-78",
+ "title": "Bandai RX-78",
+ "description": "The Bandai RX-78 is a home computer that was released in July 1983 in Japan for ¥59,800.",
+ "url": "https://www.giantbomb.com/bandai-rx-78/3045-201/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3300216-screenshot2021-06-29at8.51.54pm.png",
+ },
+ UPS.SAM_COUPE: {
+ "id": 162,
+ "slug": "sam-coupe",
+ "title": "SAM Coupé",
+ "description": "The SAM Coupé could partially emulate the ZX Spectrum, but also ran some games of its own.",
+ "url": "https://www.giantbomb.com/sam-coupe/3045-162/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2810186-1964411787-SAM_C.jpg",
+ },
+ UPS.SATELLAVIEW: {
+ "id": 98,
+ "slug": "satellaview",
+ "title": "Satellaview",
+ "description": "The Satellaview was an add-on for the Super Famicom, released only in Japan. It downloaded games and news via satellite broadcast, and received live, streaming voice acting and hints for some games.",
+ "url": "https://www.giantbomb.com/satellaview/3045-98/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/429/177828-600px_satellaview_with_super_famicom.jpg",
+ },
+ UPS.SATURN: {
+ "id": 42,
+ "slug": "saturn",
+ "title": "Saturn",
+ "description": "A 32-bit game console developed by Sega. Due to development difficulties and the rising popularity of the PlayStation and N64, the Saturn was discontinued overseas in 1998, but continued to sell in Japan until 2000. It was Sega's most successful console in Japan yet their least successful console overseas.",
+ "url": "https://www.giantbomb.com/saturn/3045-42/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/6/60997/1142464-sega_saturn.jpg",
+ },
+ UPS.SEGA_PICO: {
+ "id": 105,
+ "slug": "sega-pico",
+ "title": "Sega Pico",
+ "description": "Sega Pico is an educational video game system aimed at children. The system was also the first Sega system to carry Nintendo licensed games.",
+ "url": "https://www.giantbomb.com/sega-pico/3045-105/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/7465/1761423-pico.jpg",
+ },
+ UPS.SEGA32: {
+ "id": 31,
+ "slug": "sega-32x",
+ "title": "Sega 32X",
+ "description": "Sega's short-lived jump into the 32-bit gaming era began with this add-on to the Sega Genesis.",
+ "url": "https://www.giantbomb.com/sega-32x/3045-31/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954598-800px-sega-genesis-model2-32x.jpg",
+ },
+ UPS.SEGACD: {
+ "id": 29,
+ "slug": "sega-cd",
+ "title": "Sega CD",
+ "description": "The Sega CD was one of the first CD-ROM based gaming consoles. The extra storage space this medium allowed gave rise to inclusion of full motion video, higher quality audio, and improved graphics in games. ",
+ "url": "https://www.giantbomb.com/sega-cd/3045-29/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176099-20070529172508_sega_mega_cd_ii__pal_.jpg",
+ },
+ UPS.SELECT_A_GAME: {
+ "id": 184,
+ "slug": "entex-select-a-game",
+ "title": "Entex Select-A-Game",
+ "description": "Entex's Select-A-Game is a handheld console that was released in 1981. Only six games were officially released before it was discontinued.",
+ "url": "https://www.giantbomb.com/entex-select-a-game/3045-184/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195565-entex-selectagame.jpg",
+ },
+ UPS.SERIES_X_S: {
+ "id": 179,
+ "slug": "xbox-series-xs",
+ "title": "Xbox Series X|S",
+ "description": "The fourth Xbox console from Microsoft launched on November 10, 2020 with two distinct models; Series X and Series S.",
+ "url": "https://www.giantbomb.com/xbox-series-xs/3045-179/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3241522-untitled-2.png",
+ },
+ UPS.SG1000: {
+ "id": 141,
+ "slug": "sega-sg-1000",
+ "title": "Sega SG-1000",
+ "description": "Sega's first foray into home game consoles. Released in 1983 alongside its rival, the Famicom, the SG-1000 is a home console and did not receive a worldwide release. It was later succeeded by the Sega Mark III, better known as the Sega Master System.",
+ "url": "https://www.giantbomb.com/sega-sg-1000/3045-141/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/12/126726/1770079-giant_bomb_sub.jpg",
+ },
+ UPS.SHARP_MZ_80B20002500: {
+ "id": 128,
+ "slug": "sharp-mz",
+ "title": "Sharp MZ",
+ "description": "The Sharp MZ is a home computer that was first released in the late 1970s. It was one of the first home computers to play video games.",
+ "url": "https://www.giantbomb.com/sharp-mz/3045-128/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/5/59247/1674132-mz700.png",
+ },
+ UPS.SHARP_X68000: {
+ "id": 95,
+ "slug": "sharp-x68000",
+ "title": "Sharp X68000",
+ "description": "The Sharp X68000 is a 16/32-bit Japanese computer platform that was originally released in 1987. It was the first home system to offer arcade-quality graphics, serving as the development machine for the Capcom CPS arcade system over the next several years. It was the most powerful home gaming system of the 1980s.",
+ "url": "https://www.giantbomb.com/sharp-x68000/3045-95/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4/176060-x68000xvihd8.jpg",
+ },
+ UPS.SMAKY: {
+ "id": 183,
+ "slug": "smaky",
+ "title": "Smaky",
+ "description": "The Smaky (SMArt KeYboard) is a series of computers developed in Switzerland beginning in 1974.",
+ "url": "https://www.giantbomb.com/smaky/3045-183/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3185777-2560px-smaky_100_img_4149.jpg",
+ },
+ UPS.SMC_777: {
+ "id": 160,
+ "slug": "sony-smc777",
+ "title": "Sony SMC-777",
+ "description": "Many of Sony's SMC series of machines came with built-in genlocks for video production use, but games were also released on some of the different variants. It is also the first computer to utilize 3.5\" diskettes.",
+ "url": "https://www.giantbomb.com/sony-smc777/3045-160/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2791151-smc777-2.jpg",
+ },
+ UPS.SMS: {
+ "id": 8,
+ "slug": "sega-master-system",
+ "title": "Sega Master System",
+ "description": "The 8-bit Master System, while not embraced by a large audience in the US and Japan, was a major success in Europe and South America, and it remains an important and entertaining console that laid the foundation for generations of future console releases from Sega.",
+ "url": "https://www.giantbomb.com/sega-master-system/3045-8/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176128-sega_master_system__6_.jpg",
+ },
+ UPS.SNES: {
+ "id": 9,
+ "slug": "super-nintendo-entertainment-system",
+ "title": "Super Nintendo Entertainment System",
+ "description": "The Super Nintendo Entertainment System was the second home console released by Nintendo.",
+ "url": "https://www.giantbomb.com/super-nintendo-entertainment-system/3045-9/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/8/82063/2287891-snes_sfc.jpg",
+ },
+ UPS.SOCRATES: {
+ "id": 169,
+ "slug": "vtech-socrates",
+ "title": "VTech Socrates",
+ "description": "The VTech Socrates was originally released in 1988.",
+ "url": "https://www.giantbomb.com/vtech-socrates/3045-169/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2975817-4025802893-",
+ },
+ UPS.SORD_M5: {
+ "id": 193,
+ "slug": "sord-m5",
+ "title": "Sord M5",
+ "description": "The Sord M5 is a home computer produced by the Sord Corporation in 1982.",
+ "url": "https://www.giantbomb.com/sord-m5/3045-193/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195653-screen%20shot%202020-05-25%20at%201.10.10%20pm.png",
+ },
+ UPS.STADIA: {
+ "id": 175,
+ "slug": "google-stadia",
+ "title": "Google Stadia",
+ "description": "Stadia was a streaming platform for games powered by Google's cloud infrastructure.",
+ "url": "https://www.giantbomb.com/google-stadia/3045-175/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/3184321-images.jpg",
+ },
+ UPS.STREAMING: {
+ "id": 194,
+ "slug": "stream",
+ "title": "Stream",
+ "description": "Stream games are those designed to be played by viewers on streaming platforms (i.e. Twitch). The streamer initiates the game, viewers join, and watch the events play out.",
+ "url": "https://www.giantbomb.com/stream/3045-194/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3216290-gpbstreamrace.png",
+ },
+ UPS.SUPER_ACAN: {
+ "id": 151,
+ "slug": "super-acan",
+ "title": "Super A'Can",
+ "description": "Funtech released the Super A'Can in Taiwan in 1995. Only 12 games were produced for the 16-bit console before it was scrapped.",
+ "url": "https://www.giantbomb.com/super-acan/3045-151/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954583-super-acan-console-set-h.jpg",
+ },
+ UPS.SUPERGRAFX: {
+ "id": 119,
+ "slug": "supergrafx",
+ "title": "SuperGrafx",
+ "description": "This upgraded PC-Engine was released in Japan in 1989. Few exclusive titles for the system were ever released.",
+ "url": "https://www.giantbomb.com/supergrafx/3045-119/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/3/30116/1317921-pcengine_supergrafx.jpg",
+ },
+ UPS.SUPERVISION: {
+ "id": 147,
+ "slug": "watara-supervision",
+ "title": "Watara Supervision",
+ "description": "The Watara Supervision (known as the QuickShot Supervision in the UK) is a handheld with a Game Boy-like form factor. It was originally released in 1992.",
+ "url": "https://www.giantbomb.com/watara-supervision/3045-147/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954576-watara-supervision-tilted.jpg",
+ },
+ UPS.SWITCH: {
+ "id": 157,
+ "slug": "nintendo-switch",
+ "title": "Nintendo Switch",
+ "description": "Nintendo's home console that can be turned into a portable device by removing it from its TV-dock. Launched worldwide on March 3, 2017.",
+ "url": "https://www.giantbomb.com/nintendo-switch/3045-157/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2894693-screen%20shot%202016-10-20%20at%2010.04.36%20am.png",
+ },
+ UPS.SWITCH_2: {
+ "id": 210,
+ "slug": "nintendo-switch-2",
+ "title": "Nintendo Switch 2",
+ "description": "The Nintendo Switch 2 is Nintendo's eighth home console and the successor to the Nintendo Switch.",
+ "url": "https://www.giantbomb.com/nintendo-switch-2/3045-210/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3679772-untitled-1.png",
+ },
+ UPS.TANDY_VIS: {
+ "id": 153,
+ "slug": "memorex-md-2500-vis",
+ "title": "Memorex MD 2500 VIS",
+ "description": "The Memorex MD 2500, also known as the Tandy VIS, was released in 1992. It ran a version of Windows that can be described as a precursor to WinCE and primarily focused on educational games.",
+ "url": "https://www.giantbomb.com/memorex-md-2500-vis/3045-153/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954664-5814140637-C2fBm.jpg",
+ },
+ UPS.TG16: {
+ "id": 55,
+ "slug": "turbografx-16",
+ "title": "TurboGrafx-16",
+ "description": "The TurboGrafx-16, or PC Engine, is a console that was marketed as the first 16-bit console. It was for some time the market leader in Japan, but failed to capture a large market share in North America. It was best known for featuring the first CD-ROM peripheral, the TurboGrafx-CD. It also introduced features such as a multitap peripheral, internal save memory, and RAM expansions.",
+ "url": "https://www.giantbomb.com/turbografx-16/3045-55/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176127-turbografx_16.jpg",
+ },
+ UPS.TI_994A: {
+ "id": 48,
+ "slug": "ti-994a",
+ "title": "TI-99/4A",
+ "description": "A home computer created by Texas Instruments and released in 1981. It was the first home console to feature a 16-bit processor and included a prototype plug-and-play serial bus similar to what would become known as USB.",
+ "url": "https://www.giantbomb.com/ti-994a/3045-48/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/1427020-logo.jpg",
+ },
+ UPS.TOMAHAWK_F1: {
+ "id": 164,
+ "slug": "fuze-tomahawk-f1",
+ "title": "Fuze Tomahawk F1",
+ "description": "The Android-based Tomahawk F1 is built on Android and is aimed directly at the Chinese market.",
+ "url": "https://www.giantbomb.com/fuze-tomahawk-f1/3045-164/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2850182-screen%20shot%202016-05-10%20at%2010.48.20%20am.png",
+ },
+ UPS.TOMY_TUTOR: {
+ "id": 165,
+ "slug": "tomy-tutor",
+ "title": "Tomy Tutor",
+ "description": "Tomy released the Tutor computer in 1982. It was primarily known in Japan, where it was launched as the Tomy Pyuuta.",
+ "url": "https://www.giantbomb.com/tomy-tutor/3045-165/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2905352-tomy_tutor_white_background.jpg",
+ },
+ UPS.TRS_80: {
+ "id": 63,
+ "slug": "trs-80",
+ "title": "TRS-80",
+ "description": "The TRS-80 was a very popular early microcomputer with standout features such as a full keyboard, included monitor, impressive floating point BASIC programming language, and a $600 pricepoint.",
+ "url": "https://www.giantbomb.com/trs-80/3045-63/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176129-trs80_2.jpg",
+ },
+ UPS.TRS_80_COLOR_COMPUTER: {
+ "id": 68,
+ "slug": "trs-80-coco",
+ "title": "TRS-80 Color Computer",
+ "description": "The TRS-80 Color Computer is a home computer released by Tandy in 1981.",
+ "url": "https://www.giantbomb.com/trs-80-coco/3045-62/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195565-entex-selectagame.jpg",
+ },
+ UPS.TURBOGRAFX_CD: {
+ "id": 53,
+ "slug": "turbografx-cd",
+ "title": "TurboGrafx-CD",
+ "description": "NEC's CD-ROM add-on for its PC Engine / TurboGrafx-16 console. Originally released as the PC Engine CD-ROM² in Japan in 1988, this was the first system to use the CD-ROM format. It would later be released in North America as the TurboGrafx-CD in 1989. While it had little impact on the ailing TurboGrafx-16 in North America, this add-on boosted PC Engine sales in Japan.",
+ "url": "https://www.giantbomb.com/turbografx-cd/3045-53/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176113-turbografx.jpg",
+ },
+ UPS.TVBOY: {
+ "id": 196,
+ "slug": "gakken-compact-vision-tv-boy",
+ "title": "Gakken Compact Vision TV Boy",
+ "description": "The Compact Vision TV Boy is a game console developed by Gakken in 1983. Only six games were released.",
+ "url": "https://www.giantbomb.com/gakken-compact-vision-tv-boy/3045-196/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3220237-screenshot2020-07-15at5.50.02pm.png",
+ },
+ UPS.TVOS: {
+ "id": 159,
+ "slug": "apple-tv",
+ "title": "Apple tvOS",
+ "description": "The fourth-generation Apple TV adds an App Store, opening up the availability of third-party apps and games to a wider degree. The remote also has motion capabilities, opening it up as a game device.",
+ "url": "https://www.giantbomb.com/apple-tv/3045-159/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/3276566-0122928757-0-599.jpg",
+ },
+ UPS.VC_4000: {
+ "id": 191,
+ "slug": "interton-vc-4000",
+ "title": "Interton VC 4000",
+ "description": 'The Interton Video Computer 4000 is an 8-bit console released in Europe (primarily Germany) in 1978. Around forty "cassettes" were released for the system.',
+ "url": "https://www.giantbomb.com/interton-vc-4000/3045-191/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3195628-screen%20shot%202020-05-25%20at%2012.41.55%20pm.png",
+ },
+ UPS.VECTREX: {
+ "id": 76,
+ "slug": "vectrex",
+ "title": "Vectrex",
+ "description": "The Vectrex was a short lived home video game system that used Vector graphics. It is often considered as one of the first home video gaming systems.",
+ "url": "https://www.giantbomb.com/vectrex/3045-76/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954660-2340135697-DAYmR.jpg",
+ },
+ UPS.VIC_20: {
+ "id": 30,
+ "slug": "vic-20",
+ "title": "VIC-20",
+ "description": "An 8-bit computer produced by Commodore Electronics Ltd. Also known as the VIC-1001, it was the first microcomputer to sell one million units.",
+ "url": "https://www.giantbomb.com/vic-20/3045-30/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4/176108-vic.jpg",
+ },
+ UPS.VIEW_MASTER: {
+ "id": 163,
+ "slug": "viewmaster-interactive-vision",
+ "title": "View-Master Interactive Vision",
+ "description": "The View-Master Interactive Vision is a VHS-based platform designed to play a small handful of Sesame Street and other edutainment-based games.",
+ "url": "https://www.giantbomb.com/viewmaster-interactive-vision/3045-163/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/2812035-8637007543-ViewM.jpg",
+ },
+ UPS.VIRTUALBOY: {
+ "id": 79,
+ "slug": "virtual-boy",
+ "title": "Virtual Boy",
+ "description": "The Virtual Boy pioneered portable 3D gaming, but became one of Nintendo's biggest market and financial blunders. Despite innovative display technology, various design and marketing mistakes doomed it to poor sales and quick retirement. Fewer than two dozen titles came out worldwide and only 14 in North America.",
+ "url": "https://www.giantbomb.com/virtual-boy/3045-79/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954596-800px-virtual-boy-set.png",
+ },
+ UPS.VSMILE: {
+ "id": 82,
+ "slug": "vsmile",
+ "title": "V.Smile",
+ "description": "The V.Smile is an educational video game console made for young children.",
+ "url": "https://www.giantbomb.com/vsmile/3045-82/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10324-vsmile.jpg",
+ },
+ UPS.WII: {
+ "id": 36,
+ "slug": "wii",
+ "title": "Wii",
+ "description": "The Nintendo Wii is a home video game console released on November 19, 2006. The Wii's main selling point was the innovative use of motion controls that its signature Wii Remote and Nunchuk controllers allowed for. It became the best selling home console of its respective generation of hardware.",
+ "url": "https://www.giantbomb.com/wii/3045-36/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/10616-wii.jpg",
+ },
+ UPS.WIIU: {
+ "id": 139,
+ "slug": "wii-u",
+ "title": "Wii U",
+ "description": "The Nintendo Wii U, the follow-up to the monstrously popular Nintendo Wii console, launched in North America on November 18th 2012.",
+ "url": "https://www.giantbomb.com/wii-u/3045-139/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/8/82063/2228024-hero.jpg",
+ },
+ UPS.WIN: {
+ "id": 94,
+ "slug": "pc",
+ "title": "PC",
+ "description": "The PC (Personal Computer) is a highly configurable and upgradable gaming platform that, among home systems, sports the widest variety of control methods, largest library of games, and cutting edge graphics and sound capabilities.",
+ "url": "https://www.giantbomb.com/pc/3045-94/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/3661/1650285-ibm_pc_5150.jpg",
+ },
+ UPS.WINDOWS_MOBILE: {
+ "id": 124,
+ "slug": "windows-phone",
+ "title": "Windows Phone",
+ "description": "A now-discontinued smartphone OS made by Microsoft, which had built-in integration with Xbox Live and other services.",
+ "url": "https://www.giantbomb.com/windows-phone/3045-124/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3383080-9699565116-windo.jpg",
+ },
+ UPS.WONDERSWAN: {
+ "id": 65,
+ "slug": "wonderswan",
+ "title": "WonderSwan",
+ "description": "The WonderSwan was a Japan-only handheld game system that had a fairly large library of games and many accessories.",
+ "url": "https://www.giantbomb.com/wonderswan/3045-65/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954594-wonderswan-black-left.jpg",
+ },
+ UPS.WONDERSWAN_COLOR: {
+ "id": 54,
+ "slug": "wonderswan-color",
+ "title": "WonderSwan Color",
+ "description": "A Handheld gaming device from Bandai. The system was noteworthy for supporting play on the system vertically or horizontally, depending on the particular game.",
+ "url": "https://www.giantbomb.com/wonderswan-color/3045-54/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176139-wswpeablu.jpg",
+ },
+ UPS.X1: {
+ "id": 113,
+ "slug": "sharp-x1",
+ "title": "Sharp X1",
+ "description": "The first in Sharp's X line of computers. It was the successor to the Sharp MZ, and was in turn succeeded by the Sharp X68000.",
+ "url": "https://www.giantbomb.com/sharp-x1/3045-113/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/5/59247/1129861-sharpx1.jpg",
+ },
+ UPS.XAVIXPORT: {
+ "id": 132,
+ "slug": "xavixport",
+ "title": "XaviXPORT",
+ "description": "The XaviXPORT is a fitness-oriented system that works with cartridges and fitness gear, like specialized golf clubs, boxing clubs, and baseball bats.",
+ "url": "https://www.giantbomb.com/xavixport/3045-132/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954582-xavix-xavixport-console-fl.jpg",
+ },
+ UPS.XBOX: {
+ "id": 32,
+ "slug": "xbox",
+ "title": "Xbox",
+ "description": "Microsoft's first home gaming system and one of the first to include an internal hard drive and built in online play capability. It was considered the first console to have fully supported meaningful online play.",
+ "url": "https://www.giantbomb.com/xbox/3045-32/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/3699/359843-xbox.jpg",
+ },
+ UPS.XBOX360: {
+ "id": 20,
+ "slug": "xbox-360",
+ "title": "Xbox 360",
+ "description": "The Xbox 360 is the second game console produced by Microsoft Corporation and is the successor to the original Xbox.",
+ "url": "https://www.giantbomb.com/xbox-360/3045-20/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3792703-0260626949-05051.jpg",
+ },
+ UPS.XBOXONE: {
+ "id": 145,
+ "slug": "xbox-one",
+ "title": "Xbox One",
+ "description": "The Xbox One is Microsoft's third video game console. It was released on November 22, 2013 in thirteen countries.",
+ "url": "https://www.giantbomb.com/xbox-one/3045-145/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2485895-xboxd_logo_consle_sensr_controller_f_greenbg_rgb_2013_610x610.jpg",
+ },
+ UPS.ZEEBO: {
+ "id": 122,
+ "slug": "zeebo",
+ "title": "Zeebo",
+ "description": "The Zeebo was a wireless network-enabled console primarily designed for emerging markets.",
+ "url": "https://www.giantbomb.com/zeebo/3045-122/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/8/86078/1391294-zeebo.jpg",
+ },
+ UPS.ZODIAC: {
+ "id": 64,
+ "slug": "zodiac",
+ "title": "Zodiac",
+ "description": "A Palm based PDA/Portable games console with a touch screen, which for a short time had an active homebrew community. It was released in two different editions with different amounts of onboard memory, the Zodiac 1 (32MB) and the Zodiac 2 (128MB).",
+ "url": "https://www.giantbomb.com/zodiac/3045-64/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954587-tapwave-zodiac2-fl.jpg",
+ },
+ UPS.ZXS: {
+ "id": 16,
+ "slug": "zx-spectrum",
+ "title": "ZX Spectrum",
+ "description": "The ZX Spectrum is one of the most popular European computers of all time. Its software library is enormous and its fame in Europe rivals the Commodore 64 in the US.",
+ "url": "https://www.giantbomb.com/zx-spectrum/3045-16/",
+ "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/25/176104-zxspectrum48k.jpg",
+ },
+}
+
+# UPS.PS6: {
+# "id": 212,
+# "slug": "next-generation-playstation",
+# "title": "Next Generation PlayStation",
+# "description": "The sixth PlayStation console developed by Sony.",
+# "url": "https://www.giantbomb.com/next-generation-playstation/3045-212/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3791677-logo.png",
+# },
+# UPS.XBOX5: {
+# "id": 211,
+# "slug": "next-generation-xbox",
+# "title": "Next Generation Xbox",
+# "description": "The fifth Xbox console was first mentioned by Xbox President, Sarah Bond, in February 2024.",
+# "url": "https://www.giantbomb.com/next-generation-xbox/3045-211/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3600344-9619474977-2048p.png",
+# },
+# UPS.PSN_VITA: {
+# "id": 143,
+# "slug": "playstation-network-vita",
+# "title": "PlayStation Network (Vita)",
+# "description": "The PlayStation Network is Sony's digital storefront for delivering games, add-ons, and other content. This specific platform page focuses on the PlayStation Vita version of said storefront.",
+# "url": "https://www.giantbomb.com/playstation-network-vita/3045-143/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2124933-psnpsv1.png",
+# },
+# UPS.NINTENDO_3DS_ESHOP: {
+# "id": 138,
+# "slug": "nintendo-3ds-eshop",
+# "title": "Nintendo 3DS eShop",
+# "description": "The products that make up the various segments of Nintendo's 3DS eShop include new releases, updated version of old games, and emulated versions of old games.",
+# "url": "https://www.giantbomb.com/nintendo-3ds-eshop/3045-138/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3383078-9903589581-3DS-e.jpg",
+# },
+# UPS.NINTENDO_DSI_WARE: {
+# "id": 106,
+# "slug": "dsiware",
+# "title": "DSiWare",
+# "description": "DSiWare is Nintendo's name for its downloadable games appearing on the new Nintendo DSi system.",
+# "url": "https://www.giantbomb.com/dsiware/3045-106/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/26/847036-dsiware.jpg",
+# },
+# UPS.PLAYSTATION_NETWORK_PSP: {
+# "id": 116,
+# "slug": "playstation-network-psp",
+# "title": "PlayStation Network (PSP)",
+# "description": "This platform is specifically for PSP releases that are made available as digital downloads via the PlayStation Store. The Store includes PSP games (some exclusive to PSN), PSP Minis, PSone Classics, trailers, movies, TV shows, and digital comics.",
+# "url": "https://www.giantbomb.com/playstation-network-psp/3045-116/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2122556-psnpsp.png",
+# },
+# UPS.WII_SHOP: {
+# "id": 87,
+# "slug": "wii-shop",
+# "title": "Wii Shop",
+# "description": "The Wii Shop Channel was Nintendo's way of digitally distributing games. It includes WiiWare for newly developed games, as well as the Virtual Console for classic titles from various consoles and arcade systems.",
+# "url": "https://www.giantbomb.com/wii-shop/3045-87/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/4647/2954586-1461028228-maxre.jpg",
+# },
+# UPS.PSN_PS3: {
+# "id": 88,
+# "slug": "playstation-network-ps3",
+# "title": "PlayStation Network (PS3)",
+# "description": "The PlayStation Network is the online service by Sony Computer Entertainment, providing downloads of games, trailers, themes and much more. The service is free, but also offers a paid version for various benefits.",
+# "url": "https://www.giantbomb.com/playstation-network-ps3/3045-88/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2122559-psnps3.png",
+# },
+# UPS.XBOX_360_GAMES_STORE: {
+# "id": 86,
+# "slug": "xbox-360-games-store",
+# "title": "Xbox 360 Games Store",
+# "description": "Xbox Live Games Store was an online store for the Xbox 360 and Xbox One which allows users to purchase games digitally. The service was shut down on July 29th, 2024.",
+# "url": "https://www.giantbomb.com/xbox-360-games-store/3045-86/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/2564457-8881913767-XboxL.png",
+# },
+# UPS._3DO_M2: {
+# "id": 203,
+# "slug": "m2",
+# "title": "M2",
+# "description": "The M2 was a console developed by The 3DO Company. It was originally intended to be an add-on to the 3DO console, but later transitioned into a full-on successor before Panasonic (Matsushita) canceled the project in 1997. The hardware was later implemented in other appliances.",
+# "url": "https://www.giantbomb.com/m2/3045-203/",
+# "url_logo": "https://www.giantbomb.com/a/uploads/square_small/0/1992/3306128-91e5b27a651edbf791d7830c2eb725d2.jpg",
+# },
diff --git a/backend/handler/metadata/hasheous_handler.py b/backend/handler/metadata/hasheous_handler.py
index 289b3688d..a2267aa9c 100644
--- a/backend/handler/metadata/hasheous_handler.py
+++ b/backend/handler/metadata/hasheous_handler.py
@@ -14,6 +14,7 @@ from utils.context import ctx_httpx_client
from .base_handler import BaseRom, MetadataHandler
from .base_handler import UniversalPlatformSlug as UPS
+from .giantbomb_handler import GiantBombMetadata
from .igdb_handler import (
IGDB_AGE_RATINGS,
IGDBMetadata,
@@ -41,6 +42,7 @@ class HasheousPlatform(TypedDict):
igdb_id: NotRequired[int | None]
tgdb_id: NotRequired[int | None]
ra_id: NotRequired[int | None]
+ giantbomb_id: NotRequired[int | None]
class HasheousRom(BaseRom):
@@ -51,6 +53,8 @@ class HasheousRom(BaseRom):
ra_id: NotRequired[int | None]
ra_metadata: NotRequired[RAMetadata]
tgdb_id: NotRequired[int | None]
+ giantbomb_id: NotRequired[int | None]
+ giantbomb_metadata: NotRequired[GiantBombMetadata]
hasheous_metadata: NotRequired[HasheousMetadata]
@@ -107,6 +111,22 @@ def extract_metadata_from_igdb_rom(rom: dict[str, Any]) -> IGDBMetadata:
)
+def extract_metadata_from_giantbomb_rom(rom: dict) -> GiantBombMetadata:
+ print(f"GIANTBOMB ROM: {rom}")
+ return GiantBombMetadata(
+ {
+ "guid": rom.get("guid", ""),
+ "alternative_names": pydash.map_(rom.get("aliases", {}), "name"),
+ "deck": rom.get("deck", ""),
+ "description": rom.get("description", ""),
+ "first_release_date": rom.get("first_release_date", ""),
+ "image": rom.get("image", {}),
+ "age_ratings": pydash.map_(rom.get("original_game_rating", {}), "name"),
+ "site_url": rom.get("site_detail_url", ""),
+ }
+ )
+
+
class HasheousHandler(MetadataHandler):
def __init__(self) -> None:
self.BASE_URL = (
@@ -120,6 +140,9 @@ class HasheousHandler(MetadataHandler):
self.proxy_igdb_game_endpoint = f"{self.BASE_URL}/MetadataProxy/IGDB/Game"
self.proxy_igdb_cover_endpoint = f"{self.BASE_URL}/MetadataProxy/IGDB/Cover"
self.proxy_ra_game_endpoint = f"{self.BASE_URL}/MetadataProxy/RA/Game"
+ self.proxy_giantbomb_game_endpoint = (
+ f"{self.BASE_URL}/MetadataProxy/GiantBomb/game"
+ )
self.app_api_key = (
"UUvh9ef_CddMM4xXO1iqxl9FqEt764v33LU-UiGFc0P34odXjMP9M6MTeE4JZRxZ"
if DEV_MODE
@@ -226,6 +249,7 @@ class HasheousHandler(MetadataHandler):
igdb_id=platform["igdb_id"],
tgdb_id=platform["tgdb_id"],
ra_id=platform["ra_id"],
+ giantbomb_id=platform["giantbomb_id"],
)
async def lookup_rom(self, platform_slug: str, files: list[RomFile]) -> HasheousRom:
@@ -293,6 +317,7 @@ class HasheousHandler(MetadataHandler):
igdb_id = None
tgdb_id = None
ra_id = None
+ giantbomb_id = None
for meta in metadata:
if meta["source"] == "IGDB":
@@ -308,6 +333,8 @@ class HasheousHandler(MetadataHandler):
tgdb_id = meta["immutableId"]
elif meta["source"] == "RetroAchievements":
ra_id = meta["immutableId"]
+ elif meta["source"] == "GiantBomb":
+ giantbomb_id = meta["immutableId"]
url_cover = ""
for attr in attributes:
@@ -321,6 +348,7 @@ class HasheousHandler(MetadataHandler):
igdb_id=int(igdb_id) if igdb_id else None,
tgdb_id=int(tgdb_id) if tgdb_id else None,
ra_id=int(ra_id) if ra_id else None,
+ giantbomb_id=int(giantbomb_id) if giantbomb_id else None,
url_cover=url_cover,
hasheous_metadata=HasheousMetadata(
tosec_match="TOSEC" in signatures,
@@ -401,6 +429,32 @@ class HasheousHandler(MetadataHandler):
return hasheous_rom
+ async def get_giantbomb_game(self, hasheous_rom: HasheousRom) -> HasheousRom:
+ if not self.is_enabled():
+ return hasheous_rom
+ giantbomb_id = hasheous_rom.get("giantbomb_id", None)
+ if giantbomb_id is None:
+ log.info("No GiantBomb ID provided for Hasheous GiantBomb game lookup.")
+ return hasheous_rom
+ giantbomb_game = await self._request(
+ f"{self.proxy_giantbomb_game_endpoint}/3030-{giantbomb_id}",
+ params={"field_list": "*", "format": "json"},
+ method="GET",
+ )
+ if not giantbomb_game:
+ log.debug(f"No Hasheous game found for GiantBomb GUID 3030-{giantbomb_id}.")
+ return hasheous_rom
+ log.info(f"GiantBomb game: {giantbomb_game}")
+
+ return HasheousRom(
+ {
+ **hasheous_rom,
+ "giantbomb_metadata": extract_metadata_from_giantbomb_rom(
+ giantbomb_game
+ ),
+ }
+ )
+
class SlugToHasheousId(TypedDict):
id: int
@@ -409,6 +463,8 @@ class SlugToHasheousId(TypedDict):
igdb_slug: str | None
tgdb_id: int | None
ra_id: int | None
+ giantbomb_id: int | None
+ giantbomb_slug: str | None
HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
@@ -418,7 +474,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "3do",
"name": "3DO Interactive Multiplayer",
"ra_id": 43,
- "tgdb_id": None,
+ "tgdb_id": 25,
+ "giantbomb_id": 26,
+ "giantbomb_slug": "3do",
},
UPS.N3DS: {
"id": 62,
@@ -426,7 +484,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "3ds",
"name": "Nintendo 3DS",
"ra_id": 62,
- "tgdb_id": None,
+ "tgdb_id": 4912,
+ "giantbomb_id": 117,
+ "giantbomb_slug": "nintendo-3ds",
},
UPS.N64DD: {
"id": 65,
@@ -435,6 +495,128 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Nintendo 64DD",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 101,
+ "giantbomb_slug": "nintendo-64dd",
+ },
+ UPS.APF: {
+ "id": 61862,
+ "igdb_id": None,
+ "igdb_slug": None,
+ "name": "APF M-1000",
+ "ra_id": None,
+ "tgdb_id": 4969,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
+ },
+ UPS.C64: {
+ "id": 1,
+ "igdb_id": 15,
+ "igdb_slug": None,
+ "name": "Commodore 64",
+ "ra_id": 30,
+ "tgdb_id": 40,
+ "giantbomb_id": 14,
+ "giantbomb_slug": None,
+ },
+ UPS.ARCADIA_2001: {
+ "id": 322291,
+ "igdb_id": None,
+ "igdb_slug": None,
+ "name": "Emerson Arcadia 2001",
+ "ra_id": None,
+ "tgdb_id": 4963,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
+ },
+ UPS.EPOCH_SUPER_CASSETTE_VISION: {
+ "id": 299046,
+ "igdb_id": 376,
+ "igdb_slug": None,
+ "name": "Epoch Super Cassette Vision",
+ "ra_id": None,
+ "tgdb_id": 4966,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
+ },
+ UPS.EXIDY_SORCERER: {
+ "id": 299154,
+ "igdb_id": 236,
+ "igdb_slug": None,
+ "name": "Exidy Sorcerer",
+ "ra_id": None,
+ "tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
+ },
+ UPS.FDS: {
+ "id": 69,
+ "igdb_id": 51,
+ "igdb_slug": None,
+ "name": "Family Computer Disk System",
+ "ra_id": None,
+ "tgdb_id": None,
+ "giantbomb_id": 91,
+ "giantbomb_slug": None,
+ },
+ UPS.MEMOTECH_MTX: {
+ "id": 338636,
+ "igdb_id": None,
+ "igdb_slug": None,
+ "name": "Memotech MTX",
+ "ra_id": None,
+ "tgdb_id": None,
+ "giantbomb_id": 206,
+ "giantbomb_slug": None,
+ },
+ UPS.G_AND_W: {
+ "id": 273860,
+ "igdb_id": 307,
+ "igdb_slug": None,
+ "name": "Nintendo Game & Watch",
+ "ra_id": None,
+ "tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
+ },
+ UPS.PC_8800_SERIES: {
+ "id": 311550,
+ "igdb_id": None,
+ "igdb_slug": None,
+ "name": "PC-8000/8800",
+ "ra_id": 47,
+ "tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
+ },
+ UPS.LASERACTIVE: {
+ "id": 261429,
+ "igdb_id": None,
+ "igdb_slug": None,
+ "name": "Pioneer LaserActive",
+ "ra_id": None,
+ "tgdb_id": 4975,
+ "giantbomb_id": 92,
+ "giantbomb_slug": None,
+ },
+ UPS.SG1000: {
+ "id": 83,
+ "igdb_id": 84,
+ "igdb_slug": None,
+ "name": "Sega SG-1000",
+ "ra_id": 33,
+ "tgdb_id": 4949,
+ "giantbomb_id": 141,
+ "giantbomb_slug": None,
+ },
+ UPS.SORD_M5: {
+ "id": 279962,
+ "igdb_id": None,
+ "igdb_slug": None,
+ "name": "Sord M5",
+ "ra_id": None,
+ "tgdb_id": None,
+ "giantbomb_id": 193,
+ "giantbomb_slug": None,
},
UPS.ACORN_ARCHIMEDES: {
"id": 24,
@@ -442,7 +624,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "acorn-archimedes",
"name": "Acorn Archimedes",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4944,
+ "giantbomb_id": 125,
+ "giantbomb_slug": "acorn-archimedes",
},
UPS.ACORN_ELECTRON: {
"id": 25,
@@ -450,7 +634,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "acorn-electron",
"name": "Acorn Electron",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4954,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.ACPC: {
"id": 28,
@@ -458,7 +644,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "acpc",
"name": "Amstrad CPC",
"ra_id": 37,
- "tgdb_id": None,
+ "tgdb_id": 4914,
+ "giantbomb_id": 11,
+ "giantbomb_slug": "amstrad-cpc",
},
UPS.ACTION_MAX: {
"id": 232983,
@@ -466,7 +654,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "",
"name": "Action Max",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4976,
+ "giantbomb_id": 148,
+ "giantbomb_slug": "action-max",
},
UPS.ADVENTURE_VISION: {
"id": 234388,
@@ -474,7 +664,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "",
"name": "Entex Adventure Vision",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4974,
+ "giantbomb_id": 93,
+ "giantbomb_slug": "adventure-vision",
},
UPS.ALTAIR_8800: {
"id": 234456,
@@ -483,6 +675,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "MITS Altair 8800",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.AMIGA: {
"id": 3,
@@ -490,7 +684,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "amiga",
"name": "Commodore Amiga",
"ra_id": 35,
- "tgdb_id": None,
+ "tgdb_id": 4911,
+ "giantbomb_id": 1,
+ "giantbomb_slug": "amiga",
},
UPS.AMIGA_CD32: {
"id": 161823,
@@ -498,7 +694,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "amiga-cd32",
"name": "Commodore CD32",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4947,
+ "giantbomb_id": 39,
+ "giantbomb_slug": "amiga-cd32",
},
UPS.AMSTRAD_GX4000: {
"id": 61540,
@@ -506,7 +704,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "amstrad-gx4000",
"name": "Amstrad GX4000",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4999,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.AMSTRAD_PCW: {
"id": 29,
@@ -515,6 +715,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Amstrad PCW",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 197,
+ "giantbomb_slug": "amstrad-pcw",
},
UPS.APF: {
"id": 61738,
@@ -523,6 +725,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "APF Imagination Machine",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 190,
+ "giantbomb_slug": "apf-mp-1000",
},
UPS.APPLE: {
"id": 61885,
@@ -531,6 +735,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Apple I",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.APPLE_IIGS: {
"id": 21,
@@ -539,6 +745,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Apple IIGS",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 38,
+ "giantbomb_slug": "apple-iigs",
},
UPS.APPLE_LISA: {
"id": 69659,
@@ -547,6 +755,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Apple Lisa",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.APPLE_PIPPIN: {
"id": 22,
@@ -554,7 +764,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "apple-pippin",
"name": "Apple Pippin",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5001,
+ "giantbomb_id": 102,
+ "giantbomb_slug": None,
},
UPS.APPLEII: {
"id": 20,
@@ -562,7 +774,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "appleii",
"name": "Apple II",
"ra_id": 38,
- "tgdb_id": None,
+ "tgdb_id": 4942,
+ "giantbomb_id": 12,
+ "giantbomb_slug": "apple-ii",
},
UPS.APPLEIII: {
"id": 63154,
@@ -571,6 +785,18 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Apple III",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
+ },
+ UPS.AQUARIUS: {
+ "id": 51,
+ "igdb_id": None,
+ "igdb_slug": "",
+ "name": "Mattel Aquarius",
+ "ra_id": None,
+ "tgdb_id": 4989,
+ "giantbomb_id": 100,
+ "giantbomb_slug": "aquarius",
},
UPS.ARCADE: {
"id": 178,
@@ -578,7 +804,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "arcade",
"name": "Arcade",
"ra_id": 27,
- "tgdb_id": None,
+ "tgdb_id": 23,
+ "giantbomb_id": 84,
+ "giantbomb_slug": "arcade",
},
UPS.ARDUBOY: {
"id": 244294,
@@ -587,6 +815,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Arduboy",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.ASTROCADE: {
"id": 31,
@@ -594,7 +824,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "astrocade",
"name": "Bally Astrocade",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4968,
+ "giantbomb_id": 120,
+ "giantbomb_slug": "bally-astrocade",
},
UPS.ATARI_ST: {
"id": 15,
@@ -602,7 +834,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "atari-st",
"name": "Atari ST/STE",
"ra_id": 36,
- "tgdb_id": None,
+ "tgdb_id": 4937,
+ "giantbomb_id": 13,
+ "giantbomb_slug": "atari-st",
},
UPS.ATARI2600: {
"id": 12,
@@ -610,7 +844,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "atari2600",
"name": "Atari 2600",
"ra_id": 25,
- "tgdb_id": None,
+ "tgdb_id": 22,
+ "giantbomb_id": 40,
+ "giantbomb_slug": "atari-2600",
},
UPS.ATARI5200: {
"id": 17,
@@ -618,7 +854,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "atari5200",
"name": "Atari 5200",
"ra_id": 50,
- "tgdb_id": None,
+ "tgdb_id": 26,
+ "giantbomb_id": 67,
+ "giantbomb_slug": "atari-5200",
},
UPS.ATARI7800: {
"id": 16,
@@ -626,7 +864,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "atari7800",
"name": "Atari 7800",
"ra_id": 51,
- "tgdb_id": None,
+ "tgdb_id": 27,
+ "giantbomb_id": 70,
+ "giantbomb_slug": "atari-7800",
},
UPS.ATARI8BIT: {
"id": 18,
@@ -635,6 +875,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Atari 8-bit",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 24,
+ "giantbomb_slug": "atari-8-bit",
},
UPS.ATOM: {
"id": 55099,
@@ -642,7 +884,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "",
"name": "Acorn Atom",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5014,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.BBCMICRO: {
"id": 26,
@@ -650,7 +894,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "bbcmicro",
"name": "BBC Micro",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5013,
+ "giantbomb_id": 110,
+ "giantbomb_slug": "bbc-micro",
},
UPS.BEENA: {
"id": 82,
@@ -659,6 +905,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Sega Advanced Pico Beena",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 174,
+ "giantbomb_slug": None,
},
UPS.BIT_90: {
"id": 97614,
@@ -667,6 +915,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Bit Corporation BIT 90",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.C_PLUS_4: {
"id": 7,
@@ -674,7 +924,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "c-plus-4",
"name": "Commodore Plus/4",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5007,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.C128: {
"id": 8,
@@ -682,7 +934,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "",
"name": "Commodore 128",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4946,
+ "giantbomb_id": 58,
+ "giantbomb_slug": "commodore-128",
},
UPS.C16: {
"id": 6,
@@ -690,7 +944,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "c16",
"name": "Commodore 16",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5006,
+ "giantbomb_id": 150,
+ "giantbomb_slug": "commodore-16",
},
UPS.C64: {
"id": 5,
@@ -698,7 +954,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "c64",
"name": "Commodore MAX",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 40,
+ "giantbomb_id": 14,
+ "giantbomb_slug": "commodore-64",
},
UPS.CAMPUTERS_LYNX: {
"id": 97720,
@@ -707,6 +965,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Camputers Lynx",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.CASIO_CFX_9850: {
"id": 97839,
@@ -715,6 +975,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Casio CFX-9850",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.CASIO_FP_1000: {
"id": 98757,
@@ -723,6 +985,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Casio FP-1000 & FP-1100",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.CASIO_LOOPY: {
"id": 37,
@@ -730,7 +994,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "casio-loopy",
"name": "Casio Loopy",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4991,
+ "giantbomb_id": 126,
+ "giantbomb_slug": "casio-loopy",
},
UPS.CASIO_PB_1000: {
"id": 98771,
@@ -739,6 +1005,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Casio PB-1000",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.CASIO_PV_1000: {
"id": 98793,
@@ -746,7 +1014,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "",
"name": "Casio PV-1000",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4964,
+ "giantbomb_id": 149,
+ "giantbomb_slug": "casio-pv-1000",
},
UPS.CASIO_PV_2000: {
"id": 98811,
@@ -755,6 +1025,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Casio PV-2000",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 187,
+ "giantbomb_slug": "casio-pv-2000",
},
UPS.COLECOVISION: {
"id": 39,
@@ -762,7 +1034,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "colecovision",
"name": "ColecoVision",
"ra_id": 44,
- "tgdb_id": None,
+ "tgdb_id": 31,
+ "giantbomb_id": 47,
+ "giantbomb_slug": "colecovision",
},
UPS.COMMANDER_X16: {
"id": 54769,
@@ -771,6 +1045,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "8-Bit Productions Commander X16",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.COMMODORE_CDTV: {
"id": 9,
@@ -779,6 +1055,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Commodore CDTV",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 142,
+ "giantbomb_slug": "commodore-cdtv",
},
UPS.CPET: {
"id": 10,
@@ -786,7 +1064,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "cpet",
"name": "Commodore PET",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5008,
+ "giantbomb_id": 62,
+ "giantbomb_slug": "commodore-petcbm",
},
UPS.DC: {
"id": 54694,
@@ -794,7 +1074,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "dc",
"name": "Sega Dreamcast",
"ra_id": 40,
- "tgdb_id": None,
+ "tgdb_id": 16,
+ "giantbomb_id": 37,
+ "giantbomb_slug": "dreamcast",
},
UPS.DOS: {
"id": 233075,
@@ -802,7 +1084,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "dos",
"name": "Microsoft DOS",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 1,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.EXCALIBUR_64: {
"id": 97612,
@@ -811,6 +1095,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "BGR Computers Excalibur 64",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.FAIRCHILD_CHANNEL_F: {
"id": 43,
@@ -818,7 +1104,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "fairchild-channel-f",
"name": "Fairchild Channel F",
"ra_id": 57,
- "tgdb_id": None,
+ "tgdb_id": 4928,
+ "giantbomb_id": 66,
+ "giantbomb_slug": "channel-f",
},
UPS.FDS: {
"id": 54692,
@@ -826,7 +1114,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "fds",
"name": "Nintendo Famicom Disk System",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4936,
+ "giantbomb_id": 91,
+ "giantbomb_slug": "famicom-disk-system",
},
UPS.FM_TOWNS: {
"id": 238902,
@@ -835,6 +1125,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Fujitsu - FM Towns",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 108,
+ "giantbomb_slug": "fm-towns",
},
UPS.GAMATE: {
"id": 97616,
@@ -843,6 +1135,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Bit Corporation Gamate",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 166,
+ "giantbomb_slug": "gamate",
},
UPS.GAMEGEAR: {
"id": 84,
@@ -850,7 +1144,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "gamegear",
"name": "Sega Game Gear",
"ra_id": 15,
- "tgdb_id": None,
+ "tgdb_id": 20,
+ "giantbomb_id": 5,
+ "giantbomb_slug": "game-gear",
},
UPS.GB: {
"id": 70,
@@ -858,7 +1154,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "gb",
"name": "Nintendo GameBoy",
"ra_id": 4,
- "tgdb_id": None,
+ "tgdb_id": 4,
+ "giantbomb_id": 3,
+ "giantbomb_slug": "game-boy",
},
UPS.GBA: {
"id": 71,
@@ -866,7 +1164,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "gba",
"name": "Nintendo Game Boy Advance",
"ra_id": 5,
- "tgdb_id": None,
+ "tgdb_id": 5,
+ "giantbomb_id": 4,
+ "giantbomb_slug": "game-boy-advance",
},
UPS.GBC: {
"id": 72,
@@ -874,7 +1174,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "gbc",
"name": "Nintendo Game Boy Color",
"ra_id": 6,
- "tgdb_id": None,
+ "tgdb_id": 41,
+ "giantbomb_id": 57,
+ "giantbomb_slug": "game-boy-color",
},
UPS.GENESIS: {
"id": 86,
@@ -882,7 +1184,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "genesis-slash-megadrive",
"name": "Sega Mega Drive / Genesis",
"ra_id": 1,
- "tgdb_id": None,
+ "tgdb_id": 18,
+ "giantbomb_id": 6,
+ "giantbomb_slug": "genesis",
},
UPS.INTELLIVISION: {
"id": 52,
@@ -890,7 +1194,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "intellivision",
"name": "Mattel Intellivision",
"ra_id": 45,
- "tgdb_id": None,
+ "tgdb_id": 32,
+ "giantbomb_id": 51,
+ "giantbomb_slug": "intellivision",
},
UPS.JAGUAR: {
"id": 13,
@@ -898,7 +1204,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "jaguar",
"name": "Atari Jaguar",
"ra_id": 17,
- "tgdb_id": None,
+ "tgdb_id": 28,
+ "giantbomb_id": 28,
+ "giantbomb_slug": "jaguar",
},
UPS.LINUX: {
"id": 233076,
@@ -907,6 +1215,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Linux",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 152,
+ "giantbomb_slug": "linux",
},
UPS.LYNX: {
"id": 14,
@@ -914,7 +1224,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "lynx",
"name": "Atari Lynx",
"ra_id": 13,
- "tgdb_id": None,
+ "tgdb_id": 4924,
+ "giantbomb_id": 7,
+ "giantbomb_slug": "atari-lynx",
},
UPS.MAC: {
"id": 30,
@@ -922,15 +1234,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "mac",
"name": "Apple Mac",
"ra_id": None,
- "tgdb_id": None,
- },
- UPS.AQUARIUS: {
- "id": 51,
- "igdb_id": None,
- "igdb_slug": "",
- "name": "Mattel Aquarius",
- "ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 37,
+ "giantbomb_id": 17,
+ "giantbomb_slug": "mac",
},
UPS.MICROBEE: {
"id": 69714,
@@ -939,6 +1245,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Applied Technology MicroBee",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 168,
+ "giantbomb_slug": "micro-bee",
},
UPS.MSX: {
"id": 53,
@@ -946,7 +1254,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "msx",
"name": "MSX",
"ra_id": 29,
- "tgdb_id": None,
+ "tgdb_id": 4929,
+ "giantbomb_id": 15,
+ "giantbomb_slug": "msx",
},
UPS.MSX2: {
"id": 54,
@@ -955,6 +1265,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "MSX 2",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.MULTIVISION: {
"id": 52922,
@@ -963,6 +1275,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Tsukuda Original Othello Multivision",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.N64: {
"id": 64,
@@ -970,7 +1284,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "n64",
"name": "Nintendo 64",
"ra_id": 2,
- "tgdb_id": None,
+ "tgdb_id": 3,
+ "giantbomb_id": 43,
+ "giantbomb_slug": "nintendo-64",
},
UPS.NDS: {
"id": 66,
@@ -978,7 +1294,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "nds",
"name": "Nintendo DS",
"ra_id": 18,
- "tgdb_id": None,
+ "tgdb_id": 8,
+ "giantbomb_id": 52,
+ "giantbomb_slug": "nintendo-ds",
},
UPS.NEC_PC_6000_SERIES: {
"id": 58,
@@ -987,6 +1305,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "NEC PC-6000",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.NEO_GEO_CD: {
"id": 161829,
@@ -994,7 +1314,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "neo-geo-cd",
"name": "Neo Geo CD",
"ra_id": 56,
- "tgdb_id": None,
+ "tgdb_id": 4956,
+ "giantbomb_id": 167,
+ "giantbomb_slug": "neo-geo-cd",
},
UPS.NEO_GEO_POCKET: {
"id": 97,
@@ -1002,7 +1324,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "neo-geo-pocket",
"name": "Neo Geo Pocket",
"ra_id": 14,
- "tgdb_id": None,
+ "tgdb_id": 4922,
+ "giantbomb_id": 80,
+ "giantbomb_slug": "neo-geo-pocket",
},
UPS.NEO_GEO_POCKET_COLOR: {
"id": 98,
@@ -1010,7 +1334,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "neo-geo-pocket-color",
"name": "Neo Geo Pocket Color",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4923,
+ "giantbomb_id": 81,
+ "giantbomb_slug": "neo-geo-pocket-color",
},
UPS.NEOGEOAES: {
"id": 96,
@@ -1018,7 +1344,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "neogeoaes",
"name": "Neo Geo",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 24,
+ "giantbomb_id": 25,
+ "giantbomb_slug": "neo-geo",
},
UPS.NES: {
"id": 68,
@@ -1026,7 +1354,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "nes",
"name": "Nintendo Entertainment System",
"ra_id": 7,
- "tgdb_id": None,
+ "tgdb_id": 7,
+ "giantbomb_id": 21,
+ "giantbomb_slug": "nintendo-entertainment-system",
},
UPS.NEW_NINTENDON3DS: {
"id": 63,
@@ -1035,6 +1365,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Nintendo New 3DS",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 156,
+ "giantbomb_slug": "new-nintendo-3ds",
},
UPS.NGC: {
"id": 73,
@@ -1042,7 +1374,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "ngc",
"name": "Nintendo GameCube",
"ra_id": 16,
- "tgdb_id": None,
+ "tgdb_id": 2,
+ "giantbomb_id": 23,
+ "giantbomb_slug": "gamecube",
},
UPS.NINTENDO_DSI: {
"id": 67,
@@ -1051,6 +1385,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Nintendo DSi",
"ra_id": 78,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.ODYSSEY: {
"id": 48,
@@ -1058,7 +1394,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "odyssey--1",
"name": "Magnavox Odyssey",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4961,
+ "giantbomb_id": 74,
+ "giantbomb_slug": "odyssey",
},
UPS.ODYSSEY_2: {
"id": 49,
@@ -1066,7 +1404,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "odyssey-2-slash-videopac-g7000",
"name": "Magnavox Odyssey 2",
"ra_id": 23,
- "tgdb_id": None,
+ "tgdb_id": 4927,
+ "giantbomb_id": 60,
+ "giantbomb_slug": None,
},
UPS.PC_8800_SERIES: {
"id": 57,
@@ -1074,7 +1414,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "pc-8800-series",
"name": "NEC PC-8800",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4933,
+ "giantbomb_id": 47,
+ "giantbomb_slug": "nec-pc-8800-series",
},
UPS.PC_9800_SERIES: {
"id": 59,
@@ -1083,6 +1425,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "NEC PC-9000",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 112,
+ "giantbomb_slug": "nec-pc-9801",
},
UPS.PC_JR: {
"id": 233269,
@@ -1091,6 +1435,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "IBM PCjr",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.PHILIPS_CD_I: {
"id": 161827,
@@ -1098,7 +1444,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "philips-cd-i",
"name": "Philips CD-i",
"ra_id": 42,
- "tgdb_id": None,
+ "tgdb_id": 4917,
+ "giantbomb_id": 27,
+ "giantbomb_slug": "cd-i",
},
UPS.POCKET_CHALLENGE_V2: {
"id": 97550,
@@ -1107,6 +1455,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Benesse Pocket Challenge V2",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.POCKET_CHALLENGE_W: {
"id": 97577,
@@ -1115,6 +1465,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Benesse Pocket Challenge W",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.POCKETSTATION: {
"id": 103,
@@ -1123,6 +1475,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Sony PocketStation",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.POKEMON_MINI: {
"id": 244733,
@@ -1131,6 +1485,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Nintendo Pokemon Mini",
"ra_id": 24,
"tgdb_id": None,
+ "giantbomb_id": 134,
+ "giantbomb_slug": "pokemon-mini",
},
UPS.PS2: {
"id": 101,
@@ -1138,7 +1494,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "ps2",
"name": "Sony PlayStation 2",
"ra_id": 21,
- "tgdb_id": None,
+ "tgdb_id": 11,
+ "giantbomb_id": 19,
+ "giantbomb_slug": "playstation-2",
},
UPS.PS3: {
"id": 161830,
@@ -1146,7 +1504,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "ps3",
"name": "Sony Playstation 3",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 12,
+ "giantbomb_id": 35,
+ "giantbomb_slug": "playstation-3",
},
UPS.PS4: {
"id": 232986,
@@ -1154,7 +1514,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "ps4--1",
"name": "Sony Playstation 4",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4919,
+ "giantbomb_id": 146,
+ "giantbomb_slug": "playstation-4",
},
UPS.PS5: {
"id": 232987,
@@ -1162,7 +1524,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "ps5",
"name": "Sony Playstation 5",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4980,
+ "giantbomb_id": 176,
+ "giantbomb_slug": "playstation-5",
},
UPS.PSP: {
"id": 161831,
@@ -1170,7 +1534,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "psp",
"name": "Sony Playstation Portable",
"ra_id": 41,
- "tgdb_id": None,
+ "tgdb_id": 13,
+ "giantbomb_id": 18,
+ "giantbomb_slug": "playstation-portable",
},
UPS.PSVITA: {
"id": 102,
@@ -1178,7 +1544,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "psvita",
"name": "Sony PlayStation Vita",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 39,
+ "giantbomb_id": 129,
+ "giantbomb_slug": "playstation-vita",
},
UPS.PSX: {
"id": 100,
@@ -1186,7 +1554,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "ps",
"name": "Sony PlayStation",
"ra_id": 12,
- "tgdb_id": None,
+ "tgdb_id": 10,
+ "giantbomb_id": 22,
+ "giantbomb_slug": "playstation",
},
UPS.RCA_STUDIO_II: {
"id": 234745,
@@ -1194,7 +1564,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "",
"name": "RCA Studio II",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4967,
+ "giantbomb_id": 131,
+ "giantbomb_slug": "rca-studio-ii",
},
UPS.SATURN: {
"id": 54695,
@@ -1202,7 +1574,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "saturn",
"name": "Sega Saturn",
"ra_id": 39,
- "tgdb_id": None,
+ "tgdb_id": 17,
+ "giantbomb_id": 42,
+ "giantbomb_slug": "saturn",
},
UPS.SC3000: {
"id": 52165,
@@ -1211,6 +1585,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Sega Computer 3000",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.SEGA_PICO: {
"id": 81,
@@ -1218,7 +1594,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "sega-pico",
"name": "Sega Pico",
"ra_id": 68,
- "tgdb_id": None,
+ "tgdb_id": 4958,
+ "giantbomb_id": 105,
+ "giantbomb_slug": "sega-pico",
},
UPS.SEGA32: {
"id": 80,
@@ -1226,15 +1604,19 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "sega32",
"name": "Sega 32X",
"ra_id": 10,
- "tgdb_id": None,
+ "tgdb_id": 33,
+ "giantbomb_id": 31,
+ "giantbomb_slug": "sega-32x",
},
UPS.SEGACD: {
"id": 161828,
- "igdb_id": None,
+ "igdb_id": 78,
"igdb_slug": "",
"name": "Sega Mega CD / Sega CD",
"ra_id": 9,
- "tgdb_id": None,
+ "tgdb_id": 21,
+ "giantbomb_id": 29,
+ "giantbomb_slug": "sega-cd",
},
UPS.SERIES_X_S: {
"id": 232984,
@@ -1242,7 +1624,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "series-x-s",
"name": "Microsoft Xbox Series X",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4981,
+ "giantbomb_id": 179,
+ "giantbomb_slug": "xbox-series-xs",
},
UPS.SFAM: {
"id": 233081,
@@ -1251,6 +1635,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Super Famicom",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.SG1000: {
"id": 244470,
@@ -1259,6 +1645,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "SG-1000",
"ra_id": 33,
"tgdb_id": None,
+ "giantbomb_id": 141,
+ "giantbomb_slug": "sega-sg-1000",
},
UPS.SHARP_X68000: {
"id": 90,
@@ -1266,7 +1654,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "sharp-x68000",
"name": "Sharp X68000",
"ra_id": 52,
- "tgdb_id": None,
+ "tgdb_id": 4931,
+ "giantbomb_id": 95,
+ "giantbomb_slug": "sharp-x68000",
},
UPS.SINCLAIR_QL: {
"id": 92,
@@ -1274,7 +1664,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "sinclair-ql",
"name": "Sinclair QL",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5020,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.SMS: {
"id": 85,
@@ -1282,7 +1674,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "sms",
"name": "Sega Master System",
"ra_id": 11,
- "tgdb_id": None,
+ "tgdb_id": 35,
+ "giantbomb_id": 8,
+ "giantbomb_slug": "sega-master-system",
},
UPS.SNES: {
"id": 74,
@@ -1290,7 +1684,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "snes",
"name": "Super Nintendo Entertainment System",
"ra_id": 3,
- "tgdb_id": None,
+ "tgdb_id": 6,
+ "giantbomb_id": 9,
+ "giantbomb_slug": "super-nintendo-entertainment-system",
},
UPS.SUPER_VISION_8000: {
"id": 97267,
@@ -1299,6 +1695,18 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Bandai Super Vision 8000",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
+ },
+ UPS.SUPERVISION: {
+ "id": 244828,
+ "igdb_id": 415,
+ "igdb_slug": "watara-slash-quickshot-supervision",
+ "name": "Watara Supervision",
+ "ra_id": 63,
+ "tgdb_id": 4959,
+ "giantbomb_id": 147,
+ "giantbomb_slug": "watara-supervision",
},
UPS.SWITCH: {
"id": 233067,
@@ -1306,7 +1714,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "switch",
"name": "Nintendo Switch",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4971,
+ "giantbomb_id": 157,
+ "giantbomb_slug": "nintendo-switch",
},
UPS.TG16: {
"id": 245372,
@@ -1314,7 +1724,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "turbografx16--1",
"name": "TurboGrafx-16/PC Engine",
"ra_id": 8,
- "tgdb_id": None,
+ "tgdb_id": 34,
+ "giantbomb_id": 55,
+ "giantbomb_slug": "turbografx-16",
},
UPS.TI_82: {
"id": 47973,
@@ -1323,6 +1735,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Texas Instruments TI-82",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.TI_83: {
"id": 243852,
@@ -1331,6 +1745,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Texas Instruments TI-83",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.TRS_80: {
"id": 105,
@@ -1339,6 +1755,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Tandy/RadioShack TRS-80",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": 63,
+ "giantbomb_slug": "trs-80",
},
UPS.TRS_80_COLOR_COMPUTER: {
"id": 106,
@@ -1346,7 +1764,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "trs-80-color-computer",
"name": "Tandy/RadioShack TRS-80 Color Computer",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4941,
+ "giantbomb_id": 68,
+ "giantbomb_slug": "trs-80-coco",
},
UPS.TURBOGRAFX_CD: {
"id": 247350,
@@ -1354,7 +1774,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "turbografx-16-slash-pc-engine-cd",
"name": "Turbografx-16/PC Engine CD",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4955,
+ "giantbomb_id": 53,
+ "giantbomb_slug": "turbografx-cd",
},
UPS.VECTREX: {
"id": 45,
@@ -1362,7 +1784,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "vectrex",
"name": "Vectrex",
"ra_id": 46,
- "tgdb_id": None,
+ "tgdb_id": 4939,
+ "giantbomb_id": 76,
+ "giantbomb_slug": "vectrex",
},
UPS.VIC_20: {
"id": 4,
@@ -1370,7 +1794,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "vic-20",
"name": "Commodore VIC20",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4945,
+ "giantbomb_id": 30,
+ "giantbomb_slug": "vic-20",
},
UPS.VIRTUALBOY: {
"id": 75,
@@ -1378,23 +1804,19 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "virtualboy",
"name": "Nintendo Virtual Boy",
"ra_id": 28,
- "tgdb_id": None,
- },
- UPS.SUPERVISION: {
- "id": 244828,
- "igdb_id": 415,
- "igdb_slug": "watara-slash-quickshot-supervision",
- "name": "Watara Supervision",
- "ra_id": 63,
- "tgdb_id": None,
+ "tgdb_id": 4918,
+ "giantbomb_id": 79,
+ "giantbomb_slug": "virtual-boy",
},
UPS.WII: {
"id": 76,
"igdb_id": 5,
"igdb_slug": "wii",
"name": "Nintendo Wii",
- "ra_id": None,
- "tgdb_id": None,
+ "ra_id": 19,
+ "tgdb_id": 9,
+ "giantbomb_id": 36,
+ "giantbomb_slug": "wii",
},
UPS.WIIU: {
"id": 77,
@@ -1402,7 +1824,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "wiiu",
"name": "Nintendo WiiU",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 38,
+ "giantbomb_id": 139,
+ "giantbomb_slug": "wii-u",
},
UPS.WIN: {
"id": 233074,
@@ -1410,7 +1834,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "win",
"name": "Microsoft Windows",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 1,
+ "giantbomb_id": 94,
+ "giantbomb_slug": "pc",
},
UPS.WONDERSWAN: {
"id": 34,
@@ -1418,7 +1844,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "wonderswan",
"name": "Bandai WonderSwan",
"ra_id": 53,
- "tgdb_id": None,
+ "tgdb_id": 4925,
+ "giantbomb_id": 65,
+ "giantbomb_slug": "wonderswan",
},
UPS.WONDERSWAN_COLOR: {
"id": 35,
@@ -1426,7 +1854,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "wonderswan-color",
"name": "Bandai WonderSwan Color",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4926,
+ "giantbomb_id": 54,
+ "giantbomb_slug": "wonderswan-color",
},
UPS.X1: {
"id": 89,
@@ -1434,7 +1864,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "x1",
"name": "Sharp X1",
"ra_id": 64,
- "tgdb_id": None,
+ "tgdb_id": 4977,
+ "giantbomb_id": 113,
+ "giantbomb_slug": "sharp-x1",
},
UPS.XBOX: {
"id": 54696,
@@ -1442,7 +1874,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "xbox",
"name": "Microsoft Xbox",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 14,
+ "giantbomb_id": 32,
+ "giantbomb_slug": "xbox",
},
UPS.XBOX360: {
"id": 54697,
@@ -1450,7 +1884,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "xbox360",
"name": "Microsoft Xbox 360",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 15,
+ "giantbomb_id": 20,
+ "giantbomb_slug": "xbox-360",
},
UPS.XBOXONE: {
"id": 161824,
@@ -1458,7 +1894,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "xboxone",
"name": "Microsoft Xbox One",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 4920,
+ "giantbomb_id": 145,
+ "giantbomb_slug": "xbox-one",
},
UPS.Z88: {
"id": 97718,
@@ -1467,6 +1905,8 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"name": "Cambridge Computer Z88",
"ra_id": None,
"tgdb_id": None,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.ZX80: {
"id": 232985,
@@ -1474,7 +1914,9 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "",
"name": "Sinclair ZX80",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5009,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.ZX81: {
"id": 94,
@@ -1482,14 +1924,18 @@ HASHEOUS_PLATFORM_LIST: dict[UPS, SlugToHasheousId] = {
"igdb_slug": "sinclair-zx81",
"name": "Sinclair ZX81",
"ra_id": None,
- "tgdb_id": None,
+ "tgdb_id": 5010,
+ "giantbomb_id": None,
+ "giantbomb_slug": None,
},
UPS.ZXS: {
"id": 93,
"igdb_id": 26,
"igdb_slug": "zxs",
"name": "Sinclair ZX Spectrum",
- "ra_id": None,
- "tgdb_id": None,
+ "ra_id": 59,
+ "tgdb_id": 4913,
+ "giantbomb_id": 16,
+ "giantbomb_slug": "zx-spectrum",
},
}
diff --git a/backend/handler/metadata/hltb_handler.py b/backend/handler/metadata/hltb_handler.py
index 6b04fc2d7..6274aebe6 100644
--- a/backend/handler/metadata/hltb_handler.py
+++ b/backend/handler/metadata/hltb_handler.py
@@ -558,7 +558,7 @@ HLTB_PLATFORM_LIST: dict[UPS, SlugToHLTBPlatform] = {
"count": 259,
},
UPS.JAGUAR: {"name": "Atari Jaguar", "slug": "atari-jaguar", "count": 64},
- UPS.ATARI_JAGUAR_CD: {
+ UPS.JAGUAR_CD: {
"name": "Atari Jaguar CD",
"slug": "atari-jaguar-cd",
"count": 14,
diff --git a/backend/handler/metadata/igdb_handler.py b/backend/handler/metadata/igdb_handler.py
index a45762c56..f38681823 100644
--- a/backend/handler/metadata/igdb_handler.py
+++ b/backend/handler/metadata/igdb_handler.py
@@ -547,9 +547,9 @@ class IGDBHandler(MetadataHandler):
list(
map(
lambda rom: (
- f'id={pydash.get(rom, "game.id", "")}'
+ f"id={pydash.get(rom, 'game.id', '')}"
if "game" in rom.keys()
- else f'id={rom.get("id", "")}'
+ else f"id={rom.get('id', '')}"
),
alternative_matched_roms,
)
@@ -1216,7 +1216,7 @@ IGDB_PLATFORM_LIST: dict[UPS, SlugToIGDB] = {
"url": "https://www.igdb.com/platforms/astrocade",
"url_logo": "",
},
- UPS.ATARI_JAGUAR_CD: {
+ UPS.JAGUAR_CD: {
"category": "Console",
"family_name": "Atari",
"family_slug": "atari",
diff --git a/backend/handler/metadata/launchbox_handler.py b/backend/handler/metadata/launchbox_handler.py
index c8cd5f6eb..34c2c2803 100644
--- a/backend/handler/metadata/launchbox_handler.py
+++ b/backend/handler/metadata/launchbox_handler.py
@@ -362,7 +362,7 @@ LAUNCHBOX_PLATFORM_LIST: dict[UPS, SlugToLaunchboxId] = {
UPS.ARCADE: {"id": 5, "name": "Arcade"},
UPS.ARCADIA_2001: {"id": 79, "name": "Emerson Arcadia 2001"},
UPS.ASTROCADE: {"id": 77, "name": "Bally Astrocade"},
- UPS.ATARI_JAGUAR_CD: {"id": 10, "name": "Atari Jaguar CD"},
+ UPS.JAGUAR_CD: {"id": 10, "name": "Atari Jaguar CD"},
UPS.ATARI_ST: {"id": 76, "name": "Atari ST"},
UPS.ATARI_XEGS: {"id": 12, "name": "Atari XEGS"},
UPS.ATARI2600: {"id": 6, "name": "Atari 2600"},
diff --git a/backend/handler/metadata/ra_handler.py b/backend/handler/metadata/ra_handler.py
index ba1272bea..eb69c4b62 100644
--- a/backend/handler/metadata/ra_handler.py
+++ b/backend/handler/metadata/ra_handler.py
@@ -391,7 +391,7 @@ RA_PLATFORM_LIST: dict[UPS, SlugToRAId] = {
UPS.ARDUBOY: {"id": 71, "name": "Arduboy"},
UPS.ATARI2600: {"id": 25, "name": "Atari 2600"},
UPS.ATARI7800: {"id": 51, "name": "Atari 7800"},
- UPS.ATARI_JAGUAR_CD: {"id": 77, "name": "Atari Jaguar CD"},
+ UPS.JAGUAR_CD: {"id": 77, "name": "Atari Jaguar CD"},
UPS.COLECOVISION: {"id": 44, "name": "ColecoVision"},
UPS.DC: {"id": 40, "name": "Dreamcast"},
UPS.ELEKTOR: {"id": 75, "name": "Elektor"},
diff --git a/backend/handler/metadata/tgdb_handler.py b/backend/handler/metadata/tgdb_handler.py
index 4e3abdaca..5f604c0f5 100644
--- a/backend/handler/metadata/tgdb_handler.py
+++ b/backend/handler/metadata/tgdb_handler.py
@@ -348,7 +348,7 @@ TGDB_PLATFORM_LIST: dict[UPS, SlugToTGDBId] = {
"summary": "The Atari Jaguar is a video game console that was released by Atari Corporation in 1993. It was the last to be marketed under the Atari brand until the release of the Atari Flashback in 2004. It was designed to surpass the Mega Drive/Genesis, Super Nintendo Entertainment System, and the Panasonic 3DO in processing power. Although launched one year earlier, it was eventually in competition with the Sega Saturn, the Sony PlayStation, and other consoles that made up the fifth generation of video game consoles. The console was first released in New York City and San Francisco on November 23, 1993, and the rest of the country in early 1994. Although it was promoted as the first 64-bit gaming system, the Jaguar proved to be a commercial failure and prompted Atari to leave the home video game console market. Despite its commercial failure, the Jaguar has a dedicated fan base that produces homebrew games for it.",
"url_logo": "https://cdn.thegamesdb.net/images/original/platform/boxart/28-2.jpg",
},
- UPS.ATARI_JAGUAR_CD: {
+ UPS.JAGUAR_CD: {
"id": 29,
"name": "Atari Jaguar CD",
"manufacturer": "Atari",
diff --git a/backend/handler/scan_handler.py b/backend/handler/scan_handler.py
index 278f0a332..9d281a7e9 100644
--- a/backend/handler/scan_handler.py
+++ b/backend/handler/scan_handler.py
@@ -12,6 +12,7 @@ from handler.filesystem.roms_handler import FSRom
from handler.metadata import (
meta_flashpoint_handler,
meta_gamelist_handler,
+ meta_giantbomb_handler,
meta_hasheous_handler,
meta_hltb_handler,
meta_igdb_handler,
@@ -70,6 +71,7 @@ class MetadataSource(enum.StrEnum):
FLASHPOINT = "flashpoint" # Flashpoint Project
HLTB = "hltb" # HowLongToBeat
GAMELIST = "gamelist" # ES-DE gamelist.xml
+ GIANTBOMB = "giantbomb" # Giantbomb
def get_main_platform_igdb_id(platform: Platform):
@@ -178,6 +180,7 @@ async def scan_platform(
tgdb_platform = meta_tgdb_handler.get_platform(platform_attrs["slug"])
flashpoint_platform = meta_flashpoint_handler.get_platform(platform_attrs["slug"])
hltb_platform = meta_hltb_handler.get_platform(platform_attrs["slug"])
+ giantbomb_platform = meta_giantbomb_handler.get_platform(platform_attrs["slug"])
platform_attrs["name"] = platform_attrs["slug"].replace("-", " ").title()
platform_attrs.update(
@@ -198,6 +201,9 @@ async def scan_platform(
"tgdb_id": moby_platform.get("tgdb_id")
or hasheous_platform.get("tgdb_id")
or None,
+ "giantbomb_id": giantbomb_platform.get("giantbomb_id")
+ or hasheous_platform.get("giantbomb_id")
+ or None,
"name": igdb_platform.get("name")
or ss_platform.get("name")
or moby_platform.get("name")
@@ -207,9 +213,11 @@ async def scan_platform(
or tgdb_platform.get("name")
or flashpoint_platform.get("name")
or hltb_platform.get("name")
+ or giantbomb_platform.get("name")
or platform_attrs["slug"].replace("-", " ").title(),
"url_logo": igdb_platform.get("url_logo")
or tgdb_platform.get("url_logo")
+ or giantbomb_platform.get("url_logo")
or "",
}
)
@@ -447,7 +455,7 @@ async def scan_rom(
if playmatch_rom["igdb_id"] is not None:
log.debug(
f"{hl(rom_attrs['fs_name'])} identified by Playmatch as "
- f"{hl(str(playmatch_rom["igdb_id"]), color=BLUE)} {emoji.EMOJI_ALIEN_MONSTER}",
+ f"{hl(str(playmatch_rom['igdb_id']), color=BLUE)} {emoji.EMOJI_ALIEN_MONSTER}",
extra=LOGGER_MODULE_NAME,
)
diff --git a/backend/models/platform.py b/backend/models/platform.py
index 4013547bf..cf364af6b 100644
--- a/backend/models/platform.py
+++ b/backend/models/platform.py
@@ -1,5 +1,6 @@
from __future__ import annotations
+from functools import cached_property
from typing import TYPE_CHECKING
from sqlalchemy import Integer, String, func, select
@@ -28,6 +29,7 @@ class Platform(BaseModel):
hasheous_id: Mapped[int | None] = mapped_column(Integer(), default=None)
tgdb_id: Mapped[int | None] = mapped_column(Integer(), default=None)
flashpoint_id: Mapped[int | None] = mapped_column(Integer(), default=None)
+ giantbomb_id: Mapped[int | None] = mapped_column(Integer(), default=None)
igdb_slug: Mapped[str | None] = mapped_column(String(length=100), default=None)
moby_slug: Mapped[str | None] = mapped_column(String(length=100), default=None)
hltb_slug: Mapped[str | None] = mapped_column(String(length=100), default=None)
@@ -80,11 +82,20 @@ class Platform(BaseModel):
and not self.launchbox_id
and not self.ra_id
and not self.hasheous_id
+ and not self.tgdb_id
+ and not self.giantbomb_id
)
@property
def is_identified(self) -> bool:
return not self.is_unidentified
+ @cached_property
+ def giantbomb_slug(self) -> str | None:
+ from handler.metadata import meta_giantbomb_handler
+
+ giantbomb_platform = meta_giantbomb_handler.get_platform(self.slug)
+ return giantbomb_platform.get("slug", None)
+
def __repr__(self) -> str:
return f"{self.name} ({self.slug}) ({self.id})"
diff --git a/backend/models/rom.py b/backend/models/rom.py
index 52fd10262..e180fc3b3 100644
--- a/backend/models/rom.py
+++ b/backend/models/rom.py
@@ -156,6 +156,7 @@ class Rom(BaseModel):
flashpoint_id: Mapped[str | None] = mapped_column(String(length=100), default=None)
hltb_id: Mapped[int | None] = mapped_column(Integer(), default=None)
gamelist_id: Mapped[str | None] = mapped_column(String(length=100), default=None)
+ giantbomb_id: Mapped[int | None] = mapped_column(Integer(), default=None)
__table_args__ = (
Index("idx_roms_igdb_id", "igdb_id"),
@@ -169,6 +170,7 @@ class Rom(BaseModel):
Index("idx_roms_flashpoint_id", "flashpoint_id"),
Index("idx_roms_hltb_id", "hltb_id"),
Index("idx_roms_gamelist_id", "gamelist_id"),
+ Index("idx_roms_giantbomb_id", "giantbomb_id"),
)
fs_name: Mapped[str] = mapped_column(String(length=FILE_NAME_MAX_LENGTH))
@@ -208,6 +210,9 @@ class Rom(BaseModel):
gamelist_metadata: Mapped[dict[str, Any] | None] = mapped_column(
CustomJSON(), default=dict
)
+ giantbomb_metadata: Mapped[dict[str, Any] | None] = mapped_column(
+ CustomJSON(), default=dict
+ )
path_cover_s: Mapped[str | None] = mapped_column(Text, default="")
path_cover_l: Mapped[str | None] = mapped_column(Text, default="")
@@ -350,6 +355,7 @@ class Rom(BaseModel):
and not self.flashpoint_id
and not self.hltb_id
and not self.gamelist_id
+ and not self.giantbomb_id
)
@property
diff --git a/backend/tasks/scheduled/scan_library.py b/backend/tasks/scheduled/scan_library.py
index 5462af6cc..a97a4b899 100644
--- a/backend/tasks/scheduled/scan_library.py
+++ b/backend/tasks/scheduled/scan_library.py
@@ -5,6 +5,7 @@ from config import (
from endpoints.sockets.scan import ScanStats, scan_platforms
from handler.metadata import (
meta_flashpoint_handler,
+ meta_giantbomb_handler,
meta_hasheous_handler,
meta_hltb_handler,
meta_igdb_handler,
@@ -51,6 +52,7 @@ class ScanLibraryTask(PeriodicTask):
MetadataSource.FLASHPOINT: meta_flashpoint_handler.is_enabled(),
MetadataSource.HLTB: meta_hltb_handler.is_enabled(),
MetadataSource.TGDB: meta_tgdb_handler.is_enabled(),
+ MetadataSource.GIANTBOMB: meta_giantbomb_handler.is_enabled(),
}
metadata_sources = [source for source, flag in source_mapping.items() if flag]
diff --git a/backend/tests/endpoints/test_heartbeat.py b/backend/tests/endpoints/test_heartbeat.py
index 834aea6a3..21c23306e 100644
--- a/backend/tests/endpoints/test_heartbeat.py
+++ b/backend/tests/endpoints/test_heartbeat.py
@@ -36,6 +36,8 @@ def test_heartbeat(client):
assert isinstance(metadata["HASHEOUS_API_ENABLED"], bool)
assert isinstance(metadata["TGDB_API_ENABLED"], bool)
assert isinstance(metadata["FLASHPOINT_API_ENABLED"], bool)
+ assert isinstance(metadata["HLTB_API_ENABLED"], bool)
+ assert isinstance(metadata["GIANTBOMB_API_ENABLED"], bool)
assert "FILESYSTEM" in heartbeat
filesystem = heartbeat["FILESYSTEM"]
diff --git a/backend/utils/generate_supported_platforms.py b/backend/utils/generate_supported_platforms.py
index f7f45853e..f6f2f9a63 100644
--- a/backend/utils/generate_supported_platforms.py
+++ b/backend/utils/generate_supported_platforms.py
@@ -3,6 +3,7 @@ from typing import TypedDict
from handler.metadata import (
meta_flashpoint_handler,
+ meta_giantbomb_handler,
meta_hasheous_handler,
meta_hltb_handler,
meta_igdb_handler,
@@ -25,6 +26,7 @@ class SupportedPlatform(TypedDict):
ra_id: int | None
flashpoint_id: int | None
hltb_slug: str | None
+ giantbomb_url: str | None
if __name__ == "__main__":
@@ -41,6 +43,7 @@ if __name__ == "__main__":
ra_platform = meta_ra_handler.get_platform(slug_lower)
flashpoint_platform = meta_flashpoint_handler.get_platform(slug_lower)
hltb_platform = meta_hltb_handler.get_platform(slug_lower)
+ giantbomb_platform = meta_giantbomb_handler.get_platform(slug_lower)
supported_platforms[slug_lower] = {
"name": igdb_platform.get("name", None)
@@ -51,6 +54,7 @@ if __name__ == "__main__":
or ra_platform.get("name", None)
or flashpoint_platform.get("name", None)
or hltb_platform.get("name", None)
+ or giantbomb_platform.get("name", None)
or slug_lower.replace("-", " ").title(),
"folder": slug_lower,
"igdb_slug": igdb_platform.get("igdb_slug", None),
@@ -61,6 +65,7 @@ if __name__ == "__main__":
"ra_id": ra_platform["ra_id"],
"flashpoint_id": flashpoint_platform["flashpoint_id"],
"hltb_slug": hltb_platform.get("hltb_slug", None),
+ "giantbomb_url": giantbomb_platform.get("url_logo", None),
}
# Sort platforms by name field
@@ -75,8 +80,8 @@ if __name__ == "__main__":
for platform in supported_platforms.values():
print(
- f'| {platform["name"]} |',
- f'`{platform["folder"]}` |',
+ f"| {platform['name']} |",
+ f"`{platform['folder']}` |",
(
f'
'
if platform["igdb_slug"]
@@ -117,5 +122,10 @@ if __name__ == "__main__":
if platform["hltb_slug"]
else ""
),
+ (
+ f'
'
+ if platform["giantbomb_url"]
+ else ""
+ ),
" |",
)
diff --git a/env.template b/env.template
index 47a9866c3..0c2753bbf 100644
--- a/env.template
+++ b/env.template
@@ -37,6 +37,9 @@ HLTB_API_ENABLED=
# TheGamesDB
TGDB_API_ENABLED=
+# GiantBomb
+GIANTBOMB_API_ENABLED=
+
# Database config
DB_HOST=127.0.0.1
DB_PORT=3306
diff --git a/frontend/assets/scrappers/giantbomb.png b/frontend/assets/scrappers/giantbomb.png
new file mode 100644
index 000000000..57c8e847a
Binary files /dev/null and b/frontend/assets/scrappers/giantbomb.png differ
diff --git a/frontend/src/__generated__/index.ts b/frontend/src/__generated__/index.ts
index 41b08395a..b7e88a214 100644
--- a/frontend/src/__generated__/index.ts
+++ b/frontend/src/__generated__/index.ts
@@ -61,6 +61,7 @@ export type { RomFileCategory } from './models/RomFileCategory';
export type { RomFileSchema } from './models/RomFileSchema';
export type { RomFlashpointMetadata } from './models/RomFlashpointMetadata';
export type { RomGamelistMetadata } from './models/RomGamelistMetadata';
+export type { RomGiantBombMetadata } from './models/RomGiantBombMetadata';
export type { RomHasheousMetadata } from './models/RomHasheousMetadata';
export type { RomHLTBMetadata } from './models/RomHLTBMetadata';
export type { RomIGDBMetadata } from './models/RomIGDBMetadata';
diff --git a/frontend/src/__generated__/models/DetailedRomSchema.ts b/frontend/src/__generated__/models/DetailedRomSchema.ts
index 552d12edb..9767d66c0 100644
--- a/frontend/src/__generated__/models/DetailedRomSchema.ts
+++ b/frontend/src/__generated__/models/DetailedRomSchema.ts
@@ -5,6 +5,7 @@
import type { RomFileSchema } from './RomFileSchema';
import type { RomFlashpointMetadata } from './RomFlashpointMetadata';
import type { RomGamelistMetadata } from './RomGamelistMetadata';
+import type { RomGiantBombMetadata } from './RomGiantBombMetadata';
import type { RomHasheousMetadata } from './RomHasheousMetadata';
import type { RomHLTBMetadata } from './RomHLTBMetadata';
import type { RomIGDBMetadata } from './RomIGDBMetadata';
@@ -33,6 +34,7 @@ export type DetailedRomSchema = {
flashpoint_id: (string | null);
hltb_id: (number | null);
gamelist_id: (string | null);
+ giantbomb_id: (number | null);
platform_id: number;
platform_slug: string;
platform_fs_slug: string;
@@ -58,6 +60,7 @@ export type DetailedRomSchema = {
flashpoint_metadata: (RomFlashpointMetadata | null);
hltb_metadata: (RomHLTBMetadata | null);
gamelist_metadata: (RomGamelistMetadata | null);
+ giantbomb_metadata: (RomGiantBombMetadata | null);
path_cover_small: (string | null);
path_cover_large: (string | null);
url_cover: (string | null);
diff --git a/frontend/src/__generated__/models/MetadataSourcesDict.ts b/frontend/src/__generated__/models/MetadataSourcesDict.ts
index c251a5526..260303847 100644
--- a/frontend/src/__generated__/models/MetadataSourcesDict.ts
+++ b/frontend/src/__generated__/models/MetadataSourcesDict.ts
@@ -15,5 +15,6 @@ export type MetadataSourcesDict = {
TGDB_API_ENABLED: boolean;
FLASHPOINT_API_ENABLED: boolean;
HLTB_API_ENABLED: boolean;
+ GIANTBOMB_API_ENABLED: boolean;
};
diff --git a/frontend/src/__generated__/models/PlatformSchema.ts b/frontend/src/__generated__/models/PlatformSchema.ts
index 8da8edb67..ef2720eae 100644
--- a/frontend/src/__generated__/models/PlatformSchema.ts
+++ b/frontend/src/__generated__/models/PlatformSchema.ts
@@ -12,6 +12,7 @@ export type PlatformSchema = {
igdb_slug: (string | null);
moby_slug: (string | null);
hltb_slug: (string | null);
+ giantbomb_slug?: (string | null);
custom_name?: (string | null);
igdb_id?: (number | null);
sgdb_id?: (number | null);
@@ -22,6 +23,7 @@ export type PlatformSchema = {
hasheous_id?: (number | null);
tgdb_id?: (number | null);
flashpoint_id?: (number | null);
+ giantbomb_id?: (number | null);
category?: (string | null);
generation?: (number | null);
family_name?: (string | null);
diff --git a/frontend/src/__generated__/models/RomGiantBombMetadata.ts b/frontend/src/__generated__/models/RomGiantBombMetadata.ts
new file mode 100644
index 000000000..466877b66
--- /dev/null
+++ b/frontend/src/__generated__/models/RomGiantBombMetadata.ts
@@ -0,0 +1,15 @@
+/* generated using openapi-typescript-codegen -- do not edit */
+/* istanbul ignore file */
+/* tslint:disable */
+/* eslint-disable */
+export type RomGiantBombMetadata = {
+ guid?: string;
+ alternative_names?: Array;
+ deck?: string;
+ description?: string;
+ first_release_date?: string;
+ image?: Record;
+ age_ratings?: Array;
+ site_url?: string;
+};
+
diff --git a/frontend/src/__generated__/models/SimpleRomSchema.ts b/frontend/src/__generated__/models/SimpleRomSchema.ts
index 20fe834fc..fdaba5acd 100644
--- a/frontend/src/__generated__/models/SimpleRomSchema.ts
+++ b/frontend/src/__generated__/models/SimpleRomSchema.ts
@@ -5,6 +5,7 @@
import type { RomFileSchema } from './RomFileSchema';
import type { RomFlashpointMetadata } from './RomFlashpointMetadata';
import type { RomGamelistMetadata } from './RomGamelistMetadata';
+import type { RomGiantBombMetadata } from './RomGiantBombMetadata';
import type { RomHasheousMetadata } from './RomHasheousMetadata';
import type { RomHLTBMetadata } from './RomHLTBMetadata';
import type { RomIGDBMetadata } from './RomIGDBMetadata';
@@ -27,6 +28,7 @@ export type SimpleRomSchema = {
flashpoint_id: (string | null);
hltb_id: (number | null);
gamelist_id: (string | null);
+ giantbomb_id: (number | null);
platform_id: number;
platform_slug: string;
platform_fs_slug: string;
@@ -52,6 +54,7 @@ export type SimpleRomSchema = {
flashpoint_metadata: (RomFlashpointMetadata | null);
hltb_metadata: (RomHLTBMetadata | null);
gamelist_metadata: (RomGamelistMetadata | null);
+ giantbomb_metadata: (RomGiantBombMetadata | null);
path_cover_small: (string | null);
path_cover_large: (string | null);
url_cover: (string | null);
diff --git a/frontend/src/components/Details/Info/GameInfo.vue b/frontend/src/components/Details/Info/GameInfo.vue
index d4418842a..f94de5b68 100644
--- a/frontend/src/components/Details/Info/GameInfo.vue
+++ b/frontend/src/components/Details/Info/GameInfo.vue
@@ -77,6 +77,11 @@ const dataSources = computed(() => {
condition: props.rom.hltb_id,
url: `https://howlongtobeat.com/game/${props.rom.hltb_id}`,
},
+ {
+ name: "Giant Bomb",
+ condition: props.rom.giantbomb_id,
+ url: props.rom.giantbomb_metadata?.site_url,
+ },
].filter((source) => source.condition);
});
@@ -108,6 +113,7 @@ const coverImageSource = computed(() => {
if (hostname === "hasheous.org") return "Hasheous";
if (hostname === "infinity.unstable.life") return "Flashpoint";
if (hostname === "howlongtobeat.com") return "HowLongToBeat";
+ if (hostname === "giantbomb") return "Giantbomb";
return null;
} catch {
diff --git a/frontend/src/components/Details/Title.vue b/frontend/src/components/Details/Title.vue
index b4bd9b6f3..bdcff8cad 100644
--- a/frontend/src/components/Details/Title.vue
+++ b/frontend/src/components/Details/Title.vue
@@ -333,6 +333,20 @@ const hashMatches = computed(() => {
{{ rom.sgdb_id }}
+
+
+
+
+
+ {{ rom.giantbomb_id }}
+
+
+
+
+
+
+
+ {{ currentPlatform.giantbomb_id }}
+
+
+
+
+
+
+
[
logo_path: "/assets/scrappers/sgdb.png",
disabled: !heartbeat.value.METADATA_SOURCES?.STEAMGRIDDB_API_ENABLED,
},
+ {
+ name: "Giant Bomb",
+ value: "giantbomb",
+ logo_path: "/assets/scrappers/giantbomb.png",
+ disabled: !heartbeat.value.METADATA_SOURCES?.GIANTBOMB_API_ENABLED,
+ },
]);
const defaultAdminUser = ref({
username: "",
diff --git a/frontend/src/views/Scan.vue b/frontend/src/views/Scan.vue
index 5515443ba..9197d88d6 100644
--- a/frontend/src/views/Scan.vue
+++ b/frontend/src/views/Scan.vue
@@ -257,6 +257,16 @@ async function stopScan() {
>
+
+
+
+