From f517ff311be3414e04b9001c6b5d9f3d9e8fbacd Mon Sep 17 00:00:00 2001 From: James Cook Date: Fri, 20 Feb 2026 13:12:08 -0600 Subject: [PATCH 1/9] Achievements --- .dockerignore | 1 + .github/workflows/smoke.yml | 3 + .github/workflows/test.yml | 6 + .gitignore | 6 +- .gitmodules | 3 + Dockerfile.ci-test | 1 + ext/gemba/extconf.rb | 24 +- ext/gemba/gemba_ext.c | 273 +++++++++ lib/gemba/achievements.rb | 19 + lib/gemba/achievements/achievement.rb | 23 + lib/gemba/achievements/backend.rb | 161 ++++++ lib/gemba/achievements/cache.rb | 70 +++ .../achievements/credentials_presenter.rb | 142 +++++ lib/gemba/achievements/fake_backend.rb | 180 ++++++ lib/gemba/achievements/null_backend.rb | 11 + lib/gemba/achievements/offline_backend.rb | 151 +++++ .../retro_achievements_backend.rb | 380 +++++++++++++ lib/gemba/achievements_window.rb | 532 ++++++++++++++++++ lib/gemba/app_controller.rb | 131 ++++- lib/gemba/config.rb | 60 ++ lib/gemba/data/gb_md5.json | 1 + lib/gemba/data/gba_md5.json | 1 + lib/gemba/data/gbc_md5.json | 1 + lib/gemba/emulator_frame.rb | 52 +- lib/gemba/game_index.rb | 38 +- lib/gemba/game_picker_frame.rb | 15 +- lib/gemba/locales/en.yml | 40 ++ lib/gemba/locales/ja.yml | 40 ++ lib/gemba/rom_info.rb | 10 +- lib/gemba/rom_library.rb | 3 +- lib/gemba/settings/system_tab.rb | 235 +++++++- lib/gemba/settings_window.rb | 3 + script/bake_game_index.rb | 46 +- test/achievements_window/test_bulk_sync.rb | 218 +++++++ test/achievements_window/test_bus_events.rb | 125 ++++ .../test_close_confirmation.rb | 201 +++++++ .../achievements_window/test_initial_state.rb | 164 ++++++ test/achievements_window/test_sorting.rb | 227 ++++++++ .../test_tree_rendering.rb | 133 +++++ test/shared/tk_test_helper.rb | 19 + test/support/achievements_window_helpers.rb | 18 + test/support/fake_core.rb | 25 + test/support/player_helpers.rb | 23 +- test/test_achievement.rb | 32 ++ test/test_app_controller.rb | 68 +-- test/test_config_ra.rb | 69 +++ test/test_credentials_presenter.rb | 192 +++++++ test/test_fake_backend_achievements.rb | 130 +++++ test/test_fake_backend_auth.rb | 68 +++ test/test_game_index.rb | 45 +- test/test_game_picker_frame.rb | 2 +- test/test_help_window.rb | 1 + test/test_null_backend.rb | 42 ++ test/test_offline_backend.rb | 116 ++++ test/test_ra_backend_unlock_gate.rb | 56 ++ test/test_rom_info.rb | 56 +- test/test_virtual_events.rb | 156 +++++ vendor/rcheevos | 1 + 58 files changed, 4719 insertions(+), 130 deletions(-) create mode 100644 .gitmodules create mode 100644 lib/gemba/achievements.rb create mode 100644 lib/gemba/achievements/achievement.rb create mode 100644 lib/gemba/achievements/backend.rb create mode 100644 lib/gemba/achievements/cache.rb create mode 100644 lib/gemba/achievements/credentials_presenter.rb create mode 100644 lib/gemba/achievements/fake_backend.rb create mode 100644 lib/gemba/achievements/null_backend.rb create mode 100644 lib/gemba/achievements/offline_backend.rb create mode 100644 lib/gemba/achievements/retro_achievements_backend.rb create mode 100644 lib/gemba/achievements_window.rb create mode 100644 lib/gemba/data/gb_md5.json create mode 100644 lib/gemba/data/gba_md5.json create mode 100644 lib/gemba/data/gbc_md5.json create mode 100644 test/achievements_window/test_bulk_sync.rb create mode 100644 test/achievements_window/test_bus_events.rb create mode 100644 test/achievements_window/test_close_confirmation.rb create mode 100644 test/achievements_window/test_initial_state.rb create mode 100644 test/achievements_window/test_sorting.rb create mode 100644 test/achievements_window/test_tree_rendering.rb create mode 100644 test/support/achievements_window_helpers.rb create mode 100644 test/support/fake_core.rb create mode 100644 test/test_achievement.rb create mode 100644 test/test_config_ra.rb create mode 100644 test/test_credentials_presenter.rb create mode 100644 test/test_fake_backend_achievements.rb create mode 100644 test/test_fake_backend_auth.rb create mode 100644 test/test_null_backend.rb create mode 100644 test/test_offline_backend.rb create mode 100644 test/test_ra_backend_unlock_gate.rb create mode 100644 test/test_virtual_events.rb create mode 160000 vendor/rcheevos diff --git a/.dockerignore b/.dockerignore index baa891e..b9e9d6d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,6 @@ # Don't send build artifacts to Docker daemon vendor/ +!vendor/rcheevos/ coverage/ tmp/ **/*.gem diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 56e7860..472b74d 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -9,6 +9,9 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 + with: + submodules: true + shallow-submodules: true - name: Set up Ruby uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a132ef7..59c3d04 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,6 +29,9 @@ jobs: ruby: ['4.0'] steps: - uses: actions/checkout@v4 + with: + submodules: true + shallow-submodules: true - name: Set up Docker Buildx id: buildx @@ -107,6 +110,9 @@ jobs: ruby: ['4.0'] steps: - uses: actions/checkout@v4 + with: + submodules: true + shallow-submodules: true - name: Set up Docker Buildx id: buildx diff --git a/.gitignore b/.gitignore index 73d28b7..c4da48d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,11 @@ Makefile # Vendor build artifacts (rebuilt with `rake deps`) -vendor/ +# Ignore specific build artifact dirs; vendor/rcheevos is a tracked submodule +vendor/install +vendor/mgba +vendor/install/ +vendor/mgba/ # Gem build *.gem diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4142150 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vendor/rcheevos"] + path = vendor/rcheevos + url = git@github.com:RetroAchievements/rcheevos.git diff --git a/Dockerfile.ci-test b/Dockerfile.ci-test index 61308b6..ed2395c 100644 --- a/Dockerfile.ci-test +++ b/Dockerfile.ci-test @@ -127,6 +127,7 @@ RUN --mount=type=cache,target=/bundle-cache \ COPY Rakefile ./ COPY ext/ ext/ COPY lib/ lib/ +COPY vendor/rcheevos/ vendor/rcheevos/ # Compile gemba C extension RUN MAKEFLAGS="-j$(nproc)" bundle exec rake compile diff --git a/ext/gemba/extconf.rb b/ext/gemba/extconf.rb index 8c8df07..b463eeb 100644 --- a/ext/gemba/extconf.rb +++ b/ext/gemba/extconf.rb @@ -181,6 +181,28 @@ def find_mgba MSG end -$srcs = ['gemba_ext.c'] +rcheevos_root = File.expand_path('../../vendor/rcheevos', __dir__) +abort "vendor/rcheevos submodule not initialised — run: git submodule update --init" \ + unless File.exist?("#{rcheevos_root}/src/rcheevos/runtime.c") + +$INCFLAGS << " -I#{rcheevos_root}/include" +$INCFLAGS << " -I#{rcheevos_root}/src/rcheevos" +$INCFLAGS << " -I#{rcheevos_root}/src" + +# Tell mkmf where to find the rcheevos source files. +$VPATH << "#{rcheevos_root}/src/rcheevos" +$VPATH << "#{rcheevos_root}/src" +$VPATH << "#{rcheevos_root}/src/rhash" + +# Core evaluation engine + md5 (needed by runtime.c / runtime_progress.c). +# Excludes HTTP client, ROM hash, and rapi. +$srcs = %w[ + gemba_ext.c + alloc.c condition.c condset.c format.c lboard.c memref.c + operand.c richpresence.c runtime.c runtime_progress.c + trigger.c value.c + rc_compat.c rc_util.c + md5.c +] create_makefile('gemba_ext') diff --git a/ext/gemba/gemba_ext.c b/ext/gemba/gemba_ext.c index 8203ff9..1bc59c4 100644 --- a/ext/gemba/gemba_ext.c +++ b/ext/gemba/gemba_ext.c @@ -1,4 +1,5 @@ #include "gemba_ext.h" +#include "rc_runtime.h" #include #include #include @@ -19,6 +20,7 @@ void blip_set_rates(struct blip_t *, double clock_rate, double sample_rate); VALUE mGemba; static VALUE cCore; +static VALUE ra_empty_array; /* frozen [] returned by do_frame when nothing triggered */ /* No-op logger — prevents segfault when mGBA tries to log * without a logger configured (the default is NULL). */ @@ -647,6 +649,50 @@ mgba_core_maker_code(VALUE self) } /* --------------------------------------------------------- */ +/* Core#bus_read8(address) */ +/* Read one byte from the GBA address bus. */ +/* Returns 0..255 as an Integer. */ +/* Primarily used by the achievement subsystem to evaluate */ +/* memory conditions (IWRAM, EWRAM, registers). */ +/* --------------------------------------------------------- */ + +static VALUE +mgba_core_bus_read8(VALUE self, VALUE addr) +{ + struct mgba_core *mc = get_mgba_core(self); + uint32_t address = (uint32_t)NUM2UINT(addr); + uint8_t val = (uint8_t)mc->core->busRead8(mc->core, address); + return UINT2NUM(val); +} + +/* Core#bus_read16(address) */ +/* Read two bytes (little-endian) from the GBA address bus. */ +/* Returns 0..65535 as an Integer. */ +/* --------------------------------------------------------- */ + +static VALUE +mgba_core_bus_read16(VALUE self, VALUE addr) +{ + struct mgba_core *mc = get_mgba_core(self); + uint32_t address = (uint32_t)NUM2UINT(addr); + uint16_t val = (uint16_t)mc->core->busRead16(mc->core, address); + return UINT2NUM(val); +} + +/* Core#bus_read32(address) */ +/* Read four bytes (little-endian) from the GBA address bus. */ +/* Returns 0..4294967295 as an Integer. */ +/* --------------------------------------------------------- */ + +static VALUE +mgba_core_bus_read32(VALUE self, VALUE addr) +{ + struct mgba_core *mc = get_mgba_core(self); + uint32_t address = (uint32_t)NUM2UINT(addr); + uint32_t val = mc->core->busRead32(mc->core, address); + return UINT2NUM(val); +} + /* Core#save_state_to_file(path) */ /* Save the complete emulator state to a file. */ /* Returns true on success, false on failure. */ @@ -1046,6 +1092,216 @@ mgba_core_bios_loaded_p(VALUE self) return gba->biosVf ? Qtrue : Qfalse; } +/* --------------------------------------------------------- */ +/* Gemba::RARuntime — thin wrapper around rc_runtime_t */ +/* (RetroAchievements/rcheevos) */ +/* --------------------------------------------------------- */ + +/* Achievement IDs arrive from Ruby as numeric strings ("12345"). + * rcheevos uses uint32_t internally. ra_id_to_u32 parses them; + * ra_id_to_str converts back for the do_frame return array. */ +static uint32_t +ra_id_to_u32(VALUE rb_id) +{ + Check_Type(rb_id, T_STRING); + return (uint32_t)strtoul(StringValueCStr(rb_id), NULL, 10); +} + +/* GBA RA-address-space → mGBA bus address. + * 0x000000–0x07FFFF → IWRAM 0x03000000 + * 0x080000+ → EWRAM 0x02000000 + (addr - 0x080000) + * rcheevos passes raw RA addresses to the peek callback. */ +static inline uint32_t +ra_to_gba_addr(uint32_t ra_addr) +{ + if (ra_addr < 0x08000) + return 0x03000000 + ra_addr; + else + return 0x02000000 + (ra_addr - 0x08000); +} + +/* rcheevos peek callback — called by rc_runtime_do_frame for every + * memory read. Translates RA addresses to GBA bus addresses and + * reads 1, 2, or 4 bytes in little-endian order. */ +static uint32_t +ra_peek(uint32_t ra_addr, uint32_t num_bytes, void *ud) +{ + struct mCore *core = (struct mCore *)ud; + uint32_t gba = ra_to_gba_addr(ra_addr); + switch (num_bytes) { + case 1: return (uint32_t)core->busRead8(core, gba); + case 2: return (uint32_t)core->busRead16(core, gba); + case 4: return core->busRead32(core, gba); + default: return 0; + } +} + +/* Triggered-ID collection for do_frame. + * rc_runtime_event_handler_t has no userdata parameter, so we stash + * a pointer to frame-local storage in a static before each call and + * clear it after. Ruby's GVL ensures single-threaded execution here. */ +typedef struct { + uint32_t ids[256]; + int count; +} ra_frame_ctx_t; + +static ra_frame_ctx_t *s_ra_frame_ctx = NULL; + +static void +ra_event_handler(const rc_runtime_event_t *event) +{ + if (!s_ra_frame_ctx) return; + if (event->type == RC_RUNTIME_EVENT_ACHIEVEMENT_TRIGGERED && + s_ra_frame_ctx->count < 256) + s_ra_frame_ctx->ids[s_ra_frame_ctx->count++] = event->id; +} + +/* Wrapper struct — embeds rc_runtime_t by value so a single allocation + * covers both our bookkeeping and the rcheevos runtime internals. */ +typedef struct { + rc_runtime_t rc; + int count; /* number of currently activated achievements */ +} ra_wrapper_t; + +static void +ra_wrapper_free(void *ptr) +{ + ra_wrapper_t *w = (ra_wrapper_t *)ptr; + rc_runtime_destroy(&w->rc); + xfree(w); +} + +static VALUE cRARuntime; + +static const rb_data_type_t ra_runtime_type = { + .wrap_struct_name = "Gemba::RARuntime", + .function = { + .dmark = NULL, + .dfree = ra_wrapper_free, + .dsize = NULL, + }, + .flags = RUBY_TYPED_FREE_IMMEDIATELY, +}; + +static VALUE +ra_runtime_alloc(VALUE klass) +{ + ra_wrapper_t *w = ALLOC(ra_wrapper_t); + rc_runtime_init(&w->rc); + w->count = 0; + return TypedData_Wrap_Struct(klass, &ra_runtime_type, w); +} + +static ra_wrapper_t * +get_ra_wrapper(VALUE self) +{ + ra_wrapper_t *w; + TypedData_Get_Struct(self, ra_wrapper_t, &ra_runtime_type, w); + return w; +} + +/* + * RARuntime#activate(id, memaddr) → nil + * Parse memaddr and register the achievement in the rcheevos runtime. + * Raises ArgumentError if rcheevos rejects the condition string. + */ +static VALUE +ra_runtime_rb_activate(VALUE self, VALUE rb_id, VALUE rb_memaddr) +{ + Check_Type(rb_memaddr, T_STRING); + ra_wrapper_t *w = get_ra_wrapper(self); + uint32_t id = ra_id_to_u32(rb_id); + int rc = rc_runtime_activate_achievement(&w->rc, id, + StringValueCStr(rb_memaddr), + NULL, 0); + if (rc != RC_OK) + rb_raise(rb_eArgError, + "RARuntime: rcheevos rejected memaddr (err %d): %s", + rc, StringValueCStr(rb_memaddr)); + w->count++; + return Qnil; +} + +/* + * RARuntime#deactivate(id) → nil + */ +static VALUE +ra_runtime_rb_deactivate(VALUE self, VALUE rb_id) +{ + ra_wrapper_t *w = get_ra_wrapper(self); + rc_runtime_deactivate_achievement(&w->rc, ra_id_to_u32(rb_id)); + if (w->count > 0) w->count--; + return Qnil; +} + +/* + * RARuntime#reset_all → nil + * Reset every achievement to WAITING state (as if freshly activated). + * Call this after loading a save state so delta/prior histories are + * discarded and achievements can't fire spuriously. + */ +static VALUE +ra_runtime_rb_reset_all(VALUE self) +{ + rc_runtime_reset(&get_ra_wrapper(self)->rc); + return Qnil; +} + +/* + * RARuntime#clear → nil + * Destroy all achievements and reinitialise the runtime from scratch. + */ +static VALUE +ra_runtime_rb_clear(VALUE self) +{ + ra_wrapper_t *w = get_ra_wrapper(self); + rc_runtime_destroy(&w->rc); + rc_runtime_init(&w->rc); + w->count = 0; + return Qnil; +} + +/* + * RARuntime#do_frame(core) → Array + * Evaluate all active achievements against current emulator memory. + * Returns an array of string IDs for achievements that triggered. + */ +static VALUE +ra_runtime_rb_do_frame(VALUE self, VALUE rb_core) +{ + struct mgba_core *mc; + TypedData_Get_Struct(rb_core, struct mgba_core, &mgba_core_type, mc); + if (mc->destroyed || !mc->core) + rb_raise(rb_eRuntimeError, "mGBA core has been destroyed"); + + ra_wrapper_t *w = get_ra_wrapper(self); + ra_frame_ctx_t ctx = { .count = 0 }; + + s_ra_frame_ctx = &ctx; + rc_runtime_do_frame(&w->rc, ra_event_handler, ra_peek, mc->core, NULL); + s_ra_frame_ctx = NULL; + + if (ctx.count == 0) return ra_empty_array; + + VALUE result = rb_ary_new_capa(ctx.count); + char buf[16]; + for (int i = 0; i < ctx.count; i++) { + snprintf(buf, sizeof(buf), "%u", ctx.ids[i]); + rb_ary_push(result, rb_str_new_cstr(buf)); + } + return result; +} + +/* + * RARuntime#count → Integer + * Number of currently activated achievements. + */ +static VALUE +ra_runtime_rb_count(VALUE self) +{ + return INT2NUM(get_ra_wrapper(self)->count); +} + /* --------------------------------------------------------- */ /* Init */ /* --------------------------------------------------------- */ @@ -1132,6 +1388,9 @@ Init_gemba_ext(void) rb_define_method(cCore, "destroyed?", mgba_core_destroyed_p, 0); rb_define_method(cCore, "load_bios", mgba_core_load_bios, 1); rb_define_method(cCore, "bios_loaded?", mgba_core_bios_loaded_p, 0); + rb_define_method(cCore, "bus_read8", mgba_core_bus_read8, 1); + rb_define_method(cCore, "bus_read16", mgba_core_bus_read16, 1); + rb_define_method(cCore, "bus_read32", mgba_core_bus_read32, 1); /* BIOS checksum utility */ rb_define_module_function(mGemba, "gba_bios_checksum", mgba_gba_bios_checksum, 1); @@ -1165,6 +1424,20 @@ Init_gemba_ext(void) OBJ_FREEZE(btn_bits); rb_define_const(mGemba, "GBA_BTN_BITS", btn_bits); + /* Frozen empty array returned by RARuntime#do_frame when nothing triggered */ + ra_empty_array = rb_ary_freeze(rb_ary_new_capa(0)); + rb_gc_register_mark_object(ra_empty_array); + + /* Gemba::RARuntime — RA condition evaluator */ + cRARuntime = rb_define_class_under(mGemba, "RARuntime", rb_cObject); + rb_define_alloc_func(cRARuntime, ra_runtime_alloc); + rb_define_method(cRARuntime, "activate", ra_runtime_rb_activate, 2); + rb_define_method(cRARuntime, "deactivate", ra_runtime_rb_deactivate, 1); + rb_define_method(cRARuntime, "reset_all", ra_runtime_rb_reset_all, 0); + rb_define_method(cRARuntime, "clear", ra_runtime_rb_clear, 0); + rb_define_method(cRARuntime, "do_frame", ra_runtime_rb_do_frame, 1); + rb_define_method(cRARuntime, "count", ra_runtime_rb_count, 0); + /* Toast background generator */ rb_define_module_function(mGemba, "toast_background", mgba_toast_background, 3); diff --git a/lib/gemba/achievements.rb b/lib/gemba/achievements.rb new file mode 100644 index 0000000..19334b2 --- /dev/null +++ b/lib/gemba/achievements.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Gemba + module Achievements + # Build the appropriate backend based on config. + # Returns NullBackend if RA is disabled. + # Requires app: (Teek app) for RetroAchievementsBackend's BackgroundWork HTTP calls. + # + # @param config [Config] + # @param app [Teek::App, nil] + # @return [Backend] + def self.backend_for(config, app: nil) + return NullBackend.new unless config.ra_enabled? + return NullBackend.new unless app + + RetroAchievementsBackend.new(app: app) + end + end +end diff --git a/lib/gemba/achievements/achievement.rb b/lib/gemba/achievements/achievement.rb new file mode 100644 index 0000000..ff862ca --- /dev/null +++ b/lib/gemba/achievements/achievement.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Gemba + module Achievements + # Represents a single achievement (earned or unearned). + # + # @attr [String] id Unique identifier (string, arbitrary) + # @attr [String] title Short display name + # @attr [String] description What the player must do to earn it + # @attr [Integer] points RA point value (or custom weight) + # @attr [Time, nil] earned_at When it was unlocked; nil if unearned + Achievement = Data.define(:id, :title, :description, :points, :earned_at) do + def earned? + !earned_at.nil? + end + + # Return a copy marked as earned right now. + def earn + with(earned_at: Time.now) + end + end + end +end diff --git a/lib/gemba/achievements/backend.rb b/lib/gemba/achievements/backend.rb new file mode 100644 index 0000000..2a0c5a9 --- /dev/null +++ b/lib/gemba/achievements/backend.rb @@ -0,0 +1,161 @@ +# frozen_string_literal: true + +module Gemba + module Achievements + # Abstract interface for achievement backends. + # + # All methods have no-op defaults so backends only need to override + # what they support. Concrete backends: NullBackend, FakeBackend, + # and the future RcheevosBackend. + # + # Thread safety: do_frame is called from the emulation thread (Tk + # after-loop). on_unlock and on_auth_change callbacks fire on the + # same thread. + # + # Authentication lifecycle (decoupled from the real network): + # 1. call login(username:, token:) — may be async + # 2. on_auth_change callback fires with status :ok or :error + # 3. authenticated? reflects the current state + # 4. call logout to clear credentials + module Backend + # -- Authentication ------------------------------------------------------- + + # Initiate login with username + password (first-time auth). + # On success the on_auth_change callback fires with :ok and the + # returned API token is yielded so the caller can persist it: + # on_auth_change { |status, token_or_error| ... } + # NullBackend ignores this call. + # + # @param username [String] + # @param password [String] + def login_with_password(username:, password:); end + + # Resume a session using a previously stored API token. + # Called automatically at startup when credentials are already saved. + # + # @param username [String] + # @param token [String] + def login_with_token(username:, token:); end + + # Clear authentication state and stored session. + def logout; end + + # @return [Boolean] true when authenticated and ready to serve achievements + def authenticated? + false + end + + # Register a callback invoked when authentication state changes. + # Fired with `status` (:ok or :error) and an optional `error` message. + # + # @yield [Symbol, String, nil] status, error (nil on success) + def on_auth_change(&block) + @auth_callbacks ||= [] + @auth_callbacks << block + end + + # -- Game lifecycle ------------------------------------------------------- + + # Called once per emulated frame. Evaluate achievement conditions and + # fire on_unlock callbacks for any newly earned achievements. + # + # @param core [Gemba::Core] the live mGBA core + def do_frame(core); end + + # Called when a new ROM is loaded. Backend should reset per-game state + # and re-identify the game. + # + # @param core [Gemba::Core] + # @param rom_path [String, nil] path to the ROM file (used for MD5 hashing by network backends) + def load_game(core, rom_path = nil, md5 = nil); end + + # Called when the ROM is unloaded / emulator stops. + def unload_game; end + + # Called when a save state is loaded. Memory jumped to an arbitrary saved + # state; all achievements must restart their priming/waiting sequence. + def reset_runtime; end + + # -- Achievement list ----------------------------------------------------- + + # Register a callback invoked when an achievement is unlocked. + # Multiple callbacks can be registered; all are called in order. + # + # @yield [Achievement] the newly earned achievement + def on_unlock(&block) + @unlock_callbacks ||= [] + @unlock_callbacks << block + end + + # @return [Array] all achievements for the current game + def achievement_list + [] + end + + # @return [Integer] number of earned achievements + def earned_count + achievement_list.count(&:earned?) + end + + # @return [Integer] total achievements for the current game + def total_count + achievement_list.size + end + + # Verify the stored token is still valid. Result fires on_auth_change. + # Used by the "Test" button in settings. + def ping; end + + # @return [Boolean] true if this backend is active / enabled + def enabled? + false + end + + # Fetch already-earned achievements from the server and merge them into + # the local earned state so the UI reflects prior progress. No-op for + # backends that have no server. Fires on_achievements_changed on + # completion. + def sync_unlocks; end + + # Fetch the full achievement list for a given ROM (by RomInfo) purely for + # display — does not affect live game state. Calls the block with + # Array on success, or nil on failure/unsupported. + # No-op (calls block with nil) for backends without a server. + # + # @param rom_info [RomInfo] + # @yield [Array, nil] + def fetch_for_display(rom_info:, &callback) + callback&.call(nil) + end + + # Set whether unofficial (Flags=5) achievements are included in + # display syncs and live evaluation. No-op for backends that don't + # distinguish official vs unofficial. + def include_unofficial=(val); end + + # Register a callback invoked when the achievement list changes in bulk + # (e.g. after a game loads or sync_unlocks completes). Use this to + # refresh list UI without wiring individual on_unlock callbacks. + # + # @yield called with no arguments + def on_achievements_changed(&block) + @achievements_changed_callbacks ||= [] + @achievements_changed_callbacks << block + end + + private + + def fire_unlock(achievement) + @unlock_callbacks&.each { |cb| cb.call(achievement) } + end + + def fire_auth_change(status, error = nil) + @auth_callbacks&.each { |cb| cb.call(status, error) } + end + + def fire_achievements_changed + @achievements_changed_callbacks&.each(&:call) + end + end + end +end diff --git a/lib/gemba/achievements/cache.rb b/lib/gemba/achievements/cache.rb new file mode 100644 index 0000000..fd6a798 --- /dev/null +++ b/lib/gemba/achievements/cache.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +require 'json' +require 'fileutils' +require 'time' + +module Gemba + module Achievements + # Persistent per-ROM achievement cache. + # + # Stores the full achievement list (definitions + earned status) for each + # ROM as a JSON file under Config.achievements_cache_dir/.json. + # Written after every successful sync; read on demand by the window when + # a game is selected that isn't currently loaded in the emulator. + # + # Format: + # { "synced_at": "", + # "achievements": [ { "id":, "title":, "description":, "points":, + # "earned_at": "|null" }, … ] } + module Cache + def self.write(rom_id, achievements) + path = cache_path(rom_id) + FileUtils.mkdir_p(File.dirname(path)) + data = { + 'synced_at' => Time.now.utc.iso8601, + 'achievements' => achievements.map { |a| + { + 'id' => a.id, + 'title' => a.title, + 'description' => a.description, + 'points' => a.points, + 'earned_at' => a.earned_at&.utc&.iso8601, + } + }, + } + File.write(path, JSON.generate(data)) + Gemba.log(:info) { "Achievements cache written: #{rom_id} (#{achievements.size} achievements)" } + rescue => e + Gemba.log(:warn) { "Achievements cache write failed for #{rom_id}: #{e.message}" } + end + + # @return [Array, nil] cached list, or nil if no cache exists + def self.read(rom_id) + path = cache_path(rom_id) + return nil unless File.exist?(path) + + data = JSON.parse(File.read(path)) + list = (data['achievements'] || []).map do |a| + Achievement.new( + id: a['id'].to_s, + title: a['title'].to_s, + description: a['description'].to_s, + points: a['points'].to_i, + earned_at: a['earned_at'] ? Time.iso8601(a['earned_at']) : nil, + ) + end + Gemba.log(:info) { "Achievements cache read: #{rom_id} (#{list.size} achievements, synced #{data['synced_at']})" } + list + rescue => e + Gemba.log(:warn) { "Achievements cache read failed for #{rom_id}: #{e.message}" } + nil + end + + def self.cache_path(rom_id) + File.join(Config.achievements_cache_dir, "#{rom_id}.json") + end + private_class_method :cache_path + end + end +end diff --git a/lib/gemba/achievements/credentials_presenter.rb b/lib/gemba/achievements/credentials_presenter.rb new file mode 100644 index 0000000..5c23c98 --- /dev/null +++ b/lib/gemba/achievements/credentials_presenter.rb @@ -0,0 +1,142 @@ +# frozen_string_literal: true + +module Gemba + module Achievements + # Presents credential state for the RetroAchievements settings UI. + # Read-only view of state — never writes to disk or config. + # + # Initialized from persisted config. Mutated by: + # - UI interactions (checkbox, keystrokes) via setters + # - Backend auth results via :ra_auth_result bus events + # + # Emits :credentials_changed on the bus whenever state changes. + # SystemTab listens and calls apply_presenter_state to refresh widgets. + # + # Call dispose when discarding the presenter to remove the bus subscription. + class CredentialsPresenter + include BusEmitter + + def initialize(config) + @enabled = config.ra_enabled? + @username = config.ra_username.to_s + @token = config.ra_token.to_s + @password = '' + @feedback_override = nil + + @auth_handler = ->(status:, token: nil, message: nil) { + handle_auth_result(status, token, message) + } + Gemba.bus.on(:ra_auth_result, &@auth_handler) + end + + # Remove bus subscription. Call before discarding the presenter. + def dispose + Gemba.bus.off(:ra_auth_result, @auth_handler) + end + + # -- UI mutations --------------------------------------------------------- + + def enabled=(val) + @enabled = val ? true : false + emit(:credentials_changed) + end + + def username=(val) + @username = val.to_s + emit(:credentials_changed) + end + + def password=(val) + @password = val.to_s + emit(:credentials_changed) + end + + # Transient feedback (e.g. "Connection OK ✓") that disappears after a delay. + # Caller is responsible for scheduling clear_transient via Tk after. + def show_transient(key, **kwargs) + @feedback_override = { key: key, **kwargs } + emit(:credentials_changed) + end + + def clear_transient + @feedback_override = nil + emit(:credentials_changed) + end + + # -- Read-only accessors -------------------------------------------------- + + attr_reader :username, :password, :token + def enabled? = @enabled + def logged_in? = !@token.strip.empty? + + # -- Widget state queries ------------------------------------------------- + + def fields_state + return :disabled unless @enabled + return :readonly if logged_in? + :normal + end + + def login_button_state + return :disabled unless @enabled + return :disabled if logged_in? + fields_filled? ? :normal : :disabled + end + + def verify_button_state + (@enabled && logged_in?) ? :normal : :disabled + end + + def logout_button_state + (@enabled && logged_in?) ? :normal : :disabled + end + + def reset_button_state + (@enabled && logged_in?) ? :normal : :disabled + end + + # Feedback descriptor. key drives locale lookup in SystemTab. + # :empty → blank label + # :not_logged_in → "Not logged in" + # :logged_in_as → "Logged in as {username}" (also carries username:) + # :test_ok → "Connection OK ✓" + # :error → error text (carries message:) + def feedback + return @feedback_override if @feedback_override + return { key: :empty } unless @enabled + return { key: :logged_in_as, username: @username } if logged_in? + { key: :not_logged_in } + end + + private + + def handle_auth_result(status, token, message) + case status + when :ok + if token + # Login success — store token, clear password + @token = token.to_s + @password = '' + @feedback_override = nil + else + # Ping success — show transient then let SystemTab schedule clear + @feedback_override = { key: :test_ok } + emit(:ra_ping_ok) + end + when :error + @feedback_override = { key: :error, message: message.to_s } + when :logout + @token = '' + @password = '' + @feedback_override = nil + # username intentionally kept so user can re-enter password quickly + end + emit(:credentials_changed) + end + + def fields_filled? + !@username.strip.empty? && !@password.strip.empty? + end + end + end +end diff --git a/lib/gemba/achievements/fake_backend.rb b/lib/gemba/achievements/fake_backend.rb new file mode 100644 index 0000000..b43eed9 --- /dev/null +++ b/lib/gemba/achievements/fake_backend.rb @@ -0,0 +1,180 @@ +# frozen_string_literal: true + +module Gemba + module Achievements + # Pure-Ruby achievement backend for development and testing. + # + # Achievements are defined programmatically with a condition block + # that receives a memory-read helper. No HTTP, no hashing, no server. + # + # Authentication behaviour: + # - By default any non-empty credentials succeed immediately. + # - Pass `valid_username:` and `valid_token:` to restrict: only that + # exact pair succeeds; anything else fails. Useful in tests that + # verify the "bad credentials" error path. + # + # Used in two ways: + # 1. Automated tests — add achievements, step frames, assert unlocks + # 2. Integration dev — iterate on UI (toasts, list) without rcheevos + # + # @example Basic usage + # backend = FakeBackend.new + # backend.add_achievement(id: 'btn_b', title: 'Press B', + # description: 'Press the B button', + # points: 5) do |mem| + # mem.call(0x02000000) == 0x42 + # end + # backend.on_unlock { |ach| puts "Unlocked: #{ach.title}" } + # backend.do_frame(core) # call each frame + # + # @example Restricted credentials (for testing failure path) + # backend = FakeBackend.new(valid_username: 'alice', valid_token: 'secret') + # backend.login(username: 'bob', token: 'wrong') # → fires :error + # backend.login(username: 'alice', token: 'secret') # → fires :ok + class FakeBackend + include Backend + + # @param valid_username [String, nil] when set, only this username passes + # @param valid_token [String, nil] when set, only this token passes + def initialize(valid_username: nil, valid_token: nil) + @definitions = {} # id → { achievement:, condition: } + @earned = {} # id → Achievement (earned copy) + @prev_state = {} # id → bool (condition result last frame) + @valid_username = valid_username + @valid_token = valid_token + @authenticated = false + end + + # -- Authentication ------------------------------------------------------- + + # Resolves immediately. Succeeds if credentials are non-empty and match + # the configured valid pair (or any non-empty creds if none configured). + # On success fires on_auth_change(:ok, fake_token) where fake_token is + # a deterministic stand-in so callers can exercise the token-persist path. + def login_with_password(username:, password:) + ok = !username.to_s.empty? && !password.to_s.empty? && + (@valid_username.nil? || username == @valid_username) && + (@valid_token.nil? || password == @valid_token) + + if ok + @authenticated = true + fire_auth_change(:ok, "fake_token_for_#{username}") + else + @authenticated = false + fire_auth_change(:error, 'Invalid credentials (fake backend)') + end + end + + def login_with_token(username:, token:) + ok = !username.to_s.empty? && !token.to_s.empty? && + (@valid_username.nil? || username == @valid_username) && + (@valid_token.nil? || token == @valid_token) + + if ok + @authenticated = true + fire_auth_change(:ok, token) + else + @authenticated = false + fire_auth_change(:error, 'Invalid credentials (fake backend)') + end + end + + def logout + @authenticated = false + fire_auth_change(:logout) + end + + def ping + if @authenticated + fire_auth_change(:ok, nil) + else + fire_auth_change(:error, 'Not authenticated (fake backend)') + end + end + + def authenticated? + @authenticated + end + + # Define an achievement. The block receives a read_mem callable + # and must return truthy when the unlock condition is met. + # + # @param id [String] unique identifier + # @param title [String] + # @param description [String] + # @param points [Integer] + # @yield [read_mem] called each frame; read_mem is ->(address) { Integer } + # @yieldreturn [Boolean] true when condition is satisfied + def add_achievement(id:, title:, description:, points: 0, &condition) + raise ArgumentError, "condition block required" unless condition + ach = Achievement.new(id: id, title: title, + description: description, + points: points, earned_at: nil) + @definitions[id] = { achievement: ach, condition: condition } + @prev_state[id] = false + end + + # Evaluate all unearned achievements against current memory state. + # Fires on_unlock callbacks for newly met conditions (rising edge). + # + # @param core [Gemba::Core] + def do_frame(core) + read_mem = ->(addr) { core.bus_read8(addr) } + @definitions.each do |id, defn| + next if @earned.key?(id) + + current = defn[:condition].call(read_mem) ? true : false + if current && !@prev_state[id] + earned = defn[:achievement].earn + @earned[id] = earned + fire_unlock(earned) + end + @prev_state[id] = current + end + end + + def load_game(_core, rom_path = nil, md5 = nil) + reset_earned + end + + def unload_game + reset_earned + end + + # @return [Array] all achievements, earned ones updated + def achievement_list + @definitions.map do |id, defn| + @earned[id] || defn[:achievement] + end + end + + def enabled? + true + end + + # Clear earned state (for test reuse). + def reset_earned + @earned = {} + @prev_state = @prev_state.transform_values { false } + end + + # Configure what fetch_for_display returns. Pass an Array (returned for + # every rom_info) or a block that receives rom_info and returns an Array + # or nil. Without calling this, fetch_for_display always calls back with nil. + # + # @example Always return a fixed list + # backend.stub_fetch_for_display([ach1, ach2]) + # + # @example Vary by rom_info + # backend.stub_fetch_for_display { |rom_info| rom_info.rom_id == 'X' ? [ach1] : [] } + def stub_fetch_for_display(list = nil, &block) + @fetch_display_stub = block || ->(_) { list } + end + + def fetch_for_display(rom_info:, &callback) + result = @fetch_display_stub ? @fetch_display_stub.call(rom_info) : nil + callback&.call(result) + end + end + end +end diff --git a/lib/gemba/achievements/null_backend.rb b/lib/gemba/achievements/null_backend.rb new file mode 100644 index 0000000..6a5a2e8 --- /dev/null +++ b/lib/gemba/achievements/null_backend.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Gemba + module Achievements + # No-op backend used when RetroAchievements is disabled. + # All methods are inherited no-ops from Backend. + class NullBackend + include Backend + end + end +end diff --git a/lib/gemba/achievements/offline_backend.rb b/lib/gemba/achievements/offline_backend.rb new file mode 100644 index 0000000..b7c754d --- /dev/null +++ b/lib/gemba/achievements/offline_backend.rb @@ -0,0 +1,151 @@ +# frozen_string_literal: true + +module Gemba + module Achievements + # Achievement backend backed by a local database — no HTTP, no rcheevos. + # Auth is a no-op: always authenticated. + # + # The DB maps ROM checksum → array of achievement definition Hashes: + # { + # id:, title:, description:, points:, + # trigger: :on_load | :memory, + # condition: ->(mem) { bool } # :memory trigger only + # } + # + # :on_load achievements fire immediately in load_game. + # :memory achievements are evaluated each frame in do_frame (rising edge). + # + # Long-term this DB can be populated by RcheevosBackend after a successful + # server sync, enabling offline play. For now it ships with a small + # built-in set (one achievement for the GEMBATEST fixture ROM). + # + # Tests assign this backend directly: + # frame.achievement_backend = Achievements::OfflineBackend.new + class OfflineBackend + include Backend + + # Built-in achievement definitions, keyed by ROM checksum. + BUILTIN_DB = { + # test/fixtures/test.gba — checksum 3369266971, title "GEMBATEST" + 3369266971 => [ + { + id: 'gembatest_loaded', + title: 'Ready to Play', + description: 'Loaded the Gemba test ROM', + points: 1, + trigger: :on_load, + }, + ], + }.freeze + + # @param db [Hash, nil] fully replaces BUILTIN_DB when provided. + # Pass BUILTIN_DB.merge(extras) explicitly if you want both. + def initialize(db: nil) + @db = db || BUILTIN_DB + @achievements = [] + @earned = {} + @prev_state = {} + end + + # -- Authentication (no-op — offline backend is always authenticated) ------ + + def login_with_password(username:, password:) + return fire_auth_change(:error, 'Username and password required') if username.to_s.strip.empty? || password.to_s.strip.empty? + # Offline backend accepts any credentials — real auth happens via rcheevos + fire_auth_change(:ok, "offline_token_#{username.strip}") + end + + def login_with_token(username:, token:) + return if token.to_s.strip.empty? + fire_auth_change(:ok, nil) + end + + def logout + fire_auth_change(:logout) + end + + def authenticated? = true + + def ping + fire_auth_change(:ok, nil) + end + + # -- Game lifecycle ------------------------------------------------------- + + def load_game(core, rom_path = nil, md5 = nil) + @achievements = [] + @earned = {} + @prev_state = {} + + (@db[core.checksum] || []).each do |defn| + ach = Achievement.new( + id: defn[:id], + title: defn[:title], + description: defn[:description], + points: defn[:points], + earned_at: nil, + ) + @achievements << ach + @prev_state[ach.id] = false + + if defn[:trigger] == :on_load + earned = ach.earn + @earned[ach.id] = earned + fire_unlock(earned) + end + end + end + + def unload_game + @achievements = [] + @earned = {} + @prev_state = {} + end + + # -- Per-frame evaluation (memory-condition achievements) ----------------- + + def do_frame(core) + (@db[core.checksum] || []).each do |defn| + next unless defn[:trigger] == :memory + next if @earned.key?(defn[:id]) + + condition = defn[:condition] + next unless condition + + read_mem = ->(addr) { core.bus_read8(addr) } + current = condition.call(read_mem) ? true : false + + if current && !@prev_state[defn[:id]] + ach = @achievements.find { |a| a.id == defn[:id] } + if ach + earned = ach.earn + @earned[ach.id] = earned + fire_unlock(earned) + end + end + + @prev_state[defn[:id]] = current + end + end + + # -- Achievement list ----------------------------------------------------- + + def achievement_list + @achievements.map { |a| @earned[a.id] || a } + end + + def enabled? = true + + # -- DB management -------------------------------------------------------- + + # Merge achievement definitions for a ROM into the in-memory DB. + # Intended for use by RcheevosBackend to seed the offline cache. + # + # @param checksum [Integer] + # @param defs [Array] + def store(checksum, defs) + @db = @db.merge(checksum => defs) + end + end + end +end diff --git a/lib/gemba/achievements/retro_achievements_backend.rb b/lib/gemba/achievements/retro_achievements_backend.rb new file mode 100644 index 0000000..3c9053b --- /dev/null +++ b/lib/gemba/achievements/retro_achievements_backend.rb @@ -0,0 +1,380 @@ +# frozen_string_literal: true + +require "net/http" +require "json" +require "digest" + +module Gemba + module Achievements + # Achievement backend that talks to retroachievements.org. + # + # All requests are HTTP POSTs to /dorequest.php. The 'r' parameter tells + # the server what you want — it's RA's own naming, not ours: + # + # r=login2 authenticate (password or token) + # r=gameid "here's a ROM MD5 hash — what game ID is it?" + # r=patch "give me the achievement definitions for this game" + # (called 'patch' because RA's original concept was that + # achievements are a 'patch' bolted on top of a ROM — + # extra behaviour injected into the game. the name stuck.) + # r=unlocks "which of these achievements has the player already earned?" + # r=awardachievement "the player just earned this achievement, record it" + # + # All HTTP is done off the main thread via Teek::BackgroundWork (thread mode). + # + # Authentication flow: + # login_with_password → r=login2 + password → stores token, fires :ok + # login_with_token → r=login2 + token → verifies token, fires :ok/:error + # ping → same as login_with_token using stored creds + # + # Game load flow (all requests are chained — each fires when the previous + # HTTP response comes back): + # + # load_game(core, rom_path) + # → MD5 hash the ROM file + # → r=gameid (MD5) — server tells us the RA game ID + # → r=patch (game ID) — server sends achievement definitions + # → r=unlocks (game ID) — server says which the player already has + # → activate each un-earned achievement in the C runtime + # (parse conditions, load into hash table so do_frame checks them) + # + # Achievements are not loaded into the runtime until AFTER the unlocks + # response arrives. This means @achievements stays empty during the + # network round-trips, and do_frame's early-return guard prevents any + # evaluation before we know what the player has already earned. + class RetroAchievementsBackend + include Backend + + RA_HOST = "retroachievements.org" + RA_PATH = "/dorequest.php" + + def initialize(app:) + @app = app + @username = nil + @token = nil + @game_id = nil + @achievements = [] + @earned = {} + @authenticated = false + @include_unofficial = false + @ra_runtime = Gemba::RARuntime.new + end + + attr_writer :include_unofficial + + # -- Authentication ------------------------------------------------------- + + def login_with_password(username:, password:) + ra_request(r: 'login2', u: username, p: password) do |json, ok| + if ok && json&.dig('Success') + @username = username + @token = json['Token'] + @authenticated = true + Gemba.log(:info) { "RA: authenticated as #{username}" } + fire_auth_change(:ok, @token) + else + msg = json&.dig('Error') || 'Login failed' + Gemba.log(:warn) { "RA: authentication failed for #{username}: #{msg}" } + fire_auth_change(:error, msg) + end + end + end + + def login_with_token(username:, token:) + @username = username + @token = token + ra_request(r: 'login2', u: username, t: token) do |json, ok| + if ok && json&.dig('Success') + @authenticated = true + Gemba.log(:info) { "RA: token verified for #{username}" } + fire_auth_change(:ok, nil) + else + @authenticated = false + msg = json&.dig('Error') || 'Token invalid' + Gemba.log(:warn) { "RA: token verification failed for #{username}: #{msg}" } + fire_auth_change(:error, msg) + end + end + end + + def ping + ra_request(r: 'login2', u: @username, t: @token) do |json, ok| + if ok && json&.dig('Success') + fire_auth_change(:ok, nil) + else + @authenticated = false + fire_auth_change(:error, json&.dig('Error') || 'Token invalid') + end + end + end + + def logout + @username = nil + @token = nil + @authenticated = false + @game_id = nil + @achievements = [] + @earned = {} + @ra_runtime.clear + fire_auth_change(:logout) + end + + def authenticated? = @authenticated + def enabled? = true + + # -- Game lifecycle ------------------------------------------------------- + + def load_game(core, rom_path = nil, md5 = nil) + return unless @authenticated + return unless rom_path && File.exist?(rom_path.to_s) + + @achievements = [] + @earned = {} + @game_id = nil + + # Use pre-computed digest if available (computed at ROM load time and + # cached in rom_library.json); fall back to computing it here for entries + # that pre-date MD5 storage. + md5 ||= Digest::MD5.file(rom_path).hexdigest + + ra_request(r: 'gameid', m: md5) do |json, ok| + next unless ok + game_id = json&.dig('GameID')&.to_i + next if !game_id || game_id == 0 + + @game_id = game_id + fetch_patch_data(game_id) + end + end + + # Called after a save state is loaded. Memory just jumped to an arbitrary + # saved state, so every achievement must go back through the priming and + # waiting startup sequence — otherwise achievements that were already active + # fire instantly if the saved memory happens to satisfy their conditions. + def reset_runtime + @ra_runtime.reset_all + end + + def unload_game + @game_id = nil + @achievements = [] + @earned = {} + @ra_runtime.clear + fire_achievements_changed + end + + def sync_unlocks + return unless @authenticated + Gemba.bus.emit(:ra_sync_started) + unless @game_id + Gemba.bus.emit(:ra_sync_done, ok: false, reason: :no_game) + return + end + @earned = {} + @achievements = [] + @ra_runtime.reset_all + fetch_patch_data(@game_id, emit_sync_done: true) + end + + def do_frame(core) + return if @achievements.empty? + + triggered_ids = @ra_runtime.do_frame(core) + triggered_ids.each do |id| + next if @earned.key?(id) + ach = @achievements.find { |a| a.id == id } + next unless ach + + earned = ach.earn + @earned[id] = earned + fire_unlock(earned) + submit_unlock(id) + end + end + + # -- Achievement list ----------------------------------------------------- + + def achievement_list + @achievements.map { |a| @earned[a.id] || a } + end + + # Fetch the full achievement list for any ROM by its RomInfo, purely for + # display. Does not touch the live game state (@achievements, @earned, + # @ra_runtime). Calls the block on the main thread with Array + # on success or nil on failure. + # + # Request chain (all POST to /dorequest.php): + # r=gameid m= + # r=patch u= t= g= + # r=unlocks u= t= g= h=0 + def fetch_for_display(rom_info:, &callback) + return unless @authenticated && rom_info.md5 + + Gemba.log(:info) { "RA fetch_for_display: gameid lookup md5=#{rom_info.md5[0, 8]}… (#{rom_info.title})" } + + ra_request(r: 'gameid', m: rom_info.md5) do |json, ok| + game_id = ok ? json&.dig('GameID')&.to_i : nil + Gemba.log(game_id&.positive? ? :info : :warn) { + "RA fetch_for_display: gameid → #{game_id.inspect} ok=#{ok}" + } + unless game_id && game_id > 0 + callback.call(nil) + next + end + + ra_request(r: 'patch', u: @username, t: @token, g: game_id) do |patch_json, patch_ok| + Gemba.log(patch_ok ? :info : :warn) { + "RA fetch_for_display: patch g=#{game_id} ok=#{patch_ok} achievements=#{patch_json&.dig('PatchData', 'Achievements')&.size.inspect}" + } + unless patch_ok && patch_json + callback.call(nil) + next + end + + achievements = (patch_json.dig('PatchData', 'Achievements') || []).filter_map do |a| + next if a['MemAddr'].to_s.empty? + next if a['Flags'].to_i != 3 && !(a['Flags'].to_i == 5 && @include_unofficial) + next if a['ID'].to_i > 100_000_000 # skip RA-injected system messages + Achievement.new( + id: a['ID'].to_s, + title: a['Title'].to_s, + description: a['Description'].to_s, + points: a['Points'].to_i, + earned_at: nil, + ) + end + + ra_request(r: 'unlocks', u: @username, t: @token, g: game_id, h: 0) do |ul_json, ul_ok| + earned_ids = ul_ok && ul_json&.dig('Success') ? + (ul_json.dig('UserUnlocks') || []).map(&:to_s) : [] + Gemba.log(ul_ok ? :info : :warn) { + "RA fetch_for_display: unlocks g=#{game_id} ok=#{ul_ok} earned=#{earned_ids.size} total=#{achievements.size}" + } + result = achievements.map { |a| earned_ids.include?(a.id) ? a.earn : a } + callback.call(result) + end + end + end + end + + private + + # Fetch patch data (achievement definitions). Does NOT activate the runtime + # or populate @achievements — that happens only after unlocks are known, + # in activate_from_patch. This ensures do_frame can never evaluate and + # award achievements during the window between patch data and unlocks. + def fetch_patch_data(game_id, emit_sync_done: false) + ra_request(r: 'patch', u: @username, t: @token, g: game_id) do |json, ok| + unless ok && json + Gemba.log(:warn) { "RA: failed to fetch patch data for game #{game_id}" } + Gemba.bus.emit(:ra_sync_done, ok: false) if emit_sync_done + next + end + + raw = (json.dig('PatchData', 'Achievements') || []).select do |a| + !a['MemAddr'].to_s.empty? && + (a['Flags'].to_i == 3 || (a['Flags'].to_i == 5 && @include_unofficial)) && + a['ID'].to_i <= 100_000_000 + end + + fetch_unlocks(game_id, raw_ach_data: raw, emit_sync_done: emit_sync_done) + end + end + + # Fetch already-earned achievement IDs, then activate the runtime with + # all achievements, immediately deactivating the already-earned ones. + # Only after this step is @achievements populated — so do_frame's + # `return if @achievements.empty?` guard covers the entire window. + def fetch_unlocks(game_id, raw_ach_data: nil, emit_sync_done: false) + ra_request(r: 'unlocks', u: @username, t: @token, g: game_id, h: 0) do |json, ok| + unless ok && json&.dig('Success') + Gemba.log(:warn) { "RA: failed to fetch unlocks for game #{game_id}" } + Gemba.bus.emit(:ra_sync_done, ok: false) if emit_sync_done + next + end + + earned_ids = (json.dig('UserUnlocks') || []).map(&:to_s) + + if raw_ach_data + # Fresh load / re-sync: activate runtime now that we know earned set. + @ra_runtime.clear + @achievements = raw_ach_data.filter_map do |a| + id = a['ID'].to_s + memaddr = a['MemAddr'].to_s + begin + @ra_runtime.activate(id, memaddr) + rescue ArgumentError => e + Gemba.log(:warn) { "RA: skipping achievement #{id} — #{e.message}" } + next + end + @ra_runtime.deactivate(id) if earned_ids.include?(id) + Achievement.new( + id: id, + title: a['Title'].to_s, + description: a['Description'].to_s, + points: a['Points'].to_i, + earned_at: nil, + ) + end + Gemba.log(:info) { "RA: loaded #{@achievements.size} achievements for game #{game_id}" } + end + + newly_marked = 0 + earned_ids.each do |id| + next if @earned.key?(id) + ach = @achievements.find { |a| a.id == id } + next unless ach + earned = ach.earn + @earned[id] = earned + newly_marked += 1 + end + + Gemba.log(:info) { "RA: synced #{newly_marked} pre-earned achievements for game #{game_id}" } if newly_marked > 0 + fire_achievements_changed + Gemba.bus.emit(:ra_sync_done, ok: true) if emit_sync_done + end + end + + # Best-effort unlock submission — fires and forgets, result only logged. + def submit_unlock(achievement_id, hardcore: false) + ra_request(r: 'awardachievement', u: @username, t: @token, + a: achievement_id, h: hardcore ? 1 : 0) do |json, ok| + if ok && json&.dig('Success') + Gemba.log(:info) { "RA: submitted unlock for achievement #{achievement_id}" } + else + Gemba.log(:warn) { "RA: unlock submission failed for #{achievement_id}: #{json&.dig('Error')}" } + end + end + end + + # POST to dorequest.php in a background thread. + # Calls block with (json_hash_or_nil, success_bool) on the main thread. + def ra_request(params, &on_done) + Teek::BackgroundWork.new(@app, params, mode: :thread) do |t, req_params| + uri = URI::HTTPS.build(host: RA_HOST, path: RA_PATH) + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + http.read_timeout = 15 + req = Net::HTTP::Post.new(uri.path) + safe = req_params.reject { |k, _| [:t, :p, 't', 'p'].include?(k) } + Gemba.log(:info) { "RA request: r=#{params[:r]} #{safe.map { |k, v| "#{k}=#{v}" }.join(' ')}" } + req.set_form_data(req_params.transform_keys(&:to_s).transform_values(&:to_s)) + resp = http.request(req) + if resp.is_a?(Net::HTTPSuccess) + body = resp.body + Gemba.log(:info) { "RA response: r=#{params[:r]} HTTP #{resp.code} body=#{body.length}b" } + t.yield([JSON.parse(body), true]) + else + Gemba.log(:warn) { "RA response: r=#{params[:r]} HTTP #{resp.code} #{resp.message} body=#{resp.body.to_s[0, 200]}" } + t.yield([nil, false]) + end + rescue => e + Gemba.log(:warn) { "RA: request error (#{params[:r]}): #{e.class} #{e.message}" } + t.yield([nil, false]) + end.on_progress do |result| + on_done.call(*result) if on_done && result + end + end + end + end +end diff --git a/lib/gemba/achievements_window.rb b/lib/gemba/achievements_window.rb new file mode 100644 index 0000000..1ea4e76 --- /dev/null +++ b/lib/gemba/achievements_window.rb @@ -0,0 +1,532 @@ +# frozen_string_literal: true + +module Gemba + # Displays achievements for the currently loaded GBA game. + # + # Non-modal window accessible from View > Achievements. Shows a treeview + # of all achievements with name, points, and earned date. A Sync button + # pulls the latest earned state from the RA server. Only the currently + # loaded game has live data; other GBA games in the library show empty. + class AchievementsWindow + include ChildWindow + include Locale::Translatable + + TOP = '.gemba_achievements' + + VAR_UNOFFICIAL = '::gemba_ach_unofficial' + + def initialize(app:, rom_library:, config:, callbacks: {}) + @app = app + @rom_library = rom_library + @config = config + @callbacks = callbacks + @built = false + @backend = nil + @current_rom_id = nil + @game_entries = [] + @tree_items = [] + @item_descriptions = {} + @tip_item = nil + @tip_timer = nil + @current_list = [] + @sort_col = nil # nil = default order + @sort_asc = true + @bulk_syncing = false + @bulk_cancelled = false + end + + # Called by AppController when a ROM loads or the backend is swapped. + # Updates internal state and refreshes the window if it's visible. + def update_game(rom_id:, backend:) + @current_rom_id = rom_id + @backend = backend + return unless @built + + refresh_game_list + select_game(rom_id) + populate_tree + update_title + end + + # Called by AppController when on_achievements_changed fires. + def refresh(backend = @backend) + @backend = backend + @display_list = nil # live backend data takes precedence over cached sync + return unless @built + + populate_tree + end + + def show + build_ui unless @built + refresh_game_list + select_game(@current_rom_id) + # For non-current games (or when no game is loaded), seed from cache so + # previously-synced data appears without requiring another network hit. + if @display_list.nil? && @current_rom_id + cached = Achievements::Cache.read(@current_rom_id) + @display_list = cached if cached && @backend&.achievement_list.to_a.empty? + end + populate_tree + refresh_auth_state unless @backend&.authenticated? + update_title + show_window(modal: false) + end + + def hide + if @bulk_syncing + result = @app.command('tk_messageBox', + parent: TOP, + title: translate('dialog.cancel_bulk_sync_title'), + message: translate('dialog.cancel_bulk_sync_msg'), + type: :yesno, + icon: :warning) + return unless result == 'yes' + @bulk_cancelled = true + @bulk_syncing = false + unlock_ui_after_bulk_sync + end + hide_window(modal: false) + end + + # ModalStack protocol (non-modal — no grab) + def show_modal(**_args) + build_ui unless @built + refresh_game_list + select_game(@current_rom_id) + populate_tree + update_title + position_near_parent + @app.command(:wm, 'deiconify', TOP) + @app.command(:raise, TOP) + end + + def withdraw + @app.command(:wm, 'withdraw', TOP) + end + + private + + def build_ui + build_toplevel(translate('achievements.title'), geometry: '560x440') do + build_toolbar + build_tree + build_status + end + setup_bus_subscriptions + @built = true + end + + def setup_bus_subscriptions + Gemba.bus.on(:ra_sync_started) do + @app.command(@sync_btn, :configure, state: :disabled) + set_status(translate('achievements.sync_pending')) + end + + Gemba.bus.on(:ra_sync_done) do |ok:, reason: nil, **| + # Re-enable only if still authenticated; logout during an in-flight + # request should leave the button disabled. + refresh_auth_state + unless ok + key = case reason + when :no_game then 'achievements.sync_no_game' + when :timeout then 'achievements.sync_timeout' + else 'achievements.sync_failed' + end + set_status(translate(key)) + end + end + + Gemba.bus.on(:ra_auth_result) do |status:, **| + refresh_auth_state + end + end + + def refresh_auth_state + authenticated = @backend&.authenticated? + state = authenticated ? :normal : :disabled + @app.command(@sync_btn, :configure, state: state) + @app.command(@unofficial_check, :configure, state: state) if @unofficial_check + set_status(translate('achievements.not_logged_in')) unless authenticated + end + + def build_toolbar + f = "#{TOP}.toolbar" + @app.command('ttk::frame', f, padding: [8, 8, 8, 4]) + @app.command(:pack, f, fill: :x) + + lbl = "#{f}.lbl" + @app.command('ttk::label', lbl, text: translate('achievements.game_label')) + @app.command(:pack, lbl, side: :left, padx: [0, 4]) + + @combo = "#{f}.combo" + @app.command('ttk::combobox', @combo, state: :readonly, width: 36) + @app.command(:pack, @combo, side: :left) + @app.command(:bind, @combo, '<>', proc { |*| on_game_selected }) + + @sync_btn = "#{f}.sync" + @app.command('ttk::button', @sync_btn, + text: translate('achievements.sync'), + state: @backend&.authenticated? ? :normal : :disabled, + command: proc { sync }) + @app.command(:pack, @sync_btn, side: :left, padx: [8, 0]) + + @unofficial_check = "#{f}.unofficial" + @app.set_variable(VAR_UNOFFICIAL, @config.ra_unofficial? ? '1' : '0') + @app.command('ttk::checkbutton', @unofficial_check, + text: translate('achievements.include_unofficial'), + variable: VAR_UNOFFICIAL, + command: proc { on_unofficial_toggled }) + @app.command(:pack, @unofficial_check, side: :left, padx: [12, 0]) + end + + def build_tree + f = "#{TOP}.tf" + @app.command('ttk::frame', f, padding: [8, 0, 8, 4]) + @app.command(:pack, f, fill: :both, expand: 1) + + @tree = "#{f}.tree" + @scrollbar = "#{f}.sb" + + @app.command('ttk::treeview', @tree, + columns: Teek.make_list('name', 'points', 'earned'), + show: :headings, + height: 16, + selectmode: :browse) + + @app.command(@tree, :heading, 'name', + text: translate('achievements.name_col'), anchor: :w, + command: proc { sort_tree('name') }) + @app.command(@tree, :heading, 'points', + text: translate('achievements.points_col'), + command: proc { sort_tree('points') }) + @app.command(@tree, :heading, 'earned', + text: translate('achievements.earned_col'), + command: proc { sort_tree('earned') }) + + @app.command(@tree, :column, 'name', width: 270) + @app.command(@tree, :column, 'points', width: 55) + @app.command(@tree, :column, 'earned', width: 145) + + @app.command('ttk::scrollbar', @scrollbar, orient: :vertical, + command: "#{@tree} yview") + @app.command(@tree, :configure, yscrollcommand: "#{@scrollbar} set") + + @app.command(:pack, @scrollbar, side: :right, fill: :y) + @app.command(:pack, @tree, side: :left, fill: :both, expand: 1) + + setup_tree_tooltip + end + + def build_status + @status_lbl = "#{TOP}.status" + @app.command('ttk::label', @status_lbl, + text: translate('achievements.none'), + anchor: :w, padding: [8, 2, 8, 6]) + @app.command(:pack, @status_lbl, fill: :x) + end + + def refresh_game_list + entries = @rom_library.all.select { |r| r['platform']&.downcase == 'gba' } + @game_entries = entries + titles = entries.map { |r| + GameIndex.lookup(r['game_code']) || r['title'] || File.basename(r['path'].to_s, '.*') + } + @app.command(@combo, :configure, values: Teek.make_list(*titles)) + end + + def select_game(rom_id) + idx = @game_entries.index { |r| r['rom_id'] == rom_id } + return unless idx + + @app.command(@combo, :current, idx) + end + + def on_game_selected + @display_list = nil + idx = @app.command(@combo, :current).to_i + selected_id = @game_entries.dig(idx, 'rom_id') + + if selected_id == @current_rom_id + populate_tree + else + @display_list = Achievements::Cache.read(selected_id) + populate_tree + end + end + + def populate_tree + @current_list = @display_list || @backend&.achievement_list || [] + @sort_col = nil # reset to default order when data changes + @sort_asc = true + update_heading_indicators + render_list(default_sorted(@current_list)) + end + + def sort_tree(col) + return if @current_list.empty? + if @sort_col == col + @sort_asc = !@sort_asc + else + @sort_col = col + @sort_asc = col != 'earned' # earned defaults desc (newest first) + end + update_heading_indicators + render_list(apply_sort(@current_list)) + end + + def render_list(list) + clear_tree + + if list.empty? + update_status(0, 0) + return + end + + list.each do |ach| + earned_str = ach.earned? && ach.earned_at ? + ach.earned_at.strftime('%Y-%m-%d %H:%M') : '' + item_id = @app.command(@tree, :insert, '', :end, + values: Teek.make_list(ach.title, ach.points.to_s, earned_str)).to_s + @tree_items << item_id + @item_descriptions[item_id] = ach.description unless ach.description.to_s.empty? + end + + earned_count = list.count(&:earned?) + update_status(earned_count, list.size) + end + + def default_sorted(list) + earned, unearned = list.partition(&:earned?) + earned.sort_by! { |a| -(a.earned_at&.to_i || 0) } + unearned.sort_by!(&:title) + earned + unearned + end + + def apply_sort(list) + case @sort_col + when 'name' + sorted = list.sort_by { |a| a.title.downcase } + @sort_asc ? sorted : sorted.reverse + when 'points' + sorted = list.sort_by { |a| a.points } + @sort_asc ? sorted : sorted.reverse + when 'earned' + # Nulls (unearned) always last regardless of direction + earned, unearned = list.partition(&:earned?) + sorted_earned = earned.sort_by { |a| a.earned_at.to_i } + sorted_earned.reverse! unless @sort_asc + sorted_earned + unearned + else + default_sorted(list) + end + end + + SORT_ASC = ' ▲' + SORT_DESC = ' ▼' + + def update_heading_indicators + { + 'name' => translate('achievements.name_col'), + 'points' => translate('achievements.points_col'), + 'earned' => translate('achievements.earned_col'), + }.each do |col, base_text| + indicator = if @sort_col == col + @sort_asc ? SORT_ASC : SORT_DESC + else + '' + end + @app.command(@tree, :heading, col, text: "#{base_text}#{indicator}") + end + end + + def clear_tree + return if @tree_items.empty? + + hide_tip + @app.command(@tree, :delete, Teek.make_list(*@tree_items)) + @tree_items.clear + @item_descriptions.clear + end + + def update_status(earned, total) + text = if total == 0 + translate('achievements.none') + else + translate('achievements.earned_label', earned: earned, total: total) + end + set_status(text) + end + + def set_status(text) + return unless @status_lbl + @app.command(@status_lbl, :configure, text: text) + end + + def update_title + entry = @game_entries.find { |r| r['rom_id'] == @current_rom_id } + game_title = entry && (GameIndex.lookup(entry['game_code']) || entry['title']) + window_title = if game_title + "#{translate('achievements.title')} \u2014 #{game_title}" + else + translate('achievements.title') + end + @app.command(:wm, 'title', TOP, window_title) + end + + def selected_rom_info + idx = @app.command(@combo, :current).to_i + entry = @game_entries[idx] + return nil unless entry + RomInfo.from_rom(entry) + end + + SYNC_TIMEOUT_MS = 60_000 + + def sync + return unless @backend + rom_info = selected_rom_info + return unless rom_info + + Gemba.log(:info) { "Achievements: sync started for #{rom_info.title} (#{rom_info.rom_id})" } + Gemba.bus.emit(:ra_sync_started) + + @sync_timeout = @app.after(SYNC_TIMEOUT_MS) do + Gemba.log(:warn) { "Achievements: sync timed out after #{SYNC_TIMEOUT_MS / 1000}s" } + @sync_timeout = nil + Gemba.bus.emit(:ra_sync_done, ok: false, reason: :timeout) + end + + @backend.fetch_for_display(rom_info: rom_info) do |list| + @app.after_cancel(@sync_timeout) if @sync_timeout + @sync_timeout = nil + Gemba.log(list ? :info : :warn) { + "Achievements: fetch_for_display returned #{list ? "#{list.size} achievements" : 'nil'}" + } + Achievements::Cache.write(rom_info.rom_id, list) if list + @display_list = list + populate_tree + Gemba.bus.emit(:ra_sync_done, ok: !list.nil?) + end + end + + # -- Include unofficial toggle ------------------------------------------ + + def on_unofficial_toggled + return unless @backend&.authenticated? + + value = @app.get_variable(VAR_UNOFFICIAL) == '1' + Gemba.bus.emit(:ra_unofficial_changed, value: value) + + # Bulk re-sync every library game that has an MD5 + games = @rom_library.all.select { |r| + !r['md5'].to_s.empty? + } + return if games.empty? + + lock_ui_for_bulk_sync + sync_games_sequentially(games, 0) + end + + def lock_ui_for_bulk_sync + @bulk_syncing = true + @bulk_cancelled = false + @app.command(@sync_btn, :configure, state: :disabled) + @app.command(@unofficial_check, :configure, state: :disabled) + end + + def unlock_ui_after_bulk_sync + @bulk_syncing = false + refresh_auth_state + end + + def sync_games_sequentially(games, idx) + return if @bulk_cancelled + + if idx >= games.size + unlock_ui_after_bulk_sync + # Refresh display for the currently selected game + on_game_selected + set_status(translate('achievements.bulk_sync_done', count: games.size)) + return + end + + rom = games[idx] + rom_info = RomInfo.from_rom(rom) + title = rom_info.title + set_status(translate('achievements.bulk_syncing', + title: title, n: idx + 1, total: games.size)) + + @backend.fetch_for_display(rom_info: rom_info) do |list| + next if @bulk_cancelled + Achievements::Cache.write(rom_info.rom_id, list) if list + sync_games_sequentially(games, idx + 1) + end + end + + # -- Achievement description tooltip ------------------------------------ + + TIP_DELAY_MS = 500 + TIP_PATH = "#{TOP}.__tip" + TIP_BG = '#FFFFEE' + TIP_FG = '#333333' + TIP_BORDER = '#999999' + + def setup_tree_tooltip + @app.command(:bind, @tree, '', proc { + # Identify treeview row under the pointer + px = @app.tcl_eval("winfo pointerx #{@tree}").to_i + py = @app.tcl_eval("winfo pointery #{@tree}").to_i + tx = @app.tcl_eval("winfo rootx #{@tree}").to_i + ty = @app.tcl_eval("winfo rooty #{@tree}").to_i + item = @app.tcl_eval("#{@tree} identify row #{px - tx} #{py - ty}").strip + + next if item == @tip_item + @tip_item = item + hide_tip + + next if item.empty? + desc = @item_descriptions[item] + next unless desc + + cancel_tip_timer + @tip_timer = @app.after(TIP_DELAY_MS) { show_tip(desc) } + }) + + @app.command(:bind, @tree, '', proc { + @tip_item = nil + cancel_tip_timer + hide_tip + }) + end + + def show_tip(text) + hide_tip + px = @app.tcl_eval("winfo pointerx .").to_i + py = @app.tcl_eval("winfo pointery .").to_i + wx = @app.tcl_eval("winfo rootx #{TOP}").to_i + wy = @app.tcl_eval("winfo rooty #{TOP}").to_i + rel_x = px - wx + 14 + rel_y = py - wy + 18 + + @app.command(:frame, TIP_PATH, background: TIP_BORDER, borderwidth: 0) + @app.command(:label, "#{TIP_PATH}.l", + text: text, background: TIP_BG, foreground: TIP_FG, + padx: 8, pady: 5, justify: :left, wraplength: 320) + @app.command(:pack, "#{TIP_PATH}.l", padx: 1, pady: 1) + @app.command(:place, TIP_PATH, x: rel_x, y: rel_y) + @app.command(:raise, TIP_PATH) + end + + def hide_tip + cancel_tip_timer + @app.tcl_eval("catch {destroy #{TIP_PATH}}") + end + + def cancel_tip_timer + return unless @tip_timer + @app.command(:after, :cancel, @tip_timer) + @tip_timer = nil + end + end +end diff --git a/lib/gemba/app_controller.rb b/lib/gemba/app_controller.rb index 19f9200..3fa8a37 100644 --- a/lib/gemba/app_controller.rb +++ b/lib/gemba/app_controller.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'fileutils' +require 'digest' module Gemba # Application controller — the brain of the app. @@ -39,6 +40,11 @@ def initialize(rom_path = nil, sound: true, fullscreen: false, frames: nil) @sound = sound @config = Gemba.user_config + # Config may have been created (and subscribed to the bus) before this + # point — e.g. the CLI calls Gemba.user_config before AppController runs. + # Re-subscribe now that the real bus is in place so bus events like + # :rom_loaded actually reach it (fixes recent ROMs not updating). + @config.resubscribe @scale = @config.scale @fullscreen = fullscreen @frame_limit = frames @@ -87,6 +93,8 @@ def initialize(rom_path = nil, sound: true, fullscreen: false, frames: nil) @settings_window.refresh_hotkeys(@hotkeys.labels) push_settings_to_ui + setup_achievement_backend + boxart_backend = BoxartFetcher::LibretroBackend.new @boxart_fetcher = BoxartFetcher.new(app: @app, cache_dir: Config.boxart_dir, backend: boxart_backend) @rom_overrides = RomOverrides.new @@ -134,6 +142,14 @@ def disable_confirmations! private + def confirm_quit + return true unless @rom_path + confirm( + title: translate('dialog.quit_title'), + message: translate('dialog.quit_msg'), + ) + end + def confirm(title:, message:) return true if @disable_confirmations result = @app.command('tk_messageBox', @@ -181,7 +197,27 @@ def setup_bus_subscriptions end bus.on(:recording_changed) { update_recording_menu } bus.on(:input_recording_changed) { update_input_recording_menu } - bus.on(:request_quit) { self.running = false } + bus.on(:request_quit) { self.running = false if confirm_quit } + bus.on(:achievement_unlocked) do |achievement:| + frame&.receive(:show_toast, message: "#{achievement.title} (#{achievement.points}pts)") + end + bus.on(:ra_login) do |username:, password:| + achievement_backend.login_with_password(username: username, password: password) + end + bus.on(:ra_verify) do + achievement_backend.ping + end + bus.on(:ra_logout) do + achievement_backend.logout + @config.ra_token = '' + @config.ra_username = '' + @config.save! + end + bus.on(:ra_unofficial_changed) do |value:| + @config.ra_unofficial = value + @config.save! + @achievement_backend.include_unofficial = value + end bus.on(:request_escape) { @fullscreen ? toggle_fullscreen : (self.running = false) } bus.on(:request_fullscreen) { toggle_fullscreen } bus.on(:request_save_states) { show_state_picker } @@ -202,10 +238,15 @@ def setup_bus_subscriptions refresh_from_config end - bus.on(:rom_loaded) do |title:, path:, saves_dir:, **| - @window.set_title("gemba \u2014 #{title}") + bus.on(:rom_loaded) do |rom_id:, title:, path:, saves_dir:, game_code: nil, md5: nil, platform: 'gba', **| + friendly = GameIndex.lookup(game_code) || + GameIndex.lookup_by_md5(md5, platform) || + title + @window.set_title("gemba \u2014 #{friendly}") @app.command(@view_menu, :entryconfigure, 0, state: :normal) # Game Library @app.command(@view_menu, :entryconfigure, 2, state: :normal) # ROM Info + @current_rom_id = rom_id + @achievements_window&.update_game(rom_id: rom_id, backend: @achievement_backend) # only if open [3, 4, 6, 8, 9].each { |i| @app.command(@emu_menu, :entryconfigure, i, state: :normal) } rebuild_recent_menu @@ -243,7 +284,7 @@ def build_menu @app.command("#{menubar}.file", :add, :separator) @app.command("#{menubar}.file", :add, :command, label: translate('menu.quit'), accelerator: 'Cmd+Q', - command: proc { self.running = false }) + command: proc { self.running = false if confirm_quit }) @app.command(:bind, '.', '', proc { handle_open_rom }) @app.command(:bind, '.', '', proc { show_settings }) @@ -275,6 +316,9 @@ def build_menu @app.command(view_menu, :add, :command, label: translate('menu.rom_info'), state: :disabled, command: proc { show_rom_info }) + @app.command(view_menu, :add, :command, + label: translate('menu.achievements'), + command: proc { show_achievements }) @app.command(view_menu, :add, :command, label: translate('menu.patch_rom'), command: proc { show_patcher }) @@ -404,6 +448,19 @@ def show_rom_info show_args: { core: frame.core, rom_path: @rom_path, save_path: sav_path }) end + def show_achievements + achievements_window.update_game(rom_id: @current_rom_id, backend: @achievement_backend) + achievements_window.show + end + + def achievements_window + @achievements_window ||= AchievementsWindow.new( + app: @app, + rom_library: @rom_library, + config: @config, + ) + end + def show_replay_player @replay_player ||= ReplayPlayer.new( app: @app, @@ -474,9 +531,15 @@ def load_rom(path) apply_frame_aspect(@emulator_frame) end - saves = @config.saves_dir + saves = @config.saves_dir bios_path = resolve_bios_path - loaded_core = @emulator_frame.load_core(rom_path, saves_dir: saves, bios_path: bios_path, rom_source_path: path) + md5 = Digest::MD5.file(rom_path).hexdigest + + # Set backend before load_core so load_game fires on the real backend, not NullBackend + @emulator_frame.achievement_backend = @achievement_backend + + loaded_core = @emulator_frame.load_core(rom_path, saves_dir: saves, bios_path: bios_path, + rom_source_path: path, md5: md5) @rom_path = path new_platform = @emulator_frame.platform @@ -487,12 +550,13 @@ def load_rom(path) rom_id = Config.rom_id(loaded_core.game_code, loaded_core.checksum) emit(:rom_loaded, - rom_id: rom_id, - path: path, - title: loaded_core.title, + rom_id: rom_id, + path: path, + title: loaded_core.title, game_code: loaded_core.game_code, - platform: @platform.short_name, + platform: @platform.short_name, saves_dir: saves, + md5: md5, ) @emulator_frame.start_animate @@ -608,7 +672,47 @@ def save_config bios_name = @app.get_variable(SettingsWindow::VAR_BIOS_PATH).to_s.strip @config.bios_path = bios_name.empty? ? nil : bios_name @config.skip_bios = @app.get_variable(SettingsWindow::VAR_SKIP_BIOS) == '1' + @settings_window&.system_tab&.save_to_config(@config) @config.save! + setup_achievement_backend + end + + def achievement_backend + @achievement_backend ||= Achievements::NullBackend.new + end + + def setup_achievement_backend + @achievement_backend = Achievements.backend_for(@config, app: @app) + @achievement_backend.include_unofficial = @config.ra_unofficial? + @achievement_backend.on_achievements_changed do + @achievements_window&.refresh(@achievement_backend) # only if already open + end + @achievement_backend.on_unlock do |_ach| + @achievements_window&.refresh(@achievement_backend) # only if already open + end + @achievement_backend.on_auth_change do |status, token_or_error| + case status + when :ok + if token_or_error + emit(:ra_auth_result, status: :ok, token: token_or_error.to_s) + @config.ra_token = token_or_error.to_s + @config.save! + else + emit(:ra_auth_result, status: :ok) + end + when :error + emit(:ra_auth_result, status: :error, message: token_or_error.to_s) + when :logout + emit(:ra_auth_result, status: :logout) + @config.ra_token = '' + @config.save! + end + end + # Resume existing session if token already stored + if @config.ra_enabled? && !@config.ra_token.to_s.strip.empty? + @achievement_backend.login_with_token(username: @config.ra_username, token: @config.ra_token) + end + @emulator_frame&.achievement_backend = @achievement_backend end def push_settings_to_ui @@ -799,17 +903,18 @@ def show_cursor def setup_global_hotkeys # '?' toggles the hotkey reference panel. Bound on 'all' so it fires even # when the help window itself has focus after being shown. - @app.bind('all', 'KeyPress-question') { toggle_help } + @app.bind('all', 'KeyPress-question') { @app.command(:event, 'generate', '.', '<>') } + @app.command(:bind, '.', '<>', proc { toggle_help }) @app.bind('.', 'KeyPress', :keysym, '%s') do |k, state_str| next if frame&.sdl2_ready? || @modal_stack.active? if k == 'Escape' - self.running = false + self.running = false if confirm_quit else mods = HotkeyMap.modifiers_from_state(state_str.to_i) case @hotkeys.action_for(k, modifiers: mods) - when :quit then self.running = false + when :quit then self.running = false if confirm_quit when :open_rom then handle_open_rom end end diff --git a/lib/gemba/config.rb b/lib/gemba/config.rb index 7c4bcec..036f5d0 100644 --- a/lib/gemba/config.rb +++ b/lib/gemba/config.rb @@ -52,6 +52,11 @@ class Config 'log_level' => 'info', 'bios_path' => nil, 'skip_bios' => false, + 'ra_enabled' => false, + 'ra_username' => '', + 'ra_token' => '', + 'ra_hardcore' => false, + 'ra_unofficial' => false, }.freeze # Settings that can be overridden per ROM. Maps config key → locale key. @@ -132,6 +137,14 @@ def initialize(path: nil, subscribe: true) subscribe_to_bus if subscribe end + # Re-wire bus subscriptions onto the current Gemba.bus. + # Called by AppController after it creates a fresh EventBus, because the + # Config may have been instantiated earlier (e.g. by the CLI) and subscribed + # to whatever bus existed at that time (possibly nil). + def resubscribe + subscribe_to_bus + end + # @return [String] path to the config file attr_accessor :path @@ -431,6 +444,48 @@ def log_level=(val) global['log_level'] = val.to_s end + # -- RetroAchievements ---------------------------------------------------- + + def ra_enabled? + global['ra_enabled'] + end + + def ra_enabled=(val) + global['ra_enabled'] = val ? true : false + end + + def ra_username + global['ra_username'] || '' + end + + def ra_username=(val) + global['ra_username'] = val.to_s + end + + def ra_token + global['ra_token'] || '' + end + + def ra_token=(val) + global['ra_token'] = val.to_s + end + + def ra_hardcore? + global['ra_hardcore'] + end + + def ra_hardcore=(val) + global['ra_hardcore'] = val ? true : false + end + + def ra_unofficial? + global['ra_unofficial'] + end + + def ra_unofficial=(val) + global['ra_unofficial'] = val ? true : false + end + # @return [String] directory for .grec recording files def recordings_dir global['recordings_dir'] || self.class.default_recordings_dir @@ -608,6 +663,11 @@ def self.boxart_dir File.join(config_dir, 'boxart') end + # @return [String] directory for cached RA achievement lists (one JSON per rom_id) + def self.achievements_cache_dir + File.join(config_dir, 'achievements') + end + # @return [String] default directory for patched ROMs def self.default_patches_dir File.join(config_dir, 'patches') diff --git a/lib/gemba/data/gb_md5.json b/lib/gemba/data/gb_md5.json new file mode 100644 index 0000000..7643917 --- /dev/null +++ b/lib/gemba/data/gb_md5.json @@ -0,0 +1 @@ +{"003417c3bef9a0d3a801d8ae5199c4fd":"Home Alone 2 - Kevin's Dream (USA) (Proto)","00378c0ae45e106454346d4874c0e041":"SD Hiryuu no Ken Gaiden 2 (Japan) (SGB Enhanced)","003943c85b2332615386dcc4810248ba":"Palamedes (USA) (Proto)","00408b7c09c99b8ea15b8ebb66e69130":"Spy vs Spy - Operation Boobytrap (USA)","0040b5bd11a936063a0dc9a30b9a8727":"Pagemaster, The (USA) (SGB Enhanced)","0068d12e8a75cf18b9d0b34ffcbd119b":"Jungle Wars (Japan)","008ea3be93c0e1d808431dc8728e01f6":"Kaisen Game - Navyblue 90 (Japan)","009aea0ac7f214ff6f3c8c070d4a6421":"Goal! (USA)","011b74bbfe8b5268416f488b60263f3c":"Dennis (Europe) (Beta)","01214c42aa62b421e7cef6b3e4511a5f":"Championship Pool (USA)","0127c54d0bd22db6ecda3796e68861c6":"Spider-Man 3 - Invasion of the Spider-Slayers (USA, Europe) (Beta 2)","012ee0a196c03cca91a43a9eadbecfb6":"Altered Space - A 3-D Alien Adventure (USA)","016c0eece553cc6114b115ca805dbef1":"Little Tales of Alexandria, The - Mr Meows Dance Party! (World) (MBC5) (SGB Enhanced) (Batteryless)","017ace47f4970576043075f7ba86073c":"Legend of Prince Valiant, The (Europe) (En,Fr,De)","019db3e93fa9583a04366a4e4597c618":"Rubble Saver II (Japan) (En)","01c580d873fd929b8a47837a0c6f91ff":"Cave Fighter (World)","01dedf212717562bbc2730a4f5947cd4":"Mikeneko Holmes no Kishidou (Japan)","02069fbf36f31f5d01adc1ac4d9d0770":"Lawnmower Man, The (USA) (Proto 2)","0221de99d11f50f79430c8ff9b430994":"Teenage Mutant Ninja Turtles II - Back from the Sewers (USA)","022f61999868aa209e0a2f66ba4ee710":"Choplifter II (Japan) (En)","022fd2b0cbaac8c7551a7db1cc861f5b":"Taiyou no Tenshi Marlowe - Ohanabatake wa Dai-panic (Japan)","023a8fd8eacad0656b5110da26dcdd44":"Battle Unit Zeoth (USA, Europe)","0263b14f7089bf543c4a8016d1597840":"Treasure Island (World)","026d4ae446271173ce797e93e8cff4b5":"Kuusou Kagaku Sekai Gulliver Boy - Kuusou Kagaku Puzzle Purittopon!! (Japan) (SGB Enhanced)","0281fd8061d82472e242954513805196":"Dr. Mario (World)","02d7df9a5ac5d859672b56be46343be1":"Xenon 2 (USA, Europe)","0325e6464931dce2a777635e71eee877":"TwinBee da!! (Japan)","033c219483ec7766517c94635b3a43f8":"Getaway, The - High Speed II (USA)","035d06c80ccbbf2d7ff49a4d5b98301e":"Rhythm Land (World) (v1.0.1)","037fcc5f7d7750b9dfd1c8946b64cf4f":"Shin Nihon Pro Wrestling - Toukon Sanjuushi (Japan)","038ba19b06f5d3b56e9bda495b609c54":"Tiny Toon Adventures - Wacky Sports (USA)","0397dd31e902a4a04f04b847ad21317d":"Cool Hand (Europe)","03be859e5b1448e7508aa4d83b424f07":"Dropzone (Europe) (Beta)","03c6d84a951be6703b7458478f4277b9":"Batman - The Video Game (World)","03ce24437224ff296a71f402663a0ee9":"Castle Quest (Europe)","040056615586a58260910fc9f7cb7f30":"Do I Pass (World) (En) (v1.5)","040a7f4b500fb47dc5896cc52128940f":"Super 69 in 1 (Europe)","0434a1320607ce8e79de69b10c7a1245":"Bart no Survival Camp (Japan) (En)","044c71562429da60891a93a131a0304a":"Battle of Olympus, The (Europe) (En,Fr,De,Es,It)","046fcc2d70cc6c9195c166f862ef4745":"ever - Lucid Space Program (World)","047215bf30c78267d37c26006a22ef92":"Die And Retry (World)","0482efb6afa8ef213f7fe92510ca3ade":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Zukei no Tatsujin (Japan)","04a6e77d1fabcbe325882e4bd79d6d4b":"Choplifter III (Europe)","04aedaba42fdb90f6226b7f9a0b9319f":"4 in 1 (Europe) (4B-007, Sachen)","04bde16beda3f9d7cec4509a04a75946":"Stargate (USA, Europe)","04c358cbb32898d5e8feed8bc0fe27ff":"Downtown - Nekketsu Koushinkyoku - Dokodemo Daiundoukai (Japan)","04ccc6858164bc24c4eb0e6469164dc0":"Teenage Mutant Ninja Turtles 2 (Japan) (En) (Cowabunga Collection, The)","04ec032cd1f6dab8f7737d422d129c70":"Mini 4 Boy (Japan) (SGB Enhanced)","052bd7a432452c0e811d1ea8bb6d9b21":"Pro Mahjong Kiwame GB (Japan) (SGB Enhanced)","05919b282f38abb78c82740733f4df79":"Super Chinese Land (Japan)","05abf83f5e7c30675801ec0d7648e03f":"Money Idol Exchanger (Japan) (SGB Enhanced)","05ba7f165dab1ffd49b63b4f5c704c02":"Faceball 2000 (USA)","05c256d964e31bd02a23f27e812cfd78":"Star Sweep (Japan) (SGB Enhanced)","05d5cf3404868efc22ac06e22ab5ba89":"Pop'n TwinBee (Europe)","05f432506ab629713f40b8d5fc3a5098":"Mega Man III (USA) (Sample)","05f5f5534c0d7e8100edf07a494f16e8":"Doraemon no Study Boy 3 - Ku Ku Master (Japan)","05f7b63c25b4871440968fd4ce25440a":"Star Wars - The Empire Strikes Back (USA)","060caa70249d12da3cf53d6d48323b08":"Gluecksrad (Germany)","0611b365116b22c1aaa7e3ce4faed5ed":"Home Alone 2 - Lost in New York (USA, Europe)","0631158ead23bfed84cd3a5010eb9295":"Micro Machines (USA, Europe)","066c7301810022d1232386b4eeab6de3":"Gauntlet II (USA, Europe) (Beta)","067d21b969c06ae9d9376106b91fb374":"Triumph (USA) (Proto)","06ad6e6281b355040575aad2ee22c9a6":"Zen-Nihon Pro Wrestling Jet (Japan) (SGB Enhanced)","06b75e657debd1568f18d369cc2422dd":"Magic Knight Rayearth (Japan) (SGB Enhanced)","06e7b8ce1781560c482d5f935c56a5bb":"Hammerin' Harry - Ghost Building Company (USA) (Proto)","07006fe2f7363d475e34fbf63e4e94d1":"WWF Superstars 2 (USA, Europe)","0713854b6893ed13a6edd19ea94b6caa":"Stick Man Guy (World)","072e25973dc896758749c55d2698be88":"Smurfs Travel the World, The (Europe) (En,Fr,De,Es)","073e6a0f2fdae655760aaf6db81da3b2":"Puzzle Nintama Rantarou GB (Japan) (SGB Enhanced)","073f048ebea0012bca0649ed1277078d":"Urusei Yatsura - Miss Tomobiki o Sagase! (Japan)","07b7e552a4100eba61a6415c4c897542":"Little Tales of Alexandria, The - Mr Meows Dance Party! (World) (MBC3) (SGB Enhanced) (Batteryless)","07c383f24c790b204a24c0c0164bbb49":"Makai Toushi Sa-Ga (World) (Ja) (Rev 1) (Collection of SaGa)","0841a527b116a52ad26de023b20b1a42":"Ghostbusters II (USA, Europe)","084bd732797939ad697b9a3d51f01ba4":"Rewind Time (World)","084f1e457749cdec86183189bd88ce69":"Tetris (Japan) (En)","08b5ea1083e8e62b5bf7a75823fe5b33":"Tesserae (Europe) (En,Fr,De,Es,It)","08c8ef36fd4979e404dfe041adddfca5":"Velious II - Fukushuu no Jashin (Japan)","08db8175b8903f68c3f874e0a39bed39":"Battle Ships (Spain) (En,Fr,De,Es) (Beta)","08f46bb59e52562f08c76f4e6c0040c5":"Arcade Classic No. 3 - Galaga & Galaxian (Europe) (SGB Enhanced)","09066099d74c7398f6f99ea8ccefa479":"Pit-Fighter (USA, Europe)","091e5208fbd182f3a9685990eb736b35":"Star Wars - The Empire Strikes Back (World) (Limited Run Games)","0937c8fc7c7b5470acb80f2462f49d48":"Kandume Monsters (Japan) (SGB Enhanced)","0941c6d463d971d56eee8e368a0abbb3":"Prince of Persia (USA) (Beta)","095cfb0c56a564bc13239787b01c525d":"Super Chinese Land 3 (Japan) (SGB Enhanced)","096206e2cce6b234c3d157c6cb2e1ee8":"Yvonne Goes to Carbonic (World) (v4.2)","0980a1650ad5e23a27202a58fc792ec8":"FIFA - Road to World Cup 98 (Europe) (Rev 1) (SGB Enhanced)","099d768c3541f4cbb6362c914e97f667":"Snow Bros. Jr. (Japan)","09ab7a431e216c65a0cfd9ae2f558a2e":"Shougi (Japan)","09acb679f68373c9853a4e215d627527":"Konami GB Collection Vol.3 (Japan) (SGB Enhanced)","09dbad535406168486b8b688caf33a9c":"Bubble Bobble Junior (Japan) (En)","09fd1f730709b1248f7382e3374578b5":"Space Trouble (World) (Proto)","0a1cbc05d75c2bd3e01aad3acb4e4019":"Ultra Golf (USA)","0a1ea6552eb8daf756824adb1f498559":"NBA All-Star Challenge 2 (USA, Europe)","0a2e27e279ee4faac326b0cf620b269b":"Tetris 2 (USA, Europe) (SGB Enhanced)","0a323bddc4f0159cea76cf44ed0c1a3c":"Hello Kitty - Pocket Camera (Japan) (Proto) (SGB Enhanced)","0a3304bdadddadc6c6b1d7cc8425d566":"Elite Soccer (USA) (SGB Enhanced)","0a5cc3c3bc487534740aca1db4da6575":"Plants Eat My Zombies (World) (v1.1)","0a7c71ce47cdc63550934037541019a6":"Shinseiki GPX - Cyber Formula (Japan)","0a96c9c737a07148fd065b3c121dcbb2":"Taito Chase H.Q. (Japan)","0acefb175380637bf0d49ad96da23d52":"Jelly Boy (Europe)","0affc9df2e1220ea4573deb6cb2d4b32":"Tetris Blast (USA, Europe) (SGB Enhanced)","0b10a49804c027c57201c61835acad77":"Zoop (Japan) (En)","0b4410c6b94d6359dba5609ae9a32909":"Castlevania - The Adventure (USA)","0b5127a54cc8581acfabe0413378ca3d":"Sneaky Snakes (USA, Europe)","0b72b9f0c2ce0b832c650bbcc974b023":"Virtual Wars (Japan)","0b7cbe56d1cf6370e60699e553d091a1":"Out of Gas (USA)","0bd1cf9c439b7095a64b4f76a5d16021":"Lawnmower Man, The (Europe)","0beb67de765ef358d50c28836a39bfb0":"Fish Dude (USA)","0bf2f0fe9537a2a6b6f8f2e037cb66b7":"Street Racer (USA, Europe)","0c3674c5020982b054d10449c5988092":"Minolta 2419 Adj. Program (USA)","0c7beead4f65e97a23b718ce20a1bf55":"Brain Drain (USA) (SGB Enhanced)","0cc70045da0c0cae54892684af4c0202":"Popeye 2 (Europe)","0ccb1e6beb86d79a7a5dad81eb6c73a9":"Yoshi no Tamago (Japan)","0d1406d83d25d417b8de92be3f302eba":"PGA Tour 96 (USA, Europe) (SGB Enhanced)","0d189c53d017a4a68b836a82cb1d9780":"Minolta 2440 Adj. Program (USA) (Alt)","0d24eeff28040ff2a8f63de5bc8cbea2":"Earthworm Jim (USA)","0d3d2b3bbca0a8d6f43968e12940b356":"Taz-Mania (Europe) (Beta)","0d7ca0b0355f8eddc2846eaa8dac218c":"Star Trek - The Next Generation (Spain)","0d9906e172c6143432b20706f44ac03e":"Monster Max (Europe) (En,Fr,De,Es,It,Nl) (Beta)","0dba2a8555c44fd7dcfa4a712353e7f4":"Song of Morus - Ghostly Night (World)","0ded2a31627c29a285637aae52b51427":"Konchuu Hakase (Japan) (SGB Enhanced)","0e142d46356ee6818c8fd35654eb5732":"Monty on the Run (World)","0e18f103fa102dafdcd695a9208770c5":"Eddie's Puzzle Time (USA) (Proto)","0e197969c69b529ebed89cfb736d1478":"StarHawk (World) (Limited Run Games)","0e29f0434b7bd4d806afbdea1c92ae7e":"The Light, The Fire (World)","0e4a3a1f29f20dea45638b2b72bc8a68":"Totsugeki! Ponkotsu Tank (Japan)","0e6d310f979c83bf1dfa01da803038d4":"NFL Quarterback Club 96 (USA, Europe)","0e82b5210966e9eb53d5b7ef906a0f40":"RoboCop Versus The Terminator (USA)","0e837cca81c48f18671751491b9c4c29":"Kinin Koumaroku Oni (Japan) (Rev 1)","0ea0896db6476d0d07cf3d35e0993849":"Monde Perdu, Le - Jurassic Park (France) (En) (SGB Enhanced)","0ea7e8a0d43a880c4c875b6fd0fb2a3d":"Lasama Chuanqi - Story of Lasama (Taiwan) (Alt)","0eb1920c5559f8a87b416739f192ba98":"Bouken! Puzzle Road (Japan)","0edf8501b8c2567371ae4f8747a27d63":"Double Dragon (Japan) (En)","0efe8e1f415ca008202be92566efdf75":"Pocket Golf (Japan)","0f021462180b18436c21299e923cca91":"Pipe Dream (USA)","0f497d937f8ce4fde2bb0f02d0929344":"Art School Pocket (World) (Fr)","0f539db976d8d272ed7067560b7c7e6c":"Darkwing Duck (USA) (Beta)","0fef748262bf93d67036a80e23cb42d1":"Dino Breeder 2 (Japan) (SGB Enhanced)","1054dd4e5dcedc72c27072d2c5b2f814":"Card Games (USA) (Proto)","1080141c1b99b5b92d187990bdc85c6a":"Nectaris GB (Japan) (SGB Enhanced)","10c1170d5b5416a217eb66821060421d":"Sa-Ga 2 - Hihou Densetsu (Japan)","10c581e4d5b612831c79724434f93e9f":"Rubble Saver (Japan) (En)","10cc4382f2c77400d7e2a0ccffbecdf2":"Zerd no Densetsu 2 - Xerd!! Gishin no Ryouiki (Japan)","10d92861e262069ce31559e12b927aa0":"Cave Noire (Japan)","10f18723a1ecf3c4c9d311c02f28a18b":"Dr. Franken (Europe) (En,Fr,De,Es,It,Nl,Sv) (Beta)","10fd41703b816fcb2a3d6766574b98f9":"Wave Race (USA, Europe)","1107c6ec10eba471045548919e7c114e":"Shippuu! Iron Leaguer (Japan)","1123060cb5177d576c191d774ebe403a":"Othello (Japan) (En)","113d8f894df6b8c3641b2ba1fe60c250":"Pinball - Revenge of the 'Gator (USA, Europe)","11829a41718f6ddef1bbf2e9eb6587fd":"Footballer of the Year (World) (v1.1)","11922d8a4f3c5bd68acdc18f0579ea57":"Final Fantasy Legend, The (World) (Collection of SaGa)","11be7ff8141f8d7a5c8cca903151f0ba":"Yoshi no Panepon (Japan) (SGB Enhanced)","11c49d405eef2174d9c14682204bb458":"Bubble Bobble (USA, Europe)","121cf07d369ed7fd45d21537855d3c34":"Asteroids Chasers (World)","12454fbcb38432e26f280282e7196e73":"Soccer Mania (USA)","127fd88142d69ac75368e9b59be70e05":"Konamic Ice Hockey (Japan)","1294651ee0bcdaf1a0724e7fa9ffe557":"Robin Hood - Prince of Thieves (Europe)","12add4ed6963a6cd303ca0fea892148f":"Nemesis (USA) (Rev 1) (Beta)","12d88fa2c0e6707f05beb556b661702d":"Ranma 1-2 (Japan)","12e9e43481d38003a4f1e2c2ce596aee":"Mysterium (USA)","131993b986f3ba1f682d8d74f050487b":"Hammerin' Harry (Europe)","1337510dc9de85723ff1778524c5007f":"Yogi Bear's Gold Rush (USA)","133ae23114bf442fef6acccd1b8e187a":"Terminator 2 - Judgment Day (USA, Europe)","133df46d4944261c84e8b411bef8b2cc":"Star Trek - The Next Generation (USA, Europe) (Beta)","13749826df12da4574e34ccb6d9c780d":"Asteroids (USA, Europe)","137d38365425885d5d86b16dc380d5c5":"Game Boy Datenlogger 1 (Germany)","13dd6801246da226b0c2db339df4a246":"Shadow Warriors (Europe)","13ec0c660b5a963a07b39ecabf0e0ab5":"Battletoads-Double Dragon (USA)","1425bc943f215cba23f1ec8c4bc22bbc":"Zool - Ninja of the 'Nth' Dimension (Europe)","142d1f9f4b868780824cca20010ad4d8":"Picross 2 (Japan) (SGB Enhanced)","14547035e8c7af31af08781d2691c20f":"Little Tales of Alexandria, The (World) (MBC3) (SGB Enhanced)","1475824e7262c0d6359f43c287e034a5":"Castlevania Legends (USA, Europe) (SGB Enhanced)","14a8e0bdb9f2b16d354ca0209e35aedb":"Oni V - Oni wo Tsugumono (Japan) (SGB Enhanced)","14d6a5e430452dca394bd3e641dc327b":"Wizardry Gaiden I - Joou no Junan (Japan)","14fe7234ee4bcb14adf20c743f084a35":"Wario Blast Featuring Bomberman! (USA, Europe) (SGB Enhanced)","15819cb3a6571eb67b52ce06f1972ef9":"Mystic Quest (World) (Collection of Mana)","159c8ca77e153b1cc5fe6d5d82a091c2":"Barbie - Game Girl (USA, Europe)","15c77caea8eb8fadd4a1ace65942168f":"Little Tales of Alexandria, The (World) (MBC3) (SGB Enhanced) (Batteryless)","15cd267d7805fe9f1769e9644a9cec2e":"Ultima - Runes of Virtue II (USA)","15d9979ace470a0abf9c83bc1f81dabf":"Blaster Master Jr. (Europe)","15db12b81db55364a5c0b064b22e569f":"Black Castle (World)","15f0b057ab8b7b53914129b3bbab6610":"Trappers Tengoku - Spy vs Spy (Japan)","15f1a2a703e632bbd4f311fe12279249":"Lion King, The (USA, Europe) (Beta)","1621182f6c8e762462aedb2b69c5e5ec":"Porklike (World) (v1.0.9) (SGB Enhanced)","1636d766639525de9fe1ef335808cdfb":"Robin Hood - Prince of Thieves (Germany)","1660f7937b4edde47f6fc3a7c4fc857e":"Footballer of the Year (World) (v1.0)","1695655af0d4320bc657cc5d3b26f4c3":"Flappy Special (USA) (Proto)","16a03da1364c683b73742dc3e6c0e788":"Kinnikuman - The Dream Match (Japan)","16af858484041d572299b501ead2b788":"Gear Works (USA, Europe)","16bc18ef00088094e9fad502e613be5e":"Mickey's Dangerous Chase (USA)","16bdc21f67f8226e1168983a46b65441":"Ciao Nonna (World) (v2.1)","16d86ec93f9aad85edcec7e6db18b435":"Pokonyan! - Yume no Daibouken (Japan) (SGB Enhanced)","16ddd8897092936fbc0e286c6a6b23a2":"Pocket Monsters - Midori (Japan) (Rev 1) (SGB Enhanced)","16ee9b10c27c136d2959ae87105a8a2e":"Nettou The King of Fighters '96 (Japan) (SGB Enhanced)","17142af806c86f45808a94550f2303d8":"World Cup USA 94 (Japan) (En,Fr,De,Es,It,Nl,Pt,Sv)","173896fb9f93fb39ed87a58981e82e36":"Sumou Fighter - Toukaidou Basho (Japan)","173da3188b302c34d882b798f468d741":"Sonic 6 (USA) (Pirate)","1752014c81020e4dbce44c47c301daf9":"Raging Fighter (USA, Europe)","17792b7924aa9275a5a4655e8b9bbc27":"Jungle no Ouja Tar-chan (Japan) (SGB Enhanced)","177f5fc642f650e45bae33b10ba1fe48":"Wizardry Gaiden II - Kodai Koutei no Noroi (Japan)","17998c241ec03d97f0c9ecac41f06db1":"Rodland (Europe) (Beta)","17d4f6ddb2996d989040b1881b0573bb":"Joe & Mac - Caveman Ninja (Europe) (En,Fr,De,Es,It,Nl,Sv) (Beta)","1897e54ca0af5f6c83fdb92ae6d02e2f":"Star Trek Generations - Beyond the Nexus (Europe) (SGB Enhanced)","18b83c9003caee31ed0e843a92c119a9":"Turn and Burn - The F-14 Dogfight Simulator (USA)","18e5146097aa9dfcb91b128e87dbff72":"Jeep Jamboree - Off-Road Adventure (Europe) (Proto)","18fe3526f170f47a277e0fac17d90170":"Kung-Fu Master (USA, Europe)","19058077b12ac22580aae17b3dd1233f":"Simpsons, The - Bart & the Beanstalk (USA, Europe)","1905ff1a339e777237edc66b59969f4c":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Keisan no Tatsujin (Japan) (Imagineer)","1967d7ddff33c292b5f935bc0acc1d25":"Bounce (World) (v1.1)","19b046ba344fc465306bd6e4be027719":"Joe Blade 2 (World)","19e07948889d06150ca84d5cbd606b83":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Nanmon no Sho (Japan) (Proto) (IE Institute)","19ef2657130f5e477393f8551dc7b23a":"Ciao Nonna (World) (v2.0)","19fd29efaf7ea9e314bd613954a92169":"Arcade Classic No. 3 - Galaga & Galaxian (USA) (SGB Enhanced)","1a181f068d715c4ca350fb168fb9dd8a":"Puyo Puyo (Japan) (SGB Enhanced)","1a316519500424ae9a2649746c4c83ab":"Stop That Roach! (USA)","1a4777d04e6cc718fd7e2499b9c23c55":"Takahashi Meijin no Bouken-jima II (Japan)","1a4aaf4af4b3610ca74ef3b307b6b2a9":"NBA Jam (USA, Europe)","1a52fb8f767e24dc75c3bb2d08679f6c":"Ninja Taro (USA)","1a583eda068a03bab68786f0d8f70597":"Marzipan Beef Reverser (World) (v2.0)","1a76705a7617c4f2c54ecf60d89bd0ae":"Pac-Man (Japan) (En)","1a851b27609bedcb993be91bff5978b0":"Barbie - Game Girl (USA) (Beta)","1a9c3966c0c2d17c1d67a0a49409db29":"Peetan (Japan)","1ab4aad28745a9a4c875e8bef7ea3ffa":"Castelian (USA) (Beta)","1b3e05519f7bdce7cc5a18a108e55888":"Kenzie's Birthday Dash (World)","1b5aebb54d59121d8dc3188929295607":"Ultraman (Japan)","1bcace7d7315f384cd853df51e8bbef7":"Family Jockey (Japan)","1bd6b416a5bdfcc3aa60bbd472d1d914":"Wordtris (France) (Fr) (Proto)","1bef0270ab12af28e694906cf934480a":"Momoiro Zousan (Japan) (Proto)","1bfc3e94193d95c4e1145fd6cbf8fd1b":"Goukaku Boy Series - Eiken 2kyuu Level no Kaiwa Hyougen 333 (Japan)","1c031ba472ef04cf76dc63b15d96aac2":"Xenon 2 - Megablast (Japan) (En)","1c04158b8c2408523620e73d88b0d8d5":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Shakai Battle Hen (Japan) (Imagineer)","1c0fab1d2d046bee898372bed404c31a":"Collection Pocket (Japan) (SGB Enhanced)","1c1619f1caef49132e87160aa20a0a4d":"Pyramids of Ra (USA)","1c1911e4a8d299fcc5df4180f33b69e6":"Q-bert for Game Boy (Japan)","1c94dccdfaaa0c3e1d6bda5969704885":"QIX (World)","1cb08c8447160f9757d1a48331fb05a2":"Wedding Peach - Jamapii Panic (Japan) (SGB Enhanced)","1cdea2beb1f8f1f4a3fb0c939112267e":"Puzzle Boy II (Japan)","1ceb3148a1b68b2ba9eada0393f987fc":"Tiny Toon Adventures (Japan)","1d0889833ed086c6b11c1fc4d40f9f3a":"Who Framed Roger Rabbit (Spain)","1d225e54ac782c4f4c44faf26ecfbd37":"Super James Pond (USA) (Proto)","1d2c316f9f32727261328c7a49b22e2c":"Super Mario Land 2 - 6 Golden Coins (USA, Europe) (Rev 1)","1d2fed99f9f478f404f161940e53cea6":"Indien dans la Ville, Un (Europe) (SGB Enhanced)","1d44f2b3c1e0a1cb65bcd4d5d0486776":"Pinball Mania (Europe)","1d5c3627f001d863e42dfa67c6c02ebc":"Monopoly (Japan)","1d5e05159b0ac6a5119bd6f743c7eb9e":"Simpsons, The - Bart no Jack to Mame no Ki (Japan) (En)","1d63b86c857ea92d23ca6d261cfeec68":"Edd the Duck (Europe) (Proto)","1d67ab62a74e22663b84da92c58aa501":"Dash (World)","1d69e97aff3c67471b6030c72a8833e1":"Crayon Shin-chan 3 - Ora no Gokigen Athletic (Japan)","1d776c87664d061fea24576b52528acf":"Aladdin (World) (Disney Classic Games) (SGB Enhanced)","1d94024621b825e9fbe7e46ed4e0a567":"Nekketsu Koukou Dodgeball-bu - Kyouteki! Dodge Soldier no Maki (Japan)","1dc2f1492fb4e2ecb1f1008ce19e3833":"Muncher (World)","1dd179d971829c8a9ca55100390a26f5":"Tsumeshougi - Mondai Teikyou Shougi Sekai (Japan)","1ddff2c150456069776f8c79671cb9f7":"Cool Spot (Europe)","1e0c5af7d66e1acb389ecd93b572e38a":"Cherry Rescue! (World)","1e3de154e6081d695b3446a5ceb8fff3":"Puzznic (USA) (Proto)","1e5fe428068d8e051e20874ce7c38349":"Castlevania - The Adventure (USA) (Castlevania Anniversary Collection)","1e639b34e71bfd910d682fc829e6d863":"Dragonborne (World)","1eb7ff636e532321a18885eea660604a":"Nemesis (USA)","1eba3db17024be2bc5a51d627bcc6bff":"Slurpee Cycle (World)","1ec4506aef73c1be2412b39d2ba3681c":"Game Boy Wars (Japan)","1ed313c4fd78b81a8ca3613e6234da7e":"Frogger (USA)","1ee7e23af0663dd66af62276917974b6":"F1 Boy (Japan)","1efbb42c4db24e5e42e778d969ba1f5d":"Mr. Chin's Gourmet Paradise (USA)","1efea4210026a8d733a5b2ade2b005f1":"Ikari no Yousai 2 (Japan)","1f406d44b61098883bbaafc076e994e9":"Soccer (Japan) (En)","1f66f1de0dc183d58e47cafdc414ec2b":"Sa-Ga 2 - Hihou Densetsu (Japan) (Rev 1)","1f8089ca53d6e9aff6d1907710d28bc8":"Heavyweight Championship Boxing (USA)","1f93249c298f3ecdc4099602d9dedbb5":"Milon's Secret Castle (USA, Europe)","1fad0b21e68bd05e2f29b2e5fd861719":"Takeda Nobuhiro no Ace Striker (Japan)","1fb76bb7f55ca19340fe8c7d1007e7ff":"Kachiuma Yosou Keiba Kizoku EX '95 (Japan)","1fcbb5903a90fb4875fdf2fc128f0d7f":"Twin (Japan)","1fe5ddbb6502baf81b9cee0ae7446728":"Super Mario 4 (Unknown) (Ja) (Pirate)","1ff86f10d1104200bf316cdc6612b63c":"Nintama Rantarou GB - Eawase Challenge Puzzle (Japan) (SGB Enhanced)","1ffa46f368917656a1590abae6112e79":"Lunar Lander (Japan) (En)","200626cc703cebb4e3f31b725a705220":"Metal Masters (USA) (Beta)","203db7ddc72359e4db5e9ab42a6f0ba8":"Kirby's Block Ball (USA, Europe) (SGB Enhanced)","203fd4178ee332d1b2cf24504716c885":"Mani 4 in 1 - R-Type II + Saigo no Nindou + Ganso!! Yancha Maru + Shisenshou - Match-Mania (China) (Ja)","20477830fcdbe53ebae93a2ae90c72c9":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Suuji de Asobou Sansuu Hen (Japan) (Rev 1)","2057201d3fd4a137ee8c74c73b0a7b03":"Yu Yu Hakusho Dai-3-dan - Makai no Tobira Hen (Japan)","208b978e1ee53efa875cd6dfc42223f2":"Animal Breeder 2 (Japan) (SGB Enhanced)","20b436fc3c9621eb4ee82bc3ef3687fb":"Doraemon Kart (Japan) (SGB Enhanced)","20d658fa55a9a61c59f888537039d8a7":"Cosmo Tank (USA) (Beta)","20e16379b6667ab17c512780bd9ae757":"NFL Football (USA)","20ef0111690cf16339f7eaaf79e0e71d":"Lawn Mower Land (World)","20ff18d9957c612ac6fb0fa688d2ea1e":"Ciao Nonna (World)","211a15218fa66e4a09bc253ae064991c":"Arcade Classic No. 4 - Defender & Joust (USA, Europe) (SGB Enhanced)","21268f9f405be70c218da9e43f36bbdf":"Snaky Pocket (World)","214f461d32073e12f0f8be8f25d0f4ed":"Monster Maker 2 - Uru no Hiken (Japan)","214f8ac98a8c9d78359d71c47cf46df5":"Shock Lobster (World) (v1.3)","216bfb10081e721be7ed5628785e094f":"Long Xing Tianxia (Taiwan)","2183b40217571843d08e132119324ddd":"Harbour Attack (World)","21cc47b68fc7c9c56ef3393dbe528600":"Castelian (USA)","21ced1aa8a0875e91fdfefc9ef1c1bf3":"ZAS (Europe) (Proto)","2204aecc6784ab2e6c5f063c8584e0d2":"Dragon's Lair (Japan) (En)","2215684318211e85135c4cd8e55f91a4":"Megami Tensei Gaiden - Last Bible (Japan)","2232ee0598c7b953b38b1bf4f7bf8ecf":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Kokugo Battle Hen (Japan) (IE Institute)","22ef15c88a371718d81b36f957f4f664":"Red October o Oe! (Japan) (En)","230b96e98d05cf0385cfaa5b75f1735c":"Goukaku Boy Series - Koukou Nyuushi Derujun - Kanji Mondai no Seifuku (Japan)","23824d72928a05e9fcf052d42f3c91c6":"Go! Go! Tank (USA)","2387654e0e8e63bfc5f85d9bd7aa6ac3":"Zoop (USA, Europe)","239cb2527756a4b509dcc45ba6bd1d75":"Pixel Who - The Lost Legions (World)","239fd20f424ee53d2f11018dbd942df4":"Boxxle (USA, Europe) (Rev 1)","23c7be98ac9a4d3b046ad1be3f0965e4":"Kid Icarus - Of Myths and Monsters (USA, Europe)","24186cb8ef3210c00b9c227c71b9db73":"Pri Pri - Primitive Princess! (Japan) (En)","2486ac22ff1ed53b4c8fa4f2d5226749":"Battle Unit Zeoth (Japan)","248dac256ccd86a224e7b28d86fa8bde":"PGA European Tour (USA, Europe) (SGB Enhanced)","24a6b4457a511cc667e9ac25417401ab":"Kid Dracula (USA, Europe)","24b4f33417fc95fe6b092bcd30605cb2":"Bo Jackson - Two Games in One (USA)","24c35f0158e14746d45251b4216d8693":"Choplifter II - Rescue & Survive (Europe)","24c5cec170f19493c6013b4ccaee1e35":"Megalit (Japan)","24cd3bdf490ef2e1aa6a8af380eccd78":"Final Fantasy Adventure (USA)","24d19f1069ac583462713060df18a753":"Sunsoft Grand Prix (Europe)","24db7b8d9080b1626dd949331ac40aca":"Asmik-kun World 2 (Japan)","24e14958adc385b04bdac3da02bed4c7":"Felix the Cat (USA, Europe) (Beta)","24f96821369540f25dc3768053569029":"Dai-2-ji Super Robot Taisen G (Japan) (SGB Enhanced)","2524230d0300f46ebf423ae1b37747eb":"Spot - The Video Game (USA)","254554a4412d0fba81c2ece8e094d30f":"Shin Keiba Kizoku Pocket Jockey (Japan) (SGB Enhanced)","2554c7f6365dbf59ec1a73f0124a70b4":"Binding of Isaac, The - Game Boy Edition (World)","255948255eda904e376e6435636b100f":"Coat Man (World)","255bca32093336ccbacdd185951c8727":"Gekitou Power Modeller (Japan) (SGB Enhanced)","25693d62f14011ed543a273e34e92ce5":"Go! Go! Hitchhike (Japan) (SGB Enhanced)","256f34df36549fb877101d28a7b92688":"Nihon Daihyou Team - Eikou no Eleven (Japan) (SGB Enhanced)","259aa674ac5634e47a642d024cfbdc66":"Gojira-kun - Kaijuu Daikoushin (Japan)","25b34ebece0e2c54baf9dee4f5845292":"New Chessmaster, The (Japan) (En,Ja)","25bc75255fdc90ba6ad00636d968dd2a":"Lemmings (USA)","25dfaca5120462af05532aaf4756776a":"Flintstones, The - King Rock Treasure Island (USA, Europe)","25e0dcb19fa8967455e0a3668b33edf7":"Minolta SLR Data Copy (USA)","25ec0916ff6f24a1878a9f30991d301d":"Arcade Classic No. 1 - Asteroids & Missile Command (USA, Europe) (SGB Enhanced)","25fbb082dc9bb9e86c0abb03ca5cc168":"Populous (Europe) (Sample)","261ec744fcf7a4eb5a6025c48c0538a3":"Monster Max (Europe) (En,Fr,De,Es,It,Nl)","26c65da146faa09505c554447792e493":"TaleSpin (USA)","27334d7717d8e3dc953ba733ef1853c4":"Magnetic Soccer (Europe)","27493f4aa1a94db0686de77e0e81e7b0":"Woolball's Backyard (World)","275dc0712e83f34252c2fcd2eaefb72f":"Bokujou Monogatari GB (Japan) (Rev 1) (SGB Enhanced)","276fea4acd820b304d41aa5c974e99af":"Ciao Nonna (World) (v1.1)","279022f2b918cbe8148b6f2c1a5f9acf":"Oyatsu Quiz Mogu Mogu Q (Japan) (SGB Enhanced)","27a131651700b396d593af89e625325f":"Umi no Nushi Tsuri 2 (Japan) (SGB Enhanced)","27b8724d17aaba0ffb4d3b8d79cde2ac":"SD Sengokuden 2 - Tenka Touitsu Hen (Japan)","27bcef0893a0848b25fc69be177db1e3":"Kaisen Game - Navyblue (Japan) (En)","27d7c8ae7cc36c1d5dfd8bd15df57e8d":"Cool Spot (USA)","27e8623a411f04fdf53b43508a0d2a7b":"Palamedes (Japan) (En)","27ebab8b364e10cb8ceb552d3bf24647":"Penguin Migrants (World) (v1.2)","27f2c99b13cbdb5a5be4afce87b9039b":"Rolan's Curse II (USA)","27ff412b4909f2b20e28a629ca91feee":"Madden 96 (USA, Europe) (SGB Enhanced)","2815ff13131712bcd00c3852d461b414":"Robin Hood - Prince of Thieves (USA)","2843796abf7cba23556b0006f398c4fb":"Chibi Maruko-chan - Okozukai Daisakusen! (Japan)","286caf661b28f99b7c8aca10c75c7bc5":"Nyghtmare - Betrayed (World) (Alpha A)","28737a5c760938a9746fa9e1a2fcefc6":"Batman Forever (USA, Europe)","28a4e2d989d55f654bba6ca6e0c7f047":"Dangan GB (World)","28a8263bb19b7ef3ddcac5ee83f62aee":"Hoshi no Kirby 2 (Japan) (SGB Enhanced)","28c1ef075f37bcf4951ac11385a1104f":"Ninja Boy (USA, Europe)","28e1605572aec89f7d210775e51cb8da":"Diablo (USA) (Proto)","290be7fd63076e4373f322900542c1b1":"Goukaku Boy Series - Gakken - Kanyouku Kotowaza 210 (Japan)","290f699f6c5b5b648aac43751de07ea1":"Bionic Commando (Europe)","296cb17655e184bb65c1cd2a3bc68d8a":"Pocket Puyo Puyo Tsuu (Japan) (SGB Enhanced)","29790c2fecde95caade0fd68bd97781a":"Tetris 2 (USA, Europe) (Rev 1) (SGB Enhanced)","298c80fe568bb2ff8bb7e4dfe5862a9d":"Probotector (Europe)","29962ef94473a677ee26eee90b16dc6d":"Maerchen Club (Japan)","2997dd5d6d1a50ac5a72a2bb42931de6":"CutThroat Island (Japan) (En) (Proto)","29b84d4b87c7f6120998a775f29535cb":"Eclipse (Europe) (Proto)","29c71c474c2fa00eeac79ddb55c2c174":"Wordtris (USA)","29d9ba6b3724a8de14f1f66dbe2e4aec":"Kikou Keisatsu Metal Jack (Japan)","29fe84cfca35b651a0bb86abf4b08792":"Yuuto Ichika Makes Friends (World) (En,Ja)","2a0465c954847a7dc00dbcf5d363cd16":"Otogibanashi Taisen (Japan) (SGB Enhanced)","2a2ae531b2cebd995508707b0e82b1b1":"B.C. Kid 2 (Europe) (SGB Enhanced)","2a457900607b2bf87d1377f066d7aa44":"Phantasm (Japan)","2a5fc7ed564d290e04fbb5968480db52":"Momotarou Dentetsu jr. - Zenkoku Ramen Meguri no Maki (Japan) (SGB Enhanced)","2a76ab00f041ec61ea08899021a4c07e":"Ponta to Hinako no Chindouchuu - Yuujou Hen (Japan)","2a7d9044b9bdbc133d1a9bb5c0f9b2a1":"Dr. Franken (Europe) (En,Fr,De,Es,It,Nl,Sv)","2aaa6042a1d6c7fe2f3300c8a1158ef0":"Minolta 2098 Adj. Program (USA)","2ac6a2561254ad50284f4c9650b30447":"Super Hunchback (Japan)","2acfc8d0213b186552124fb8b3085fa1":"Yakuman (Japan)","2aff6ad314aa6833e558f2b8b8cdac91":"Mortal Kombat 3 (Europe)","2b04dbc9b7dbddd456f56282f36f58ce":"Rockman World (Japan) (En) (Beta)","2b1221e85b545bba7e2291fede03fd96":"Bust-A-Move 3 DX (Europe)","2b3c9ee51f0e89df14c3698b293ba531":"Pagemaster, The (Europe) (SGB Enhanced)","2b42dbc0934fdd90bca3a4965520bf37":"Jungle Strike (Europe)","2b42e312afbee6599ce413a8784e4e68":"Torpedo Range (USA)","2b589e58d8821c59b7af702723361db5":"Momotarou Collection 2 (Japan) (SGB Enhanced)","2b992d2bd90db504bf4357b4f77b4604":"Asterix (USA) (Proto 3)","2ba27abe03688caa433e9e3d500db4a0":"Game Boy Aging Cartridge (World) (En,Ja) (v1.1)","2bb0df1b672253aaa5f9caf9aab78224":"Final Fantasy Legend II (USA)","2bda57560f54fe854ea5d53b60bd22a8":"Olympic Summer Games (USA, Europe) (SGB Enhanced)","2be2472951eb4e25ab0c70fdee298130":"Dracula Densetsu II (Japan)","2be59d4c20728300c84a71fcfcb565f9":"Wizardry Gaiden III - Yami no Seiten (Japan)","2c07caee51a1f0c91c72c7c6f380b0f6":"Joshua & the Battle of Jericho (USA)","2c1358474573c9dd38d6a128f4714a86":"Mega Man - Dr. Wily's Revenge (Europe)","2c4922faac9fb989ab556282598f8ec0":"Prince of Persia (Europe) (En,Fr,De,Es,It) (Beta)","2cad6ee6df3402aeb8f8ab7921517779":"Bomberman GB (Japan) (SGB Enhanced)","2cb38b3b78f755bcc5cd2aa059a7d2ed":"Asteroids (USA, Europe) (Beta)","2cc322a27530f6aaa09a35b2f14aebd5":"Contra (Japan) (En)","2cd8171d2c0d6695f6c4159476d459e7":"Hong Kong (Japan)","2cf73ae0ef2b62e9d20b5432b2f6c5de":"Purikura Pocket - Fukanzen Joshikousei Manual (Japan) (SGB Enhanced)","2cf83df10495ad163c88698c6c44f1ef":"Street Fighter II (USA, Europe) (Rev 1) (SGB Enhanced)","2d07ba7a88c2daff07da53831166500a":"Ken Griffey Jr. Presents Major League Baseball (USA, Europe) (SGB Enhanced)","2d0db8848754773c85ef1d9eab7318c9":"Track Meet (USA, Europe) (Beta)","2d56a7413fb73ad307d399af4c06a8d5":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced) (Alt)","2d7edcd2bb9fab77364011f6043b4b73":"Doctor GB Card 4M (World)","2d83537ba548e4118ea3e8ae0a309dfe":"Bubble Ghost (USA, Europe) (Beta)","2d932dc975fc98d294dfab7d70e553ef":"Tom to Jerry Part 2 (Japan) (En)","2dcdb3808c2ccef569b215e0a35800a7":"Castlevania II - Belmont's Revenge (USA, Europe) (Castlevania Anniversary Collection)","2dd28f8f43df06327c04a51959ac526e":"Muhammad Ali Heavyweight Boxing (USA, Europe)","2dd7cac468422231ae2aba980e4c4691":"Bomber King - Scenario 2 (Japan) (En)","2df6b439a35e0d511d52fa75c6a7849a":"Pokemon - Version Jaune - Edition Speciale Pikachu (France) (CGB+SGB Enhanced)","2dfaeaf059179602d692b92ebb9a1dfe":"4 in 1 (Europe) (4B-005, Sachen-Commin)","2e3a0305f79b058cc4618565bc2db745":"Parodius Da! (Japan)","2e46072ce2416feb18f4bd1e9943546c":"Donkey Kong Land III (USA, Europe) (SGB Enhanced)","2e4bd75723b0bc4f56c8e7077030b45a":"Counting Sheep (World)","2e5943f9e984fa4aed26542eacf2d9f4":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Suuji de Asobou Sansuu Hen (Japan)","2e85bbfc5bc2aaa51955f0fcbcda0842":"Cult Master - Ultraman ni Miserarete (Japan)","2e8d69bd73c3deee6c076c0a2da25617":"Yakuman (Japan) (Rev 1)","2eb9a6891fc79cd878d8bc12d04a0790":"Dynablaster (Europe)","2ebbf49d18833d07d6dae4e128ca1136":"Track Meet - Mezase! Barcelona (Japan) (En)","2ec376fb2b9565f20475d7007134b9e2":"Bubble Bobble (Japan) (En)","2eee88360aa199b7adc9d9c6647e0809":"DuckTales 2 (Europe)","2efe1569e3be81e7e19b13eafc60cd24":"Mystic Quest (France)","2f1f67663193e3107e028e570a7ccd86":"Centipede (USA, Europe) (Accolade)","2f24a29e157b1b06f731fb5e63e96168":"Alien Olympics (Europe) (Beta 3)","2f367a3ffd68a90d45909f89ed835e2c":"F1 Pole Position (USA, Europe)","2f53a8739acac44fe6400dfdaed01a81":"Hudson Hawk (Japan)","2f77e4293fd0a2197aca5d62751c3e33":"David Crane's The Rescue of Princess Blobette (World) (Limited Run Games)","2fa251041a892a57966806db01ad85ac":"Laser Squad Alter (World)","2fa78f748aa9bced4cedd95f330c9a11":"Dennis (Europe)","2fc634a297bee6e1109d9ca2197cc8d2":"Cryohazard (World)","2fc9be5fa50cfa9c660a2ceaa55344ae":"Soukoban (Japan)","300c72aa607aac5126dd791884233691":"Flash, The (USA, Europe)","300ea2593b2c29c3950fed23d672e11e":"Puyo Puyo (Japan) (Rev 1) (SGB Enhanced)","3029c962c483df174fc6f5c9202326e3":"Monster Race (Japan) (SGB Enhanced)","302caa3ceddccc5fba36787b44d25da7":"Blades of Steel (USA)","302f773a39fe0e45756b050ee94f0918":"Bakenou TV '94 (Japan) (SGB Enhanced)","303ca5fa5dcf4abbf2e18429d7241ecb":"Nigel Mansell's World Championship Racing (USA)","3050cdf055b1d036f85c9c629b03fbf2":"Pocket Bomberman (Europe) (SGB Enhanced)","305576b40d3f801e9ea23fa27939d5f1":"Bobby's World (Europe) (Proto) (SGB Enhanced)","307889b908a3954b224493486e4c4294":"Lucky Luke (Europe) (En,Fr,De,Es)","308abd707a48ee9d69c287d818469fd6":"Boxxle II (USA, Europe)","308f35e84b1984aba38814db00a4e769":"Volley Fire (Japan)","309fc69d5ab1d2b17d0bbc127faf04c1":"Rockman World 5 (Japan) (SGB Enhanced)","30b579d82ae755bd37c1d4157a96129c":"Popeye 2 (USA)","30c2d9a5370f10c02e1ab84bceb43fcb":"Pogo Pete (World)","30c998cf3a2c60d580a75989af6f39fb":"Lion King, The (USA, Europe) (Beta)","30e941af5b21d0e462e3d00cba0df409":"Sword of Hope II, The (USA) (Beta)","3103cc297e3d83ada597024b60a2c1e6":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced)","31223019b126dbcc85f14905588d053b":"Mortal Kombat II - Kyuukyoku Shinken (Japan) (En)","312ea1fe2d4734f33ffa617dd4a7676b":"Boxxle (USA)","3132b823343c82dacece721452612812":"Blues Brothers, The - Jukebox Adventure (Europe)","31424c11298bc10d4976e201ba504c9e":"Smickeonn 2 - The Game (World)","314884ad3ab74002863b3192796c1be5":"Tintin in Tibet (Europe) (En,Es,It,Sv) (Beta) (SGB Enhanced)","314ca1610e00861bc97611c8f874503a":"Mulan (Europe) (SGB Enhanced)","3164121570d96f879a1426df2826269d":"Pachi-Slot Kids 3 (Japan)","3172f2d0c417107da132f8437c43763b":"Teenage Mutant Hero Turtles - Fall of the Foot Clan (Europe)","31749ebd037d4d83c91255dd9a7482c5":"Zuigao Jimi (Top Secret) (Taiwan)","31adc9a8f9f1619e736bfc533e4ed2dd":"SmartCom (Europe)","3208775b434d8228d1bf950b91a39e70":"Tottemo! Lucky Man - Lucky Cookie Minna Daisuki!! (Japan) (SGB Enhanced)","3208cc9ee33a163cd7cad242db3e1f4a":"Altered Space - A 3-D Alien Adventure (Japan) (En)","322965849b9103a3d6906c9697a19c09":"Saigo no Nindou (Japan) (En)","32628dd7b39919a3a5ab77b245cd6b63":"Bugs Bunny Collection (Japan) (SGB Enhanced)","32731c8db5e2a1e91ed583e67f89bb6b":"Mulan (USA) (SGB Enhanced)","328402b9ea5ef55e155d7fdbdebd46a5":"Minolta 2166 Adj. Program (USA)","32b497a8d8d21b82aa9c71ed07231b34":"Smickeonn - The Game (World)","32db3b2ef7a88bee1352f1da1fde1154":"Illuminated (World)","3322ce4e576a33df834bbff80e627047":"Nontan to Issho - Kurukuru Puzzle (Japan)","333444e90c0bfb99c4ff89fdcb920fe4":"Donkey Kong Land III (USA, Europe) (Rev 1) (SGB Enhanced)","33349ad9019762b79c467cd241d79344":"Masakari Densetsu - Kintarou Action Hen (Japan)","3343ceca5dd6586e4774609526167d55":"Pokemon - Versione Gialla - Speciale Edizione Pikachu (Italy) (CGB+SGB Enhanced)","3353653e75b9110afdd37452b27cd312":"Head On (Japan) (En)","33d428bd17848c4cfa7dc1b7f16644ec":"Lemmings (Europe) (Rev 1)","340e4ab12d1151b68ec6425f509d115c":"Legend of Zelda, The - Link's Awakening DX (France) (Proto)","3418b37cc4ab9bbd8b416ba27be2f8f7":"Knight Quest (USA)","341b155413d2253886d8f188625cc1c3":"Joe & Mac - Caveman Ninja (Europe) (En,Fr,De,Es,It,Nl,Sv)","341d925720680e94fdaadfc10458d07f":"Kingyo Chuuihou! - Wapiko no Wakuwaku Stamp Rally! (Japan)","34310686415c87dfe69882a6ad3f548f":"Who Framed Roger Rabbit (Europe)","344ed70fe1a7a8cc904eda886543252c":"Toy Story (USA) (Rev 1) (SGB Enhanced)","3485e210e798df389e4ffc1270f86382":"Tarzan - Lord of the Jungle (USA, Europe)","3488999b749038efa076ea7b2fcc99bc":"Game de Hakken!! Tamagotchi - Osutchi to Mesutchi (Japan) (SGB Enhanced)","3496b0cab86ae1981142c0ddb9ae6183":"Pinball Fantasies (USA, Europe)","34b3d0f0843b83e5b0e00bc3d0669793":"Daedalian Opus (USA)","3502be0da5d444ec144aae9ce1409e0d":"Castelian (Europe)","3552eada6ea2db722fab1048e3ec654f":"FIFA - Road to World Cup 98 (Europe) (SGB Enhanced)","3593f45c94d5b612c7864e5181c7aeff":"Nekketsu Koukou Soccer-bu - World Cup Hen (Japan)","35b1621d14b27cace027bd710ed6040b":"Masakari Densetsu - Kintarou RPG Hen (Japan) (SGB Enhanced)","35c4eb1f0d7058f7d559056d5cfa945c":"Binary Monsters II - Adventure of Hell (Taiwan) (En)","35c8154c81abb2ab850689fd28a03515":"Pokemon - Version Bleue (France) (SGB Enhanced)","3620fd4985e916064d5f6560e54605e3":"Borruga - Neo Pinball (World)","369bc7cde60ac3f97f72ff605502797f":"Nettou Samurai Spirits (Japan) (Rev 1) (SGB Enhanced)","36ce150459099b9a7fccbc2ee46ac22c":"Last Action Hero (USA, Europe)","36dbbefd222bdb0921189c4be4fa1ead":"Legend of the Sea King GB (USA) (Proto) (SGB Enhanced)","3701cf0841b45c7b2c546fc4e303aaf1":"Goukaku Boy Series - Gakken - Rekishi 512 (Japan)","371625f3dea030998225754d56ebe81c":"Shootris (World)","375d65b184ec4a689a6477c46363d224":"Tesserae (USA) (Beta)","376c0f79da62cc677817fe119c3db2c4":"Small Town Emo (World)","378236df6a7c686dfaa6743b63d1f757":"Spirou (Europe) (En,Fr,De,Es) (Beta) (SGB Enhanced)","379c0c424093a74a915ad444a966307c":"Trip World (World) (Limited Run Games)","37c69c73c81e221189a672938b5f30ab":"Puzzle Bobble GB (Japan)","37e017c8d1a45bab609fb5b43fb64337":"Spiritual Warfare (USA)","37f2e18c9c015c6578ef3dd404dafe26":"Pinocchio (Europe)","37f377c7b462b69f01bc365177fb1ff8":"Minolta 2463 Adj. Program (USA)","3801f065c93f6ad62e5d895a03f6ee75":"Cyberlice (World) (Proto)","38412ba58b750d1a838137ade975f62a":"Yannick Noah Tennis (France) (En)","38b05e5167a24089cb18cc95e3911019":"Krusty's Fun House (USA, Europe)","38b65d28ac0bd619f5dee5a45d5fc542":"Mickey Mouse - Magic Wands! (USA, Europe) (SGB Enhanced)","38bd3f2ee51fbd6882b5c76d6f5dd18b":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Keisan no Tatsujin (Japan) (IE Institute)","3910ce6b44b689a06889693771ded6dc":"Attack of the Killer Tomatoes (USA, Europe)","399fa899194542c7bd5ba92969795ac5":"Oni IV - Kijin no Ketsuzoku (Japan)","39f9e3e6f9b12259e49908f4fab488fc":"Blade Warrior (Europe) (Proto)","3a40efba91af743006aa093c6ed44638":"Super Ayanami Discovery SlideShow (Japan) (v1.1)","3a4bb57e9fbd4ef563c0c7b59a1c82a5":"Kwirk - He's A-maze-ing! (USA, Europe)","3ab483b3042f9096582c16191b3a3448":"Hit the Ice - VHL - The Official Video Hockey League (USA, Europe) (Beta)","3aba896b1761f25d558b2ee409e0137f":"Ultraman Club - Tekikaijuu o Hakken seyo! (Japan)","3ad6a2e9c2872cd8f92d86e18332262c":"F-1 Race (World)","3addab2611566ab072fc996f8a81b224":"Bomberman GB 3 (Japan) (SGB Enhanced)","3ae6b09a78535d902a5969ca99b9ee73":"Teenage Mutant Ninja Turtles II - Back from the Sewers (USA) (Cowabunga Collection, The)","3ae8eceb23913aeb1a655da481541a6b":"Sensible Soccer - European Champions (Europe)","3afbe0cf110fc6ad8def8377ecffc34d":"Zelda no Densetsu - Yume o Miru Shima (Japan) (Rev 1)","3b051df77605172195dcff97c2c935cc":"Boomer's Adventure in ASMIK World (USA)","3b16ccb118f4959886ab5cbc14041002":"NFL Quarterback Club (USA, Europe)","3b1d442a7b54cc4faf27f6f67d96c892":"Shock Lobster (World)","3b359e9fec183bff5f964e25b599b246":"Seiken Densetsu - Final Fantasy Gaiden (Japan)","3b3ee80272479464698200ad712d4152":"Ren & Stimpy Show, The - Space Cadet Adventures (USA)","3b3fa3dd77c2aec53856210d8311fa6d":"GB Basketball (Japan) (En) (Beta)","3b5827de23512ae2aad56a071e9ae3a1":"TripleA (USA) (Proto)","3b710442b0a0e792e43dd98cb079dc5e":"Hyper Black Bass (Japan) (En,Ja)","3b716f2729fb25ef75ba53c5115bff89":"Minolta 2156 Adj. Program (USA)","3ba194e36ddefbd8585d9e567e9f494d":"Monopoly (Europe) (En,Fr,De)","3ba766a3d32b765bb038d2ef6b49ead4":"Sacred Meat (World) (v1.3)","3c0025edba53399e4fece1811d8e2be2":"Legend of Zelda, The - Link's Awakening DX (USA, Europe) (Proto)","3c239f6409e4c15fbec69ef5459954a2":"Yelu Wangzi (Prince Yeh Rude) (Taiwan) (En)","3c268409bf6869a8707839a7dd1ee1c7":"Spanky's Quest (USA)","3c8dfc25fd8d2691cfe1cb2c375e097c":"Power Mission (USA)","3ce1af74e7f2d498d08ff797dde87a1e":"Bomb Jack (Europe) (Beta 2)","3cf985dde797f178b8446aefedf5cd20":"Bouncing Ball, The (World)","3d02cb66bdeea139aaa1f9d91d092a21":"Heiankyou Alien (Japan) (En)","3d08d0dbe1fa865e3d2e87578cced5f5":"WWF Superstars (Japan)","3d0d05e30fc2d0f7cb6a956dd5154590":"Into the Blue (World)","3d1c4d68c6ef613b919f32303bce6beb":"Sacred Meat (World) (v1.1)","3d2eae10e026ca03f6a7a91ae089eb20":"Jungle Strike (USA)","3d4537f6a0542f781e408bd5440d23dd":"Dragon Ball Z - Gokuu Hishouden (Japan) (SGB Enhanced)","3d45c1ee9abd5738df46d2bdda8b57dc":"Pokemon - Red Version (USA, Europe) (SGB Enhanced)","3d57e0391c8191c105a4f015a0c103e9":"Battletoads (Japan)","3d8f6eccc13f3344c8d971b7e141f064":"Snoopy - Magic Show (Japan) (En)","3d9099f5c9822d771f461c20a153a59b":"Scotland Yard (Japan)","3db9f9f0c5913d3c9f7b5d5fbf7b5e02":"Chessmaster, The (USA, Europe)","3dbe9be772ca50da3a76d8860c7b08e2":"Side Pocket (World)","3dcbd16d3f9da153dca926f200ca1725":"Kachiuma Yosou Keiba Kizoku (Japan)","3de5424cbdc270c965487a614a360828":"Kachiuma Yosou Keiba Kizoku EX '94 (Japan)","3defa1c909af45963f3ad867ec5f3414":"Ray-Thunder (Japan)","3e0790735fcbfa6f2cd2c5c850eeed1e":"Mogu Mogu Gombo - Harukanaru Chou Ryouri Densetsu (Japan) (SGB Enhanced)","3e35ece810eaa26bb027a18f58cf6dba":"Game Boy Gallery 2 (Japan) (SGB Enhanced)","3e7d080982af3aedb9c7e9dc5486b468":"Teenage Mutant Ninja Turtles (Japan)","3e986cf3598e0a690fed48aa8c7d95b1":"Battle Arena Toshinden (Europe) (SGB Enhanced)","3eade561a44103622a0aff7b176d3207":"Nettou The King of Fighters '95 (Japan) (SGB Enhanced)","3eb476d0c6347ce9034246f826866a58":"RoboCop 2 (USA, Europe)","3eb5ebda098635b2da0021f46a959de4":"Mani 4 in 1 - Takahashi Meijin no Bouken-jima II + GB Genjin + Bomber Boy + Milon no Meikyuu Kumikyoku (China) (Ja)","3ef00d0a0b1e7e359b0246c2cff30477":"Jimmy Connors Tennis (USA, Europe) (Beta)","3efc6c34d89a19a434dcf2e8f45e67b9":"Jankenman (Japan)","3f2335f849fd02769099ac3bd6d81337":"Milon no Meikyuu Kumikyoku (Japan)","3f2f5ec07a222c281796691bb43249f9":"Jet Pak Man (Europe) (Proto)","3f33f45c37f962307be4be041f8e0766":"Little Tales of Alexandria, The - Mr Meows Dance Party! (World) (MBC5) (SGB Enhanced)","3f55fde8e05a4d372f7f30a1f7398fb5":"Hunchback of Notre Dame, The - 5 Foolishly Fun Topsy Turvy Games (USA, Europe) (SGB Enhanced)","3fc426ca2907b73a43c9ff63f78e1105":"Tower of Hanoi (World) (v1.1)","3fdfe480a8cd859fb682f32b6da2fb5b":"A Fairy Without Wings (World) (v1.3.0)","400cb2ad3d7ee30483b28f5f098a5bb7":"Double Yakuman II (Japan)","401647ad59208d67507245ac13e3894c":"Rockman World 4 (Japan)","4019ad36149883be86fb3ee45f79c042":"Roommate Simulator (World)","401e3778fb24a2af4bce7a3189fcfdd3":"Namco Gallery Vol.3 (Japan) (SGB Enhanced)","4057131cb9cedfb2fcdbc36904e7896d":"God Medicine - Fukkokuban (Japan) (SGB Enhanced)","4067f70f9def39ceb49a258540ce3d66":"Ghostbusters II (Japan) (En)","4072bd18c72755b15a3ae712202807fc":"Super Off Road (USA, Europe) (Beta)","4097f89b7f66168fd977f2df42db15ec":"Matthias Sammer Soccer (Germany) (SGB Enhanced)","409da59eb0050f04834bd2d7a83368ab":"Gargoyle's Quest II - The Demon Darkness (Europe) (Proto)","40b4238e683eea908a09f978ce5aff2a":"Tom to Jerry (Japan) (En)","40c38735c8f225ca8de749efceab6ceb":"Bikkuri Nekketsu Shin Kiroku! - Dokodemo Kin Medal (Japan)","411c3d168141d10eddd93243f2a7765f":"Ultima - Runes of Virtue (USA)","412075e19f160df8c3571ae37184d827":"Turok - Battle of the Bionosaurs (Japan)","4150508f6882f691dc6dd3f28bc4d48f":"Onigashima Pachinkoten (Japan)","41ac9bd50237cbd54f13b50abf30973a":"Dino's Offline Adventure (World)","41b56cdbf28fc78f4e3d6f66907214ff":"Dracula Densetsu II (Japan) (Castlevania Anniversary Collection)","41e5a302c648373565f7fde4ca7e4ff9":"Spot - The Video Game (Europe)","4202e3486b95ab9a5718830b2aa9b7f6":"Pingu - Sekai de 1ban Genki na Penguin (Japan)","42048ce08886f2adcc4f004e002bed50":"Sword of Hope, The (Spain)","421a923ba483f65a967b8455500b8880":"RoboCop (USA)","422652c9f3474cb89f8eee38808ebfb4":"Little Master 2 - Raikou no Kishi (Japan)","426f96e31186b3a6e73a624d97b3b2dc":"Super Black Bass (USA)","42926474038e4d82e2b7a5e60fbd46c6":"Hook (Japan)","4297f98b9b8354e34e7fdd237bbf3265":"Conefuse (World) (Rev 1)","42b8ce5b0d54f4565ba99e02f09fe115":"Fighting Simulator 2 in 1 - Flying Warriors (USA, Europe)","42d2f65e2549be9d1d126a6828b5d1c1":"Game Boy Camera (USA, Europe) (SGB Enhanced)","42f06d0e5fa65bf245f52249385b94a6":"Super Bikkuriman - Densetsu no Sekiban (Japan)","43189b859c0036119f233d46b1f2e9fd":"Bugs Bunny Crazy Castle, The (USA, Europe)","435b566a4b3745b0acc5a976bedd9245":"Chuck Rock (USA, Europe)","437fec3b28d28314d580ec1e4d0bc9ae":"Aa Harimanada (Japan)","4390a7431c78dac56220c336d4ec0507":"Mofa Qiu - Magic Ball (Taiwan) (Multicart Rip)","43a4301aa781930da85273605ab87cab":"Minolta 2468 Adj. Program (USA)","43d2867db7f523f597f911f7021766db":"Nick Faldo Championship Golf (USA) (Proto)","43e26f216d50106a8fccbcc04cda0c29":"T2 - The Arcade Game (USA, Europe)","43f73771d3141a522c5c6c8617042d6f":"Spot (Japan)","440e6ef612c2ff60511550ca4ff7e023":"Death Track (Europe) (Proto)","4426b35ef04094f9c5518d6fb6414d55":"Nettou Samurai Spirits - Zankurou Musouken (Japan) (SGB Enhanced)","442c13b1747376782d1dae3f8877f94d":"Sanrio Uranai Party (Japan) (Rev 1)","4479ff0178814ad277eec712aa1cc2af":"Super Mario World 7 (Taiwan)","447b9245e591aa2f17a2a1fe85982bf1":"Pokemon - Blue Version (Hong Kong) (SGB Enhanced) (Pirate)","44817f21754034ffb70e37f59fc3e2b6":"R-Type II (USA) (Proto)","448a0f127123e88dd4c0e98450f0fed0":"Jumpy (World)","44dd0f3f4488c7660e432f0da4a01a1f":"4 in 1 (Europe) (4B-009, Sachen)","44f9973289c92ac906d06ab7ead244ad":"Speedball 2 - Brutal Deluxe (Japan) (En) (Possible Proto)","4511333eeecb3c9f20874d595424447c":"Tetris Plus (USA, Europe) (SGB Enhanced)","4523452d7dde5e486187b384fee751a7":"Do I Pass (World) (Fr) (v1.4.2)","4528d42eae39a3fa756eefa29d52ef55":"Smurfs, The (Europe) (En,Fr,De,Es)","454e1f0a2af6070b408694e7e05482be":"Tiny Toon Adventures (Japan) (Beta)","454f4506873737eece69fab4aa60eed7":"TwinBee da!! (Japan) (Beta)","455ed49f293e09e38ac654fb334fcc7c":"Pocket Monsters Yellow (Hong Kong) (SGB Enhanced) (Pirate)","4599627050687063da3f5cf804dc16f6":"Dr. Mario (World) (Beta)","45ae101994d2dfb0cec87e8a97e2b5a8":"Solomon's Club (Europe)","45b5142059907dbd92aaf3f8d003721b":"Megalit (USA, Europe)","45cb9cd406f53033e0fbfc5413797192":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Shakai Battle Hen (Japan) (IE Institute)","45d69d4632914671de114f6f1f607e80":"Heart Knight (World)","45dcc259728a00118fe86f841d48564f":"Worms (Europe)","45f764bf05abe6102a641642c71cede3":"Pitman (Japan) (En)","46031cac5d2280d74dda7471ab23c06e":"Magical Taruruuto-kun (Japan)","4625fce9752df3666f19efd2a6f03748":"Pachio-kun - Puzzle Castle (Japan)","463c241c8721ab1d1da17c91de9f8a32":"Pokemon - Edicion Roja (Spain) (SGB Enhanced)","4668b13913dfb14e43c263a7015eb9ab":"NBA Jam - Tournament Edition (Japan) (En)","46853483281d6b04cf94eb541480f8e3":"Shinri Game, The (Japan)","469605e02eb10652f8f2afa8c7ebffd5":"Double Dragon 3 - The Arcade Game (USA, Europe)","46972f66b5c73b6b19fe21077b195669":"Tasmania Story (USA)","46b681a7873d130be35e2115263baa6e":"NHL Hockey 95 (USA, Europe) (SGB Enhanced)","46b6ae39b3140f81d66be8338a8bcea3":"Small Soldiers (USA, Europe) (SGB Enhanced)","46d234cdf252280777412a5db98e05d5":"Bug Bites! (World)","473da7ca1a6a8ad23ec28c2f838bce20":"Yu Yu Hakusho Dai-2-dan - Ankoku Bujutsukai Hen (Japan)","4781664e85368b224abfa7c01a421f18":"Pachio-kun Game Gallery (Japan)","47900027fcbc2f749b3c0b1ce7fa3372":"Montezuma's Return! (Europe) (En,Fr,De,Es,It)","47a5ddf39068d624743455c0c64571d4":"Robot Ponkots - Sun Version - Comic Bom Bom Special Version (Japan) (SGB Enhanced)","47b2627e14592a8c5b53c84c5f06400b":"Jeep Jamboree - Off-Road Adventure (USA)","484d70a54f125271a24c5ec870cf8a32":"InfoGenius Productivity Pak - Berlitz German Translator (USA, Europe) (Proto)","4859ec2b18c4fabf489eb570c1d7d326":"Donkey Kong (World) (Rev 1) (SGB Enhanced)","486143fef63cbc535deb928eeade5555":"Dungeon Warrior (Europe) (Proto)","4866ea7bdaa92c6986d4847209ebbd20":"Battletoads in Ragnarok's World (USA)","48855f13b18a474dede333f005750ea9":"Bill & Ted's Excellent Portable Adventure - A Bogus Journey! (World) (Retro Collection)","489f52a2761dcb6f01567ef5de14cb8a":"Bionic Commando (Japan)","48b4c5f65705b2d3fd9fb0643d754326":"Interblocked (World)","48c32dce8fbd6af3fef42a787ef7aa17":"Jane in the Jungle (World)","48cca9e48b1546b24a077645b5c7c5db":"Gun Law (World)","48e73c1d813366e16e2cb0f9ac2e89b1":"Aqua (World) (v1.1)","48ea776eace6f2582b70dc965cf2df1f":"Tobu Tobu Girl (World)","48fa05f3c1e7546a30c546c0a141c034":"Chachamaru Panic (Japan)","48fe5119e80f17e9663af671922abea2":"Year After, The (World) (Fr) (Proto)","49bcb33470df757847eef5e170c9b6bd":"Garfield Labyrinth (Europe)","49c8eaa9801c56b432beb6cf51d7fde0":"Pinball Dreams (USA, Europe)","49cce431c6aa61f97e650cfd83724f6e":"FIFA International Soccer (USA, Europe) (En,Fr,De,Es) (SGB Enhanced)","49ced6bdb72265570d8889485af252f7":"Minolta 2181 Adj. Program (USA)","49e512bb8b0dcc6a8d26d873623d0590":"Game Genie (USA) (v2.1)","49eff735e839f8a57f75afcbf2c11ae4":"Ginga - Card & Puzzle Collection (Japan) (En,Ja)","49f8ba40e521bb0451ac5c6c1d00af77":"Galaga & Galaxian (Japan) (En) (SGB Enhanced)","49ff7673c52b1d747320e0b59b0e79aa":"Another Push Game (World) (v1.07) (Proto)","4a1ecc8ccc706ed5fdce2fdab2aaf03e":"Humans, The (USA)","4a3309be521df2ca7645363a88d1f2b4":"Robin Hood - Prince of Thieves (France)","4a50476f83a1755918d43b41dc869110":"Minolta 2162 Adj. Program (USA) (Alt)","4a967a8f1dd6f627e8b72950739c26d4":"Amazing Spider-Man, The (USA, Europe)","4ab6bd9d417355938a5197941863d98f":"Pachinko Saiyuuki (Japan)","4ab78239e79ba059d0d7aa7a629a9474":"Bomberman GB 2 (Japan) (SGB Enhanced)","4adf20cf4ced9fa2512578c133ad269f":"Capcom Quiz - Hatena no Daibouken (Japan)","4ae40f313df9273c961cac9b25e16bde":"Song of Morus - Gala of Battle (World) (En,Ja) (Beta) (Digital)","4b1a8bfc3b492a00d4473993d3512b44":"Little Tales of Alexandria, The - Mr Meows Dance Party! (World) (MBC3) (SGB Enhanced)","4b248813c7f2317e55690b5c95f163b2":"RoboCop (Japan) (En)","4b49017d182635c587ef2e3001769785":"Golf Classic (Europe) (SGB Enhanced)","4b4d6e6d4870d36a26e6fe6ad73b0eac":"Aerostar (Japan) (En)","4b5732e16d985d6ccac614aaad171c9d":"Alphamax (World)","4ba0ac0dfb3bcee737db0971105f468c":"World Beach Volley - 1992 GB Cup (Europe) (Beta)","4ba4398181d98958fa7434ba7716f11a":"Mega Man - Dr. Wily's Revenge (USA)","4bd6e929ec716a5c7fe7dc684860d551":"Super Mario Land 2 - 6 Golden Coins (USA, Europe) (Rev 2)","4c24f644e70f0786d20d8ca9ffcea51c":"Nettou Real Bout Garou Densetsu Special (Japan) (SGB Enhanced)","4c30d454b5520414fd81d5ffa51375c5":"Super Momotarou Dentetsu II (Japan)","4c44844f8d5aa3305a0cf2c95cf96333":"Pocket Monsters - Aka (Japan) (Rev 1) (SGB Enhanced)","4c614f884a07872f12056ad1a421e1f9":"Mega Man III (USA)","4c76f3947ec093275c65eb3932678712":"From TV Animation Slam Dunk 2 - Zenkoku e no Tip Off (Japan) (SGB Enhanced)","4cee4e93651d9468e7ef47975b71aca2":"Play Action Football (USA)","4cfa25f0cc297fd5f98faa1ddae083f0":"Goukaku Boy Series - Yamakawa Ichimonittou - Nihonshi B Yougo Mondaishuu (Japan)","4d07686c9fda0b9ce82b67d8c5ba90ce":"Deadeus (World) (v1.2.5)","4d2ec4da71d11f95367d9163c89b70f9":"Seisenshi - Saint Paradise - Saikyou no Senshitachi (Japan)","4d4eae6560062b9a12d9770653f1a53f":"Nemesis (Europe)","4d606ab4ffd5c3d3ecf914a6af1c1f90":"Felix the Cat (USA, Europe)","4d82905d5f9b2b3a7add5269e3133c1d":"Ninja Spirit (USA) (Proto)","4d949294f3cda07f2d12e5f73e6caeaa":"Star Trek - The Next Generation (Germany)","4e493ada5353cf6eb1c0f009d6a5ac13":"Nettou Garou Densetsu 2 - Aratanaru Tatakai (Japan) (SGB Enhanced)","4e4d51039cce43b11f51191dc7a6bcd9":"Race Days (USA)","4e6788188fd7e6bab9b6974b308a38eb":"Shounen Ashibe - Yuuenchi Panic (Japan)","4ea04ab8fcea4c41f26e44bb4f50d73e":"SD Lupin Sansei - Kinko Yaburi Daisakusen (Japan)","4ea0a34a76da9ed232d514987ba89d90":"Street Racer (Japan) (En)","4ead57f6fb441fb86a78922f1288ee40":"Panel no Ninja Kesamaru (Japan)","4eb8d56e6cf1e54665e995cf0cb30108":"Pinball - Revenge of the 'Gator (USA, Europe) (Beta)","4ebe14c4c51555908c0e4cabb66dc813":"Kaeru no Tame ni Kane wa Naru (Japan)","4ec2df5bc21a4dc75b79ee929723dc39":"Garfield Labyrinth (Europe) (Beta)","4ed480f8974e938c01be3b410ebec3df":"Downtown Special - Kunio-kun no Jidaigeki Da yo Zenin Shuugou! (Japan)","4f0349eca35c2dbb3b810e2ca9c9c94b":"Doraemon no Study Boy 5 - Shou 2 Sansuu Keisan (Japan)","4f1b689127635cebe5145926e0e24fbb":"Spy vs Spy - Operation Boobytrap (Europe)","4f3b84eb325f9162086fac77ac577e7c":"Double Dragon II (USA, Europe)","4f597338777cc0b67465bd0dde285645":"Snoopy no Hajimete no Otsukai (Japan) (SGB Enhanced)","4f5c4c439f1134177e02d72c794882ba":"Alien 3 (Japan) (En)","4f99d49908e027125473445ea1937817":"WWF War Zone (USA, Europe)","4fcc13db8144687e6b28200387aed25c":"Flipull (USA)","4ff223851bc7e3d19acdbf8034e4829f":"Moguranya (Japan) (SGB Enhanced)","504e1a39167c467b15d5ad56b744ad48":"Ninja Boy 2 (USA, Europe)","5062da78cdf359a8e0cf0f6a6239698a":"Monster Truck (Japan) (En)","506ccd75db221acbf26f1681f3c97efd":"Spider-Man 2 (USA, Europe)","5070aaf41d5ae9ee08f988b9aad26af5":"Lolo no Daibouken (Japan)","508e937dc634f36d738d65734f3ae0ab":"Toy Story (Europe) (SGB Enhanced)","508f13c91c125dfc8ea0334d3bd9b2fd":"Pachinko Monogatari Gaiden (Japan) (SGB Enhanced)","50927e843568814f7ed45ec4f944bd8b":"Pokemon - Blue Version (USA, Europe) (SGB Enhanced)","50971f6cbb3e4395cb66213d7f096b46":"Pocket Bomberman (Japan) (SGB Enhanced)","50a208bd0a223c037e01ffe07b04fa5b":"Alien vs Predator - The Last of His Clan (USA)","50d0748e807295cfb01335c58fc9b520":"InfoGenius Productivity Pak - Berlitz Japanese Translator (USA, Europe) (Proto)","512b5b0ce0933a8c3217d810b23bea0a":"Oira Jajamaru! Sekai Daibouken (Japan)","514688df17c1f7bcf978a13c83d0c22c":"Q-bert for Game Boy (USA, Europe)","516085555e451966b9dd5166dfe6c728":"Arcade Classic No. 2 - Centipede & Millipede (USA, Europe) (SGB Enhanced)","517373dfec43ebaedccb2fa62307ff87":"Kitchen Panic (Japan)","51de6f0697d2bbc53ccb5727dcdc884b":"Goukaku Boy Series - Yamakawa Ichimonittou - Sekaishi B Yougo Mondaishuu (Japan)","51dff0233c9d348ab59341d8afbb6275":"Monster Maker (Japan)","521d2aa473f4e740a6938861f70511cc":"Nail 'n Scale (USA, Europe)","522c139d757a5f5aef530c60ef3c5502":"Magic Knight Rayearth 2nd. - The Missing Colors (Japan) (SGB Enhanced)","523e5c08731617a2826a3772126045cb":"J.League Fighting Soccer - The King of Ace Strikers (Japan)","52700ea227c3a31f170ccbc6a052a7a8":"Zool - Ninja of the 'Nth' Dimension (USA)","5294a5fed7e88a6f76707979c83017d6":"Undercover Cops Gaiden - Hakaishin Garumaa (Japan)","52e110882a9f42c8b5c97489a29005f5":"God Medicine - Fantasy Sekai no Tanjou (Japan)","530220b702b6e1cc4d0ca9fec3749646":"Quarth (Japan)","531a63f17ebd140ed15b382c0c13eebb":"Sports Illustrated - Golf Classic (USA) (SGB Enhanced)","5354465291244e5a035807c2666d185e":"Asterix & Obelix (Europe) (Fr,De) (SGB Enhanced)","53797d020821b171f9909bc300ed5ad1":"4 in 1 (Europe) (4B-002, Sachen)","53b746bff74c50cd3ebcf41161c66cf3":"A-mazing Tater (USA)","53caa3d63f1db9059cabe555e18cf2ff":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Sansuu Battle Hen (Japan) (IE Institute)","53d8596868fe081cef40ecc02d463ea3":"Batman Forever (Japan) (En)","53e19693d3d1dfb2160e66742bacdb87":"Tekkyu Fight! - The Great Battle Gaiden (Japan) (Beta)","5401647a784df1dcced7e5feaa38b37f":"Space Invaders (Europe) (Beta) (SGB Enhanced)","545277c74a3fbeda2c9213d49659ffdd":"Universal Soldier (USA, Europe)","545c852f0c3f40ab57585b9269f7a32b":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced) (Alt)","545de5c311259b7f7ec313a9d58cf4b4":"Double Dragon (USA, Europe)","54cdfd90c8038846714643b2a68c6bb8":"World Beach Volley - 1992 GB Cup (Europe)","54cead768696a61b7cd31f91c0c58021":"Animal Breeder (Japan) (SGB Enhanced)","54ef4bb8c3d272af5bb78b4306f37248":"Pac-In-Time (USA) (SGB Enhanced)","5526c1396e574e92ec8f467c0de80377":"Momotarou Densetsu Gaiden (Japan)","5544efa64429127007aa3779beaa654e":"Beethoven (Europe) (SGB Enhanced)","557235db1fd8abdf216260693239ab00":"My World (World)","55945a517d1e89003003d51c7ec938be":"Super Star Wars - Return of the Jedi (USA, Europe) (SGB Enhanced)","55a2ca284b3b42f6c55d59f9e11c196c":"Popeye (Japan) (En)","55ad8dd2a99a840f3726600380b44315":"Legend of the River King GB (Australia) (SGB Enhanced)","55cee72182f73704ac2240a971887210":"Pachio-kun 3 (Japan)","55ef8421492242c2726e355c41aef000":"Block Kuzushi GB (Japan) (SGB Enhanced)","560c9262b03cf479b6ee544e09c161b4":"Winter Gold (Europe)","563c4c81878db48d8a0b6091f4c1cd92":"Teke Teke! Asmik-kun World (Japan)","5664cdc54d539374c8d318c6da06969e":"Star Wars - The Empire Strikes Back (USA, Europe)","5675d1b55cf842bf6919bdcc69f2f311":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Kanji no Tatsujin (Japan) (IE Institute)","567b0045cc26135a54ca025b0af7e9ef":"Gargoyle's Quest (Europe) (Rev 1)","5683738a97c8de47b1c485bddf97b46b":"seaQuest DSV (USA, Europe) (Beta)","56a1787b8a2dde07756b3cc36e79a9a0":"Gargoyle's Quest II - The Demon Darkness (USA) (Proto)","56c494cd7737f51ee2c3aeb50406e51a":"Sports Illustrated - Championship Football & Baseball (USA)","56e82954ece9a4a247ccd531ec6aa1ea":"Minolta 2085 Adj. Program (USA)","56f304dbd0045521271de857ffc77fbe":"Brain Drain (Europe) (SGB Enhanced)","57726c28dc09949029a154f63b891dd0":"Addams Family, The - Pugsley's Scavenger Hunt (USA, Europe)","57b192b42b4e1945cc7f20c98f7e1dab":"Cool Ball (USA)","57d60f97e42d24835b6723d9b7a3c0db":"Motocross Maniacs (Japan) (En)","57e9f964e17ebbdbf929968cbb42cf62":"Perfect Blend (World) (v0.9) (Bugfix)","5816ae497c301dd88eb0a8c0f64d3fd1":"Beta Soul (World) (v1.1)","588b4e9ee2cbf179734c6e71379cd144":"Honoo no Toukyuuji - Dodge Danpei (Japan)","58a854ee2aacdf5190b603ffcd55fd84":"Jungle Book, The (World) (Disney Classic Games)","58d063c39a469f4cc56e94775cbe4af3":"Krezber (World)","58e1cd396548b0e57b0514d8bec066d9":"Spot - The Cool Adventure (USA)","596b9a0ca8ed82011a83aca42119c6bf":"Super Black Bass Pocket (Japan) (SGB Enhanced)","59e50b2e9db32167f7293c4614bf7add":"Make Way (World)","59e6f8f432d4c0b99a3fb6432a2cdad7":"Splitz - Nigaoe 15 Game (Japan) (En)","59f6995b8b6bf9a65aac966d039a2b27":"TaleSpin (Spain) (Proto)","5a11855f9184ab27fa8127f2effc9950":"Rap Quest (USA) (Proto)","5a1bf3838705acb4d829572adedd708b":"Sword of Hope, The (Europe) (Proto)","5a4d3e46edae34a7dd6acd01d4b1c843":"Calculator (Unknown) (Proto)","5a75fe8de54e4cbd09cae23f050f6965":"Catrap (USA)","5a88b67ed5475e591747bc7956642456":"Astro Rabby (Japan) (En)","5aa012cf540a5267d6adea6659764441":"Spirou (Europe) (En,Fr,De,Es) (SGB Enhanced)","5aa4ece6d3fd99e7ce0682b92c55d25b":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Nanmon no Sho (Japan) (Imagineer)","5ac712759de3b6d6f7760272d62e2f53":"Hon Shougi (Japan) (SGB Enhanced)","5add36377363b6e8b38d5f69a33b4ed2":"Jack Nicklaus Golf (France)","5af4d81459e7e34adfc4e065c98dd643":"Tom & Jerry (USA, Europe)","5b47f714dc337db2dd9972383e6d0805":"Motocross Maniacs (Europe) (Rev 1)","5b52c57d9cffe2ada5fadb5ae841faea":"Sarakon (Europe) (Proto)","5b83db9958eefbd72a82c4893e79d9e1":"Mighty Morphin Power Rangers (USA, Europe) (SGB Enhanced)","5bc0913d533000522c7c9cac1ef6f97f":"Legend of Zelda, The - Link's Awakening (France)","5bd352e85f75a8314e4dce538cb956c6":"Taiyou no Yuusha - Fighbird GB (Japan)","5c39c161b85481d7154f19081ff40f42":"Super Scrabble (USA)","5c3a589a29530df94a09d96d463f6a79":"Dexterity (USA, Europe) (Beta)","5c3c43fdc01ce3296baac197dc53b060":"Super Donkey Kong GB (Japan) (SGB Enhanced)","5c4ed53347a60e467df77024f05e23ba":"InfoGenius Productivity Pak - Frommer's Travel Guide (USA)","5c63962225ae9f8738305dc281ebbfb0":"Game Boy Gallery 2 (Australia) (SGB Enhanced)","5c815764df1d3c04d99a9bc5b298aa2c":"SD Gundam Gaiden - Lacroan' Heroes (Japan)","5c837aeba2aa844d4cd34653d4e332ea":"Darkwing Duck (Europe)","5ca71cd4ceace3cb6650ff05d679d149":"Oddworld Adventures (USA, Europe)","5cbd186af88b167c2a972ddac81ae756":"Popeye 2 (Japan)","5cfa323ad8d8e4a6d50022d5c64b46fd":"Ms. Pac-Man (Europe)","5cff00db388d27727a1c9fb4c303f40b":"Mario & Yoshi (Europe)","5d07f39b93c83683c2c77ed31ec66048":"Seaside Volley (Japan)","5d1d8fef74ca8a35e1b09705ab3df3d8":"Spot - Cool Adventure (Japan) (En)","5d516b5de2bf54fb6c687f1838b628cc":"Power Mission (Japan) (En) (Rev 1)","5d6221ea6ece7491e8f6761f5c36dd24":"Super Ayanami Discovery SlideShow (Japan)","5d9607f5fdaee714bb14fdfe0fdcab59":"My Dinner with Andre (World) (v1.1)","5d9c071cf6eb5f3a697bbcd9311b4d04":"Pocket Monsters - Pikachu (Japan) (Rev 2) (SGB Enhanced)","5da2f3f6cbdffc96c2604f0954717e15":"Shapeshifter, The (World)","5dbf99aae7f4c2c36e3ceff27d85d4ff":"Duck (World)","5dcc16e0c5caf4c5c610c02b6a5746bf":"Jeopardy! - Sports Edition (USA)","5df1a8fcc6e4b05779c8e12f300cb1fe":"Tip Off (Europe) (Beta 2)","5e022adf9659a754a6c2a8e1ce1de117":"Top Gun - Guts & Glory (USA, Europe)","5e0703f8fc08728544f4f2594ee93e81":"Janshirou (Japan)","5e3005e18f030f58e8b919d35cb297d7":"Blodia (Japan) (En)","5e411c0f57b2d867f16084251e677d1c":"Malibu Beach Volleyball (USA)","5e6f8e10c3854f0768ab6b1fd9ceb12a":"Xin Shuma Baobei Huang (China) (Pirate)","5eb0cc0785adbc6ad8c1dfa09fe4a692":"GBKiss Mini Games (Japan)","5ece0017f734e6a813b622b8b455cfe9":"Lemmings (Europe) (Beta)","5f09960bc839e94957f44ebebb70e920":"Alfred Chicken (Europe) (Beta)","5f2ee96647b5274d343db91f4561c628":"Doraemon no Study Boy 6 - Gakushuu Kanji Master 1006 (Japan)","5f41a4de9f480c72cbc6eaad6bcc3753":"Mystic Quest (Europe)","5f855203b56886fcb88c54692144c553":"Zen - Intergalactic Ninja (Europe)","60397234f56fdf4eb39c07ca62e62679":"Great Detention Getaway, The (World)","6064c32bcf58c67966231e0ecbc76bfd":"Quiz Sekai wa Show by Shoubai!! (Japan)","6073cb28e651b48f0bf19e654aab8c7d":"Power Racer (USA)","60aff2b753df13e3702895300687dada":"Mani 4 in 1 - Tetris + Alleyway + Yakuman + Tennis (China) (Ja)","60e55697da19bb160316ec290a7a7437":"Donkey Kong (Japan, USA) (En) (SGB Enhanced)","60ef5ffc3af0ac5110c2b31e83570494":"Jeopardy! (USA)","60f66390bef3ec6e5a84e299d2261f73":"Jeopardy! - Platinum Edition (USA) (SGB Enhanced)","613c2336e19ea8f958f66c3e7dfef3c5":"Goal! (Europe)","614c8e744c8f07c6e3b29480478600d4":"Bakenou V3 (Japan)","615b1b2e4135363df4f0faae5e98aafd":"Remute - Living Electronics (World) (Album)","615c8d01fed90d40d6bf00a873dfdb71":"Popeye (USA) (Proto)","6175a5ef55a1998944267e75d8ebf79d":"Golf (World)","61e363e80ac331a3d5f71c59044862f9":"King of the Zoo (Europe)","62151973748a8a10aea1fee442c6e78b":"Small Town Emo (World)","629275bbcb97ef74b0a9138f70bd6cd7":"Pachi-Slot Kids 2 (Japan)","62b8be3a8e17972051897da4796ba69d":"Lethal Weapon (USA, Europe) (Beta)","62cc2571732bb10a5bc6dbdd7876b5dc":"Minolta 2440 Adj. Program (USA)","62d484bc4988823a143e50fddaadae2f":"Contra (World) (Contra Anniversary Collection)","62f6b0c1c7eed0af0cb7d9f15d14e7c8":"Penguin Land (Japan)","63098fde8f2dcb977c9a8f0389e0d033":"Star Wars (USA)","634532de88aa7c35bd9231ee5356ae8a":"Spider-Man - X-Men - Arcade's Revenge (USA, Europe)","63811bc7f768c0de33fb2c4c702e9533":"Titus the Fox (USA, Europe)","63bbfce4fb22f4b77e68cc67f02c4b05":"Brain Bender (USA)","63c858be7cc05e2cb7a8d3ccddce5dff":"Ganbare Goemon - Sarawareta Ebisumaru (Japan)","63e3f5f4b90f17bdf6d2f2aed515e248":"Gargoyle's Quest (USA, Europe)","63f593e38a526a10ff3fa5aec1c8ccb0":"Akumajou Special - Boku Dracula-kun (Japan)","64080619789f154ee057f2946a98c61c":"Miracle Adventure of Esparks - Ushinawareta Seiseki Perivron (Japan)","6468fb0652dde30eb968a44f17c686f1":"Pokemon - Versione Rossa (Italy) (SGB Enhanced)","647563deb5535d2394d7f757571c7487":"Road Rash (USA, Europe) (Beta)","6483f35f0c0c520a46c133dbae83fa77":"Wily & Right no Rockboard - That's Paradise (Japan) (Proto)","648770b4fe55dbcd0d834536bb8685b0":"Chibi Maruko-chan - Maruko Deluxe Theater (Japan) (SGB Enhanced)","6496801345d1597b7dc1c27143e6b9d8":"DX Bakenou Z (Japan) (Rev 1)","64b18855b9f342ab623bcecbf2865cb8":"Kaseki Sousei Reborn (Japan) (SGB Enhanced)","64e365d21f0e58d80749a50e26330ddb":"Tekichuu Rush (Japan)","64f43161eb16eb1be99262c36867bc79":"Prehistorik Man (USA, Europe)","64f7f8af18f75a9b3767e4637e693be7":"Sword of Hope II, The (USA)","6534eff4dff0000f66a0059f0b84e71e":"Turrican (USA, Europe)","654615505816982cdc6446d5af319d6b":"Porklike (World) (v1.05) (SGB Enhanced)","6550d03ed6c62fade08ca7647e57a068":"Ultra Golf (USA) (Beta)","6560b1ba5589509eff4d1edf318fbe58":"Phantom Air Mission (Europe)","656df80c44a1cad7cae382d3bd94a74b":"Teenage Mutant Ninja Turtles III - Radical Rescue (USA) (Rev 1) (Beta)","65d1553ef8e972be46c142a6e713d3df":"Coucou (World)","65e455737df458e59cc7b0892b95e6cd":"Mr. Do! (USA)","65ef3652202749d5d281c9c9641e0e19":"Quiz Nihon Mukashibanashi - Athena no Hatena (Japan)","6600bce6e5a74f8551261d4e68331cae":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced)","660a98b774e7d136e302dfe6557405e9":"Max (Europe)","6633ea57f86c4a117f0b027da68bda92":"Bokujou Monogatari GB (Japan) (SGB Enhanced)","664c613eaaae388d828261fe8a7edbb6":"Tiny Toon Adventures - Wacky Sports (Europe)","665b9ef961ee82edb8db54b3eb5152fd":"DuckTales 2 (Japan)","669700657cb06ed09371cdbdef69e8a3":"Pokemon - Version Rouge (France) (SGB Enhanced)","669a4ecf89794505591b36d617e51f8a":"James Bond 007 (USA, Europe) (SGB Enhanced)","66c924c9f21ab1feddc65fa923dc1f4d":"Cult Jump (Japan)","66db9a375eddbdb8439d8c361b836a45":"Birdie Bartender (World)","66fc892b9682e8e2981fa83fa681ccad":"Hit the Ice - VHL - The Official Video Hockey League (USA, Europe)","66fca02e9bce40162bc76b1f56e5f0e7":"Dragon Ball Z 3 (USA) (SGB Enhanced)","675f64cbcc158260dc8652cbe1dbcdb6":"Year After, The (World) (En) (Proto)","6761f77e6daa82120dd7c73adeec777e":"Akumajou Dracula - Shikkoku Taru Zensoukyoku - Dark Night Prelude (Japan) (SGB Enhanced)","6776c3cf0ef69035529d05342f072446":"Tetris Flash (Japan) (SGB Enhanced)","679555396bce8beab58d4b79acb966bf":"Cadillac II (Japan)","680c8fbb0bc15c850121ef2c929df177":"Metal Masters (USA)","6832c643107d2966e17b3a52cf80a485":"Momotarou Collection (Japan) (SGB Enhanced)","6847a0af37237bbadcf582ed59fcabce":"Janshirou II - Sekai Saikyou no Janshi (Japan)","688312aedbdf646403ddda248263d9aa":"Purikura Pocket 3 - Talent Debut Daisakusen (Japan) (Rev 1) (SGB Enhanced) (NP)","6884a31366f565ca25935e1fba52efbc":"Chase H.Q. (USA, Europe)","68a06792ae4401f9fc09d460120ec2a1":"Lazlos' Leap (USA)","68b8c7756da95ca6173e532be047299a":"8-in-1 (Taiwan) (En)","6917ae35a6ee08108a6e5e7d6a11048b":"Quick Draw (World)","692fc5a0b6a9893d6ea25326c55caae5":"Who Framed Roger Rabbit (USA)","6949e7e7307b0885898e5330e8a7e9cc":"Gerry Anderson's Thunderbirds (Japan)","6993211741eea010f51b1c20b05d4c43":"Home Alone (USA, Europe)","69a775ea530e2390f2f97cb648a567a8":"WCW - The Main Event (USA, Europe)","69c43603ad7718b7b2ec0c48b63cdc49":"Sutte Hakkun (Japan) (Proto) (SGB Enhanced)","69c7619c9f48a97ddbe76e4b21b44172":"Super Mario Land 4 (Unknown) (Ja) (Pirate)","69cb8cf8e86d7fdf3995620f2507ae78":"Mofa Qiu - Magic Ball (Taiwan)","69d05c64157f105855171eeb027eccb3":"Chibi Maruko-chan 4 - Kore ga Nihon Da yo! Ouji-sama (Japan)","69d643bf4e37b3c133518517338b6a1c":"Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev 2)","6a007fe1dea71768f1b0c933ba25554f":"Cheesy Town (World) (En,Ja)","6a0f10c18d253a68ba5d33256c8ccf4c":"Teenage Mutant Ninja Turtles 3 - Turtles Kikiippatsu (Japan)","6a10eb4a1d02d21c0b2a865d464246c3":"Goukaku Boy Series - 99 Nendo Ban Eitango Center 1500 (Japan)","6a268131029986557c75e559622a3c87":"Itsudemo! Nyan to Wonderful (Japan) (SGB Enhanced)","6a3e04a78132d5daab4ee4df860cf48a":"Boxing (Japan) (En)","6a7cb6e2df241e843569c539b724bb5d":"Gunship (World)","6add9bf46fd945f6635419ad60988334":"Splitz (Europe) (Beta)","6ae068044245ff7d873111e27ef4ad95":"Battleship (USA, Europe) (Beta)","6afac3034f2a07a58c1d08b69ed43b9b":"NBA All-Star Challenge 2 (Japan) (En)","6b09cc03750b853bb67845b667d0185e":"Kirby no Block Ball (Japan) (SGB Enhanced)","6b2da5147d5f362a26be59f4d5286cc9":"Alien Olympics (Europe) (Beta 1)","6b371b815a02c5e90836f314b1625b21":"Desert Strike - Return to the Gulf (Europe) (SGB Enhanced)","6b4a1224f2ad4d862cdba8b34429ab23":"Tech and Blood (World)","6b6d4a25d3c1e2890b22271c44e62dbf":"Chessmaster, The (USA) (Rev 1)","6b9ccdc2b6611c87dd5425ebcf95185c":"Hitori de Dekirumon! - Cooking Densetsu (Japan)","6bf40d108ca2eb5d7efc495832880f24":"Minolta 2420 Adj. Program (USA)","6c06369e6d6ecbf2d7b5a5254a11e541":"Philip & Marlowe in Bloomland (USA) (Proto)","6c11e7ad5b93d5eab86957cbc5cbe853":"Teenage Mutant Ninja Turtles 2 (Japan) (En) (Beta)","6c1f80a396a47bb145814d2ce0e08cfd":"Pyro la Chronoflamme (World) (Fr) (Proto)","6c4d2f2a4aa7029759441d2c16d8c931":"Ring Rage (USA)","6c5c276f68bea365821172927706cc0b":"Windows93 Adventure (World)","6c960f0e87a857a7b49ef08484f79ce0":"Hugo (Europe) (SGB Enhanced)","6cbaaf40726a834ba7b3d7f179a140fe":"Aoki Densetsu Shoot! (Japan) (SGB Enhanced)","6cc281134629c13a543bce77cb408f4f":"Beethoven (USA) (Proto) (SGB Enhanced)","6cdbf3cdde7defc8d81d5bf2afb9fddd":"Kuma no Puutarou - Takara Sagashi da Ooiri Game Battle! (Japan) (SGB Enhanced)","6cdea29accd2c7c1b2af1822f142be4d":"Lemmings (Japan) (En)","6ceb30c99e4642b62533f6f9101d59e5":"Shikinjou (Japan)","6d0fdfd7dfb144f37afa346bd02518be":"Porklike (World) (v1.0.3)","6d22cab0cbb831bc64abf4f5bad464ff":"Sheep It Up (World) (Digital)","6d24c94d3acd89b4b703f7bd2a504833":"Battletoads (USA, Europe)","6d2ab72fc3f632493a04fd432508067d":"WWF Raw (USA, Europe)","6d301bbecadb7d4cd064a97751d642c5":"Fleet Commander VS. (Japan)","6db7aa2399e9b6723e41e47c73379216":"Tokyo Disneyland - Fantasy Tour (Japan) (SGB Enhanced)","6dfcaebffc8e2645bb2b1e5be69e1514":"Maui Mallard in Cold Shadow (USA)","6e20cfac9f66ab55bfb5e7524ef4c144":"Sports Illustrated for Kids - The Ultimate Triple Dare! (USA)","6e2ab82a7e2348ba9753af34f11892e4":"Dr. Franken II (USA, Europe) (En,Fr,De,Es,It,Nl,Sv)","6e30394fd7ef4a4dc3fe1edd9fc69f72":"Donkey Kong Land 2 (USA, Europe) (SGB Enhanced)","6e3ad0b363bad39886733b17a3e19015":"Rolan's Curse II (USA) (Beta)","6e3fa61e265eff43bdc928d59b2938c1":"Dirty Racing (Europe) (Proto)","6e47b388dffae893ff1fc33ca552cf9a":"Probotector 2 (Europe) (Beta) (SGB Enhanced)","6e7663f908334724548a66fc9c386002":"Pokemon - Edicion Azul (Spain) (SGB Enhanced)","6e8166c3783d1807d0a8c3b649e583c1":"Blades of Steel (Europe)","6e8ea043087f4ca441866b03389575e2":"Total Carnage (USA, Europe)","6e98954e48579451c8bdef80eaafaa54":"Minolta 2428 Adj. Program (USA)","6e9dd3c1fb169da79292a1962e95a884":"Looney Tunes (USA, Europe)","6edab4cbbfeb6f5a04af669a31559f1c":"Penguin-kun Wars VS. (Japan)","6ee9c4e484b70bbecaaffafb963f004b":"Mogura de Pon! (Japan)","6ef878ebc023775f09437a2588ac5e7d":"Makai Toushi Sa-Ga (Japan)","6f26a0d050c67741bf7cc65aa86772f7":"Life's Too Short (World)","6f32e45cc1829ab2fc3048634b68d749":"America Oudan Ultra Quiz Part 4 (Japan)","6f72b0b3dd1d0939b1ccf7e9a8b05a04":"Lemmings (Europe)","6f898c606275dbe71ede0179574ad9f2":"NFL Quarterback Club II (USA, Europe)","6f94ad4f3761bf5c6f85f28fe4ff0ed6":"Famista 2 (Japan)","702ae9f811d191b73adc3f5fbcfa8aaa":"Riddick Bowe Boxing (USA) (Beta)","70436283ac6d8b8ab84f256134159ab9":"Shin SD Gundam Gaiden - Knight Gundam Monogatari (Japan) (SGB Enhanced)","704c6f2d6eabf59ada905613c06cca5b":"Goukaku Boy Series - Z-Kai Kyuukyoku no Eigo Koubun 285 (Japan)","704cefb5c77dc74631b9acbaa2b19435":"Space Invaders (Europe) (SGB Enhanced)","7068df6f82ec8cba4cbe36cc21b86df0":"Boulder Dash (Japan) (En)","706e32f1228b6bb7dbab839aa7af758b":"Bourgogne Game Show 2022 (World)","707e941e70f9a0c3dbd112cbf4c88f36":"Tiny Toon Adventures - Babs' Big Break (USA, Europe) (Beta)","709726eb6de8d45e63a88063529605bc":"NBA All-Star Challenge (USA, Europe)","709d59a30863336c26a48001c23af729":"Mr. Go no Baken Tekichuu Jutsu (Japan)","70a552e27767205b4d9be337b419c05f":"Jikuu Senki Mu (Japan)","70a9ef90ad443881ca90cdd8d910ae66":"Sagaia (Japan) (En)","70cd582d3b1f15cb251620203d8b00c9":"Jetsons, The - Robot Panic (USA, Europe)","70cf0bbc9f4a2bbc4c89649406b09e59":"InfoGenius Productivity Pak - Spell Checker and Calculator (USA)","70d0944bf4b877734d059ccf022d83fb":"Nakajima Satoru - F-1 Hero GB - World Championship '91 (Japan)","70d54771dde507f26713fba445f49a4f":"Chou Mashin Eiyuu Den Wataru - Mazekko Monster (Japan) (Beta) (SGB Enhanced)","70daec5b8cdf7e870a8b21a1b1253945":"World Bowling (Japan) (En)","710ee7da860fb18a29a929db1198c1bb":"Prince of Persia (Europe) (En,Fr,De,Es,It)","712b4b22dc5674e33c68bf0001af8b34":"Pocket Love 2 (Japan) (SGB Enhanced)","7133284150e899fc2bcd2bec719eaaa6":"Simpsons, The - Itchy & Scratchy - Miniature Golf Madness (USA, Europe) (Beta)","7138d95583fc38ee7b3cf18de5e09e89":"Sword of Hope, The (USA)","7172c397cb5d45e28b615c26e518a107":"Rampart (Japan)","7173cecc94bcdb7aeb7240ae87491044":"Jurassic Park (Europe) (En,Fr,De,Es,It)","7178b4386827602226f40f2cd264e322":"Super Chinese Fighter GB (Japan) (SGB Enhanced)","71af355cbf7b8c7fe30f509803bbced6":"Road Rash (USA, Europe)","71d7c219ed1cc63bfc6d77e62f6e2227":"Yomihon Yumegoyomi - Tenjin Kaisen 2 (Japan)","71feb6c7d5b764d5192c28efe74d13c6":"4-in-1 Funpak - Volume II (USA, Europe)","72c0a7eb38ffc2ef65c0e2ffb1729aa5":"Shanghai (Japan)","72dfa391aabb34d0a047443ee11c83ac":"Tiny Toon Adventures 3 - Dokidoki Sport Festival (Japan)","72f7848571d4048d95ef2063a856d820":"Final Fantasy Legend II (World) (Collection of SaGa)","73354c52e0315a279a4162d4f6c0586d":"Lion King, The (World) (Disney Classic Games)","73377222a76829e02c9a32b569862bde":"Kakomunja (Japan)","736608579d192dc138b07bbc1ce80158":"Jetsons, The - Robot Panic (Japan) (Proto)","73dbcd6a642ed4c751aa27ff08fbef3e":"Minolta 2429 Adj. Program (USA)","74110eed9c357f1749c4a8f82d637908":"World Soccer GB (Japan) (SGB Enhanced)","741890cbdeefe98175a56a87b9e9ef8e":"Pro Soccer (Japan)","744dc7e4b03d16b8b6dd35a697c77892":"Mickey Mouse IV - Mahou no Labyrinth (Japan) (En)","74b8d0c410c9579ab69b3550b2134df6":"Higashio Osamu Kanshuu Pro Yakyuu Stadium '92 (Japan)","74d409740ce00448d42b25ebb31e7bcd":"Race Drivin' (USA, Europe)","74d96840a5c09cd88c862a5647465b81":"Dropzone (Europe)","74ec77e1cfbdc05bba5381b3f78d5dd9":"Konami GB Collection Vol.1 (Japan) (SGB Enhanced)","750d2af7347fb539698655ae946a880a":"Micro Machines 2 - Turbo Tournament (Europe)","75143dc6628b92b1eaaf72b39891506c":"Goukaku Boy Series - Eitango Target 1900 (Japan)","7522878c2206817ec8440d442a65c306":"Blaster Master Boy (USA) (Beta)","7526469fda70432da606f67f144a8f4e":"TimberMan (World)","754398219a3ab38394cdac543d8deb47":"Fushigi no Dungeon - Fuurai no Shiren GB - Tsukikage Mura no Kaibutsu (Japan) (SGB Enhanced)","75963dd8e91147452bfa88f0d608d554":"Gem Gem (Japan)","75a63837a87a9c598fcee293d68513cd":"Mad Monster (World)","75b5f31fbacb972fc104b3e77d09003b":"Battle Arena Toshinden (USA) (SGB Enhanced)","75e4ced55fe6dc29561c54e613848b23":"Magipanels (World)","75e82151fabd244af2ab355132a7d895":"Witchscape (World) (Proto)","76010c6ff6bd0c4e8ac934dc69fb96ab":"Atomic Punk (USA)","7615154dc9afb1a7d7d2fe63b76c68e4":"Bomb Jack (Europe)","7616285ddcb0a1834770cacd20c2b2fe":"10-Pin Bowling (USA) (Proto)","763111e514ae572a530eb9465b9bc2ef":"Super Chinese Land 2 (Japan)","76be24b2a33617dad679f40a29b0b0ff":"David Crane's The Rescue of Princess Blobette (Europe)","770a5daeb07a68be86e72ed16e1a38d9":"Super Snakey (Japan) (SGB Enhanced)","770a917f18e0aa1f3bb027d0783f548b":"Yu-Gi-Oh! Duel Monsters (Japan) (SGB Enhanced)","77257c9ea85a0fdf36cba3e2a7fb5270":"Dragon Slayer Gaiden - Nemuri no Oukan (Japan)","7727f43d66a77fe0284bf1b8ffede7dd":"Game & Watch Gallery (USA) (Rev 1) (SGB Enhanced)","7768609b189e788ab08c8aac165b9f4c":"Teenage Mutant Hero Turtles III - Radical Rescue (Europe)","779dce075e652bea5bbecf89bb5b04df":"Castle Quest (Europe) (Beta)","77c1e3543a7f4a75a50efbb91c2718c2":"Brain Bender (Europe)","77f89e919dace1f5b989e0dbedc1ab8b":"FIFA Soccer 97 (USA, Europe) (SGB Enhanced)","780bbec4b26617b3a1a4fcdfa5a731e4":"Darkwing Duck (Spain)","781f768d5211aba1e4cf383d4585c1bd":"Aladdin (Europe) (SGB Enhanced)","7850d8aa9f97272f359500fb7be66383":"Asterix & Obelix (Europe) (Fr,De) (Beta) (SGB Enhanced)","785441d3d75913393807b10b3194dc48":"DuckTales (USA)","7864d91f0a7ca1eec93667ba88ec1dfc":"Bakuchou Retsuden Shou - Hyper Fishing (Japan) (SGB Enhanced)","78667e88a568b44115cb76dfe63a74a3":"Double Yakuman Jr. (Japan)","7876945a990ea94ac6b1fe5cf01bc00f":"Elevator Action (USA, Europe)","787eb7309113bf855201da4084fe7ede":"Leak, The (World)","78a200d2ba6cf13f965fa773e2071ffe":"Wordtris (Germany) (De) (Proto)","78c568cbfff6314b1416880d9efaeca6":"Medarot - Kabuto Version (Japan) (Rev 1) (SGB Enhanced)","78da1015ca2b5b4e83f7aea41214e779":"Solitaire FunPak (USA, Europe)","78fb0bd56717488e313aeb3e47f936c8":"Migrain (Japan) (En)","78ff544ada44bf6832e970f78ee2c8a9":"Raffles (World)","792c706a0addebed39d177077a1caac0":"Casper (USA)","79444f0a72363167fc340060eb02301c":"Doraemon no Study Boy 4 - Shou ni Kokugo Kanji (Japan)","79492ce68c61ae8e29b96db1d2e2bf6f":"All-Star Baseball 99 (USA)","794c58249c77f3b43012592bd386ad52":"Ninja Spirit (Europe) (Proto)","79603fd837abd36b72d73f959e0ae749":"Kingdom Crusade (USA)","797580a91cf9dc710c37f5af04dbbca5":"BreakThru! (USA)","79bb2ba29c937253dd964142713a7869":"Cool World (USA, Europe)","79d6e6515905ec3fbcbd9e50ff469000":"Bonk's Adventure (USA)","79ede10e81d8697137f6fff7bb322a30":"Tamagotchi (France) (SGB Enhanced)","7a1db9950b7fb12499df822b32ef1ed9":"Painter Momopie (Japan)","7a1ed5c273362a56eaec07a1ddd6b195":"Prince of Persia (Japan)","7a60b2dca975ecd7166fd390cb9e3238":"Casino FunPak (USA, Europe)","7a8e19e290ee3a6bc2687e331cd0db06":"Panty Hunty (World) (v1.4)","7aa389f71808dc989a38b41009a32851":"Tiny Toon Adventures 2 - Montana's Movie Madness (USA, Europe)","7ab8eb19c5356f62bcc3fa2a8f1aba1f":"Meitantei Conan - Chika Yuuenchi Satsujin Jiken (Japan) (SGB Enhanced)","7ac8443eefc33432b989f00cb984b9a1":"HAL Wrestling (USA)","7ae0d384ad38a528bed9c76e07671126":"Honmei Boy (Japan)","7af2043d1766513dc576b549d104fa2a":"Yousei Monogatari - Rod Land (Japan)","7afb675171d58105112dbacf2ced77cb":"Bishoujo Senshi Sailor Moon (Japan)","7b024fd92a4db7959d98d729d459cb8e":"Teenage Mutant Ninja Turtles 3 - Turtles Kikiippatsu (Japan) (Cowabunga Collection, The)","7b040899fa8b62f4c27115c21a4ea881":"MVP Baseball (Japan) (En)","7b1e0dd44871aa990780d93565fdb565":"Contra Spirits (Japan) (SGB Enhanced)","7b622d314e82f49e57a14aca3435f814":"Super Hunchback (Europe)","7b96adfd6d3576cb2bab2afd06d8bd6e":"Lemmings 2 - The Tribes (Europe)","7ba282030e65d7974863bf129ce60155":"Do I Pass (World) (En) (v1.4) (Web)","7bb8a5bc9e55a05eba1a3fcbf460a9b5":"Super Robot Taisen (Japan)","7bd22f707c9264fa6c94c0248576167d":"Power Pro GB (Japan) (Rev 1) (SGB Enhanced)","7c0cbb81025deed9e32ecdca5f1bb482":"Castlevania - The Adventure (Europe)","7c1ab6fe16bcf564c7f8e13e40f2b87d":"Space Invaders (Japan) (En)","7c2419bddfd72711e90f54ef63695b07":"Super Mario Land 2 - 6-tsu no Kinka (Japan) (Rev 1)","7c5d6459e8d716cca69c4438d2440a1a":"Commando (World)","7c65e9da405d2225d079f75e56276822":"Castlevania II - Belmont's Revenge (USA, Europe)","7c9cef32db758d3f6b8a8a23b6902e2d":"Daffy Duck (USA, Europe) (SGB Enhanced)","7cc78ea5dbc099e8f89849a11a08c38e":"Nobunaga's Ambition (USA)","7cdf7645bd8116284c4f40b01ce4d088":"Bubble Bobble (USA, Europe) (Beta)","7d2c84bf29ec10488c8ae3b8018edc8a":"Chousoku Spinner (Japan) (SGB Enhanced)","7d3bff19f269a9b0c52338ccd0e654ae":"Goukaku Boy Series - Gakken - Yojijukugo 288 (Japan) (Rev 1)","7d4a7d9315eb017c2af3b22d6290dc26":"Spider-Man 3 - Invasion of the Spider-Slayers (USA, Europe) (Beta 1)","7d4f3bf92bbff701583eb74f36951bb9":"Klax (USA) (Mindscape)","7d5928376a16252833a1eda86fb65448":"Welcome Nakayoshi Park (Japan)","7d621dcbbce12b73574c42f40deec275":"Tennis (World)","7d6eb2f521febcf05cb445f6f37b3ba3":"Super Kick Off (Europe) (En,Fr,De,It,Nl)","7d76d2a9eaada93dc846efe1b2a815cc":"Kenyuu Densetsu Yaiba (Japan)","7d775680308fc232d1c6547124bab089":"Bakuchou Retrieve Master (Japan) (SGB Enhanced)","7d776329212fa7cc2b00c5a46f06dd92":"Darkwing Duck (USA)","7d7fbbcd73f1c220dd9fb2c428bbe758":"Alien Invasion (World)","7d8e0dc0cc90b414488fe7df3d9151e5":"G Arms - Operation Gundam (Japan)","7d908ba84a5ff43a3622a917b07d8b3a":"Solitaire (Japan) (En)","7d99006d00431ac246817d4f61e49b59":"Famista (Japan)","7db13139bc32e2aadb732d610f4c1604":"Mr. Nutz (Europe)","7dbd16112ebef871062660808b5a0cd4":"Sakigake!! Otoko Juku - Meioutou Kessen (Japan)","7dec3abb455de5bb503e8801bf22c742":"Aqua (World) (v1.0)","7e05d529985b34741bf1c8b909c96d8a":"Goukaku Boy Series - Z-Kai Reibun de Oboeru - Chuugaku Eitango 1132 (Japan)","7e17b120b34823d2e6bd61cdd08ecc2a":"Mini Yonku GB Let's & Go!! - All-Star Battle Max (Japan) (SGB Enhanced)","7e1bedf88581ee7370c8eb86c6863e2c":"Speedy Gonzales (USA, Europe)","7e4c9c3620bea7b633394beb67e9680b":"Bomberman GB (USA, Europe) (SGB Enhanced)","7e5cd07ccb647c0c281309630d70af68":"Tom and Jerry - Frantic Antics! (USA, Europe) (Beta)","7e68c061d77a2e8925442a9b6fa0a0ed":"Loopz (World)","7e6c999c8b4bd0e7030977c7fa73c75c":"Hiden Inyou Kikouhou - Ca Da (Japan)","7e893bd4b6c404843df52288ff681325":"Tiny Toon Adventures 2 - Buster Bunny no Kattobi Daibouken (Japan)","7e9d69eacd6b4c82527065bcf63e474b":"Judge Dredd (USA, Europe)","7eb5d2c44ee56aa96fdb8e4968700953":"4 in 1 (Europe) (4B-004, Sachen-Commin)","7ec2171517a50bbe35b319e0bcfa625c":"InfoGenius Productivity Pak - Berlitz French Translator (USA, Europe)","7eca7a38f204dfa33dc3a4c039a92176":"World Beach Volley - 1991 GB Cup (Japan) (En)","7ef69878c3b5bc5532c69a51a2dd42f3":"Harvest Moon GB (USA) (SGB Enhanced)","7f1e1ce56aca694b46da2ba407b60cb3":"Soukoban 2 (Japan)","7f26dd90f8e80b52ead8fc0e3609d4f2":"Maru's Mission (USA)","7f7df6b53d2c01c2c2fe9ce20a8eebe5":"Jaleco J.Cup Soccer (Japan)","7f896b5e5e27eda1b08251ebe581c885":"Ninja Ryuuken Den - Matenrou Kessen (Japan)","7f8f8620460a38f0422591fa0b6414e0":"Purikura Pocket - Fukanzen Joshikousei Manual (Japan) (Rev 1) (NP)","7f970d79f06cfb4270dea4b051277098":"Bubble Ghost (USA, Europe)","7fbda0c87af7701bb5e75c2a77bb0143":"Tetris Attack (USA, Europe) (SGB Enhanced)","7fc2dadd7ae98064febaa30a0d35112f":"Riddick Bowe Boxing (Europe)","7fe07271d04ed9e0bc0663dde55a2ae4":"Mega Man II (USA)","7fed5d5e548d9a4c1f61a47f1a6692a9":"GB Pachi-Slot Hisshouhou! Jr. (Japan)","80034da43f35307291714ae2553d9ddf":"Prince of Persia (USA)","800c1a8f99bea585490673352b5f11f4":"Boulder Dash (Europe)","801548b89f31101653539988d7635dba":"Uchuu no Kishi Tekkaman Blade (Japan)","802cfbc386bb79b0889d7dd2b6abdc13":"NBA Jam - Tournament Edition (USA, Europe)","802fbe246099f42c3177d6ff54afe6eb":"Art School Pocket (World) (De)","80644b75f16dc41b5b474807fa2fa765":"Pocket Family GB (Japan) (SGB Enhanced)","8076db86c921743aedd82b12d139c3c3":"Master Karateka (Japan) (En)","808058b66a16e497aab979ba53bbe37e":"Pachinko Data Card - Chou Ataru-kun (Japan) (SGB Enhanced)","80bc594310a940feb9512cf3233bed71":"Versus Hero - Kakutou Ou e no Michi (Japan)","80c2bf17e6c42110cbe0e4c220befacf":"Super Hard Bouncer (World) (v1.0)","80cf143705cd8cad268a94b19a953ed9":"Ghost Town (World)","812db832566202610bb1e42e643e2b93":"Asterix (Europe) (En,Fr,De,Es,It)","813755de3d7338c9442f072ed52f52b3":"Vattle Giuce (Japan) (En)","813fc943982d8a24085097d395994ccf":"Ring Rage (Japan) (En)","81abf5cdc935e97246a914a723649b6d":"Primal Rage (USA, Europe) (Beta)","81ad77f41587aab8e452f42cc0252e26":"Lost World, The - Jurassic Park (USA, Europe) (SGB Enhanced)","81efa6be1ee143fbe8634aff615ea1ad":"Mahoujin GuruGuru - Yuusha to Kukuri no Daibouken (Japan) (SGB Enhanced)","81f7dee7546e630de075a3397349efb8":"David Crane's The Rescue of Princess Blobette (USA)","8272e012f5c953450a3e2efd88d41aeb":"World Heroes 2 Jet (USA, Europe) (SGB Enhanced)","82d3fade3edbdd033752b8c1dd72481b":"Uno 2 - Small World (Japan) (SGB Enhanced)","82d650a781ef372126a863d519c01aae":"Radar Mission (USA, Europe)","82e7321afed96c7639a817de1f88a6f8":"Crayon Shin-chan - Ora no Gokigen Collection (Japan) (SGB Enhanced)","82ffec2fa00b08e001aa73bdc8ffa60a":"InfoGenius Productivity Pak - Berlitz Spanish Translator (USA, Europe)","831fcf7c33d4605271c2a3f67c7cca5b":"Penguin Migrants (World) (v1.1)","833c2c1990eab0f9f09a6471ffeb24de":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Sansuu Battle Hen (Japan) (Imagineer)","835d8f147210c87fd0b0cb8416adade0":"Pachi-Slot Hisshou Guide GB (Japan) (SGB Enhanced)","836c4e027f8a2bfc593ce3032cbb40d9":"Sloth Story (World)","83747bb1b6245c67241b9002861397b8":"Bonk's Adventure (USA) (Beta)","837f3b25d5864b631dff52e0f2b8cbd3":"Genki Bakuhatsu Gambaruger (Japan)","83899b533f9c71d96222c4a977bce9ad":"Baby's Day Out (USA) (Proto)","83bed4ebefeece45748258fd2ef105b3":"SolarStriker (World)","83d0886e246045cfa5b12b7861521c04":"World Cup USA 94 (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv)","83d20a9c3f88f9faa27c076cefd38bc1":"F-15 Strike Eagle II (USA, Europe) (Beta) (July, 1992)","83e0f56f6315f46aaf4e7b77576b00e9":"Wishing Sarah (World) (v1.1)","83ef6dc979ee752513a3b2c794d4cbff":"Initial D Gaiden (Japan) (SGB Enhanced)","83f05d3ff8da7e340a75d8e1234d8834":"Spartan X (Japan)","83f5da7271a970c28cb2a1f366e89616":"T2 - The Arcade Game (Japan) (En)","83f8254d367e2b58b26f07a965654b4b":"Just Fishing (World)","83fc53defeb7b05ac619c9918797ee83":"Sam Mallard - The Case of the Missing Swan (World) (SGB Enhanced)","84133af3324fc1aaf00c0769e15708c0":"Punisher, The - The Ultimate Payback (USA)","8425e6aa8e841b8a6192476ac600ea81":"Caesars Palace (Europe) (En,Fr,De,Es,It)","844633e79ccfe6b7d8d2da958e708e7c":"Captain Tsubasa VS (Japan)","844b2475d463154caf57fe10ad8fab15":"Keitai Keiba Eight Special (Japan)","84634fb36156bb1b9e54bc62fbaf3525":"Bishoujo Senshi Sailor Moon R (Japan)","849c5fe4002dd4240020e9ec84c8dc29":"Darkman (USA, Europe)","84fc4878829fdff7d1c6d92c67ae35ea":"Yogi Bear's Gold Rush (Europe)","84ff06249f96442626cdd75a5fa440ce":"Animaniacs (USA) (SGB Enhanced)","85082bcbda4febf4e9e05fa0679940b4":"Sangokushi - Game Boy Ban (Japan)","8517ac370fc46971d8a8c106bde4d4c4":"Tetris Attack (USA, Europe) (Rev 1) (SGB Enhanced)","852c764440f29205099716c4500ce222":"Doraemon no Game Boy de Asobouyo Deluxe 10 (Japan) (SGB Enhanced)","853b7ef83c8dc9dea361303766fea360":"Ganbare Goemon - Kurofunetou no Nazo (Japan) (SGB Enhanced)","855f9c1d01a967d171cbd88fa8bf58ac":"Lasama Chuanqi - Story of Lasama (Taiwan)","857fdafb5ababd641cc832cfb8fabd58":"Extra Bases (USA)","85ac741a34b971dfc107c15c8a902f07":"Mystical Ninja Starring Goemon (Europe) (SGB Enhanced)","85b010930ccbb4a7e1bd2adaadcf00a5":"Super Battletank (USA)","85ccd61e2298b5f9b26312e8e182f10e":"Swamp Thing (USA, Europe)","85d05f95c07ed1b7d787062fe4d2e251":"Super Off Road (USA, Europe)","85de1b03170ac56fbc07403511cfa137":"Breakout Lava-Lamp (World)","85fc0640de39ee331b710cdeac5918b2":"Decline (World) (v1.1)","86e22a57cf0055f858acc9a4062ebc30":"Paperboy 2 (USA, Europe)","87250cc05b201c48af8d7043c084666a":"Rod Land (World) (Retro-Bit)","872b72113281dc0a906b033b8f8e4e76":"Momotarou Dengeki 2 (Japan) (SGB Enhanced)","872b8eb18385ed6b1937b42436af56fd":"Mini-Putt (Japan) (En)","872e582831a17faee1df663c39a73e99":"InfoGenius Systems - Personal Organizer with Phone Book (Europe)","87f730d486bdc4685bcc6e91a7124c35":"Funny Field (Japan) (En)","8814b9ec76241a6ac4deefa00ebebad8":"Addams Family, The (Europe) (En,Fr,De)","8831343566e891e0176b6781594a1c15":"Makai Toushi Sa-Ga (Japan) (Rev 1)","8833ae0fd3b4c47b8249a12708c98a98":"Spider-Man 3 - Invasion of the Spider-Slayers (USA, Europe)","88908153a898e5d91a02206dbb03713a":"Black Bass - Lure Fishing (USA)","88a6585dfe6214d694c87dd09ce814f5":"Lucy and the Gem Dungeon (World)","88c33c0fc3dbdc848b9be604cdda5744":"Gamera - Daikaijuu Kuuchuu Kessen (Japan) (SGB Enhanced)","893a3f2daf828dd2c09c6cb3dc1e57d3":"Pushingo (World)","894dc0498b1527deddf7c6fcc75a6b25":"GI King! - Sanbiki no Yosouya (Japan)","8963803e642dbfbe4f5f3bc5a567785d":"Bugs Bunny Crazy Castle 2, The (USA)","896bf34f506a55b726e8a4edbc78c443":"Mai Nurse (World) (v1.01)","89bb0d67d5af35c2ebf09d9aef2e34ad":"Donkey Kong Land (USA, Europe) (SGB Enhanced)","89bdc38fd17a6c969306f756edef8a70":"R-Type (Japan) (En)","89cbbda4899d5fea755026d671ed08d7":"NHL 96 (USA, Europe) (SGB Enhanced)","89dae4a6f82d2e603af41a4499a3360b":"Roger Clemens' MVP Baseball (USA)","89ecf5b28d5cc84208cfc39dc2d96598":"Trax (USA, Europe)","8a00f627b8902c92327435901c249e19":"Mega Man IV (USA)","8a0430cf49abda1fc055c16d2bbea387":"Pac-Attack (USA) (SGB Enhanced)","8a06994b2e265244147a4d6d0e80623f":"Snoopy's Magic Show (USA, Europe)","8a240c7018703f232c654cdbc169c653":"Super Donkey Kong 3 (Taiwan)","8a4245cbeb1d6400b4cb586790400b60":"George Foreman's KO Boxing (USA, Europe)","8a54d5d6c4938661ab6b015369f7b12b":"Meteorite (World)","8a5ccf172f31a0dbfa0600d40b388fdc":"Solomon's Club (USA)","8a6963239d50b262e3579359f0a24f78":"Earthworm Jim (Europe)","8a7aaf3afcd00348730c86ddc926e30a":"Fushigi na Blobby - Princess Blob o Sukue! (Japan)","8a874449c207af6e4726337ca899e35a":"Star Wars (Europe)","8aa55e4347527c8780243bc6ae3d7e02":"Game of Harmony, The (USA)","8abc199792edadfc3f42822b33c912d8":"Pocket Puyo Puyo Tsuu (Japan) (Rev 1) (SGB Enhanced) (NP)","8ac5c061641b2a8b4c44b46ef693aeef":"F-1 Race (World) (Rev 1)","8b4d9ea149c4cd156bd4ce0db1127943":"Zelda's Adventure (World) (v1.3.0)","8b7af1a8ca96c74301d633e0ce83ba0b":"Legend of Zelda, The - Link's Awakening (Germany)","8b7cd9501263bff7ea31389d78df8ca4":"Winter Olympic Games (USA) (Rev 1) (Beta)","8bb31f539e8999d5c4e9449fe1befad6":"Lock n' Chase (World)","8bbb9ba0d72548706e4e5eba1b3a9fe1":"Bubble Bobble Part 2 (USA, Europe)","8bca6330273282546d0e74ad5c699590":"Kidou Keisatsu Patlabor - Nerawareta Machi 1990 (Japan)","8bea8cf270169a042bdae88f694c90b4":"Super Chinese Land 1-2-3' (Japan) (SGB Enhanced)","8c0f8cfbc339c2a2dea15b6f50793ae2":"Kirby no Kirakira Kids (Japan) (SGB Enhanced)","8c1c4b2e451fb7d695441b9be03e4d30":"Final Fantasy Adventure (World) (Collection of Mana)","8c34e1879b4f81a22515d82aa9d0bb68":"Soccer Boy (Japan) (En)","8c464aaeb8920878e1b7ec2f0d6bbe4e":"Navyblue 98 (Japan)","8c69230b2e8bbe15cee83e89a7cb19dc":"Tenchi o Kurau (Japan)","8ca4b92850c06465fa7bacad00314cf0":"Kaisen Game - Radarmission (Japan) (En)","8ca82943c26210c92bc451015d6670a4":"4 in 1 (Europe) (4B-001, Sachen-Commin)","8cbbfda8754ccacaae46ac571f46a034":"Kung-Fu Master (USA, Europe) (Beta)","8cddb8b2dcd3ec1a3fdd770df8bda07c":"NIV Bible & the 20 Lost Levels of Joshua (USA)","8cfce7b63aa070b5bcdc2e1bcb56e18e":"Little Mermaid, The (Europe)","8d0454b8cce374e863d535e2654f326b":"TaleSpin (Europe)","8d885e185ad2a0cb5c9e3b152bd24583":"Contra - The Alien Wars (USA) (SGB Enhanced)","8de5e624fe203a7b65c48e5994cc9bf0":"In the Dark (World)","8e012973051e41bb2c14fb33cae38ddc":"Kawa no Nushi Tsuri 3 (Japan) (SGB Enhanced)","8e027062ca63072336eca6010efd0e84":"Dr. Franken 3 (USA, Europe) (Proto)","8e1d2e3b4f20361c496e93f8d2e08339":"Chiki Chiki Machine Mou Race (Japan)","8e38119ff769303a771aeab01cd3905c":"Parasol Islands (World)","8e71bf57156f52e57bb593966728d6ec":"Tintin in Tibet (Europe) (En,Es,It,Sv) (SGB Enhanced)","8e76d1ce4b251e3a31056feddda92e9b":"Power Racer (Europe)","8eab3ebbc0fa9e7465ed11289868e564":"If (World)","8ed0e8d45a81ca34de625d930148a512":"Pokemon - Rote Edition (Germany) (SGB Enhanced)","8f160aa0b2f69a019911fd57ac8c5b31":"Beavis and Butt-head (USA, Europe)","8f29087400dd29a867682f22e7470b45":"Jet Set Willy (World)","8f3095c4d98694f19270d8c2788d5e46":"Ayakashi no Shiro (Japan)","8f4262923e4a4a9c4f5074841bdce103":"Daisenryaku (Japan)","8f6b6ef366a787852f664d945c86eb72":"Adventures of Lolo (Europe) (SGB Enhanced)","8f86db5ca5019627325f722761db3015":"Vampire Night Shift (World)","8fa0d3974375c863bf301b4455ef3a18":"Minolta 2476 Adj. Program (USA)","8fb0ba004cd7c2646913c0d007b73e0d":"Bork Paw Kisses (World)","8fc6e8e0f47d0fff71e1fc5e0bc67964":"Wizard of Wor (World)","8fdffb08770609255ec3cd314f79f976":"Banishing Racer (Japan)","8fdffde2db7f8da5cdb60a49d77a6b32":"Tintin - Prisoners of the Sun (Europe) (En,Fr,De)","8ffab7c16a215d3e2cce01fa24fbdf4f":"WWF King of the Ring (USA, Europe)","9013cecbec67b980010ac3979a042d8c":"Flintstones, The - King Rock Treasure Island (Japan) (Proto)","9038a85be1595de2a4f16b6f6db0f3fd":"Tumble Pop (USA, Europe)","9057925ed2531251d494f76d3b8bb471":"DuckTales (Japan)","906e42e643b65ddf4497cea6b0efb0a0":"Oni III - Kuro no Hakaishin (Japan)","908d9537a9a76f3c9f2b2a92ae11e5e9":"Super Connard (World) (Fr) (Digital)","909d684debea0c9fb04435178c55ced7":"Klustar (Europe) (Proto)","90a0bc783fbe56748989d8fad9ae48ed":"Ultraman Ball (Japan) (SGB Enhanced)","90a34d9897acb1e78e00d6d5a2af419f":"Burai Senshi Deluxe (Japan) (En)","90ae2ea218f8e21afa678c6a4e7b6013":"Pocket Monsters - Pikachu (Japan) (Rev 3) (SGB Enhanced)","90fa7375fc98c498dcf3f09ae7b91ec7":"Busty Bunny the Bounty Babe (World) (v1.02)","91128778a332495f77699eaf3a37fe30":"Alleyway (World)","9116e4fa652b09b181f547ae0e782022":"Crayon Shin-chan 2 - Ora to Wanpaku Gokko Dazo (Japan)","912d4f77d118390a2e2c42b2016a19d4":"Pocket Monsters - Aka (Japan) (SGB Enhanced)","9148245e7196c286506ad6b8bef73e35":"America Oudan Ultra Quiz Part 2 (Japan)","9155b2da7a68a39742ed1c80f1b007a8":"Dog's Muck Island (World)","9155b3e2a243be1703a09934b2b80724":"Battle Dodge Ball (Japan)","915d5d1c4ddef2c39fdb0131a34b83a4":"Bill Elliott's NASCAR Fast Tracks (USA)","916bfe72657aa44faff938d55720f8db":"Penguin Migrants (World) (v1.0)","91e47c8966a0da555e211be583987a1f":"Krusty World (Japan) (En)","91ecec5f8d06f18724bd1462b53c4b3d":"Adventures of Star Saver, The (USA, Europe)","91f7654109afd261df2b27bfdcd86898":"Best of the Best - Championship Karate (USA)","921bdff008475aa2c5344e1a0d110910":"Dr. Mario (World) (Rev 1)","92b87220f7f18afd29be272df70563b0":"Sword of Hope, The (Germany)","92e724d9ae8e6ad79442c95fe434c998":"Dragon Tail (Japan) (En)","933feecc92bf118bbe99bf6ff7ffb97a":"Konami GB Collection Vol.4 (Japan) (SGB Enhanced)","93660017f0af0589e3ce0869ebbe9bdc":"Pro Wrestling (Japan)","9381c3d1e8a7fa971555183126833858":"Marron Helps a Friend (World)","93bd30dc9a63696dc8a07f0353566fe7":"Super Pachinko Taisen (Japan) (SGB Enhanced)","93cea7134db2a28b06d30729ad460dd6":"3 Choume no Tama - Tama and Friends - 3 Choume Obake Panic!! (Japan)","93e66350ffd7403827914b80d233c989":"Waterworld (Europe)","940e815091b9d370789fde2e68bfac5a":"Kuru Kuru Pixel Logic (World)","94135fb63d77d48d2396c60ca8823b69":"Dracula Densetsu (Japan)","943a21195afc5abefb3f925b84a9f19f":"P-Man GB (Japan)","944242d3443f676bb569bbd07c47390f":"Kick Attack (Japan) (Proto)","94c8529c51540babc5fc0b3fa2c50153":"Mick & Mack as the Global Gladiators (USA) (Proto)","94d72bf09aa55761cfa723882dafc131":"Donkey Kong Land (Japan) (SGB Enhanced)","9550fadc917db38cacd0ecfb694f816c":"Batman - Return of the Joker (Japan) (En)","95517367dd10f6476bcb39a2329ef55a":"Tesserae (USA)","959834b1d0acefcf840134fae4c49fde":"Tekkyu Fight! - The Great Battle Gaiden (Japan)","95a0f644d8778b1c934ac5ae8791d80f":"Adulting! (World) (v2.0)","95d3b0c6316a9fd3a55390fde2b89a13":"4 in 1 (Europe) (4B-008, Sachen)","95e0ce560fe647b955fa1d3b2808acfa":"Yoshi no Cookie (Japan)","95fe4d5f8da42dacba0818bb7c2d786e":"Wordtris (Europe) (Proto)","9617c8babf4d714a3cbf5c9e644a67ff":"Rolan's Curse (USA) (Beta)","9627134ca3ea6e885275d30460ce3563":"BurgerTime Deluxe (World)","9628273ad4d1ee609255f4c8768733b1":"Nyghtmare - Betrayed (World) (v0.1.1) (Beta)","9639948ad274fa15281f549e5f9c4d87":"Metroid II - Return of Samus (World)","9642b7c599b47135cbd4e45e039d608d":"Amida (Japan) (En)","966cc6df20d8c5d42f690f28bbcc8caa":"Pocahontas (USA, Europe) (SGB Enhanced)","967030223fa85f7ba4ac71f26837f831":"R-Type II (Europe)","967473063a55634223f15e4c0a79dc44":"Mighty Morphin Power Rangers - The Movie (USA, Europe) (SGB Enhanced)","967d5fc3ab464c465c04d55bc1747768":"Lamborghini American Challenge (USA, Europe)","96851490451ceee8c683d33abcf0ae40":"Cyber Dreamscape Battle-Deckers 2199 (World)","96c1f411671b6e1761cf31884dde0dbb":"Pocket Monsters - Pikachu (Japan) (Rev 1) (SGB Enhanced)","9719eaada417782a236a9d84805a512a":"Dig Dug (USA)","972dc35b3b2bd0762999b1ae48da94f6":"R-Type (USA, Europe)","9751c86209191763aadf5fc290263b75":"Out on a Limb (World)","976a32b5043c440b9eca90b085ba747b":"InfoGenius Productivity Pak - Personal Organizer and Phone Book (USA)","97bc907deba1e7d7c9bc72fca0310822":"Batman - Return of the Joker (USA, Europe)","97c000e7b02914512ee05b1159371483":"DragonHeart (France)","97fecf5ab824825b781771a40e1c60bf":"Pinocchio (USA)","9810ef4294bfde29ec0bfc6c41d2f58c":"Dungeon Land (Japan)","982ed5d2b12a0377eb14bcdc4123744e":"Tetris (World) (Rev 1)","9832ab77352fd51d2c38fb6c75d1c4a4":"SD Sengokuden 3 - Chijou Saikyou Hen (Japan)","9835dfeddb332a9c9e1c2269e7863af9":"Mini Yonku GB Let's & Go!! (Japan) (SGB Enhanced)","985bf1d3fdf54038dbde36fd372fbe2c":"Taz-Mania 2 (USA)","988516a3d733132af304b1c6710a923a":"X (Japan)","98ccedc1e48c22c6f505b6ac79a944ff":"Totsugeki Valations (Japan)","98dab710bdf256c1f1cf92c31d58d632":"Super Mario Land 2 - 6-tsu no Kinka (Japan)","98e7d7fe08be476b3e8d5989fb8b301c":"World Ice Hockey (Japan) (En)","99155040191ca1da4d3b346d0d12ed7c":"Mortal Kombat (USA, Europe) (Beta)","9927d7e4de4dbe690080f35c269b7c98":"World Cup Striker (Europe) (En,Fr,De) (Possible Proto)","99314aee7dea4221cb38c03216239a51":"Jordan vs Bird - One on One (USA, Europe)","995ce81fe91162cff295badd94e366f3":"Hoshi no Kirby (Japan) (Rev 1)","996f21d850fa8d9b8b15205493976650":"Goukaku Boy Series - Koukou Nyuushi Derujun - Chuugaku Eitango 1700 (Japan) (Imagineer)","99d9043a801704007d7ad227676fa6f1":"Ren & Stimpy Show, The - Veediots! (USA, Europe)","9a16724978b9c9fbd69999bd29ff1d03":"Doomsayer - A Hero's Crusade (USA) (Proto)","9a5215658c60a1802b11f728c292b536":"Akazukin Chacha (Japan) (SGB Enhanced)","9a777d82cd7a8913ba1aed2cc854fa50":"Puzznic (Japan) (En)","9aa480224f43cbcc71bb2f4c51da2507":"DiaMaze (World)","9ab4e706b5dd1bb68b4e29a0174c330d":"Track Meet (USA, Europe)","9add23b6cf3a5b76305192da693dfd21":"Hyper Dunk (Europe)","9af91c7e344a9048f0f4037a8abcbe54":"HAL Wrestling (USA) (Beta)","9b36afc6d25cd720b091dd71596ce231":"Porklike (World) (v1.0.13)","9b66b6cfa9bdb791709b3a30722c7dff":"Spanky's Quest (Europe)","9b68b316b7af37e1428e899e90e7f7a9":"Mind Bender (USA) (Beta)","9b7768644978e51e316841b57da510f0":"Pocket Mahjong (Japan)","9b80d7dbb1eaaa379cfb59fcb032e819":"Astro-Jump (World)","9ba2999ef3ecf9e27ac6c88e995c9d7a":"Super R.C. Pro-Am (USA, Europe)","9be2b2635bd25b97a7599ab1df84a49a":"Ultraman Chou Toushi Gekiden (Japan) (SGB Enhanced)","9bfa774d2474d63fdacdbe951573375a":"Lunar Chase (USA) (Proto 1)","9c0708921c8a290857b0abd98fa2a00b":"Pocket Monsters - Green Version - English Edition (Taiwan) (En) (Pirate)","9c17a77f10f8c8024addc299cfd74b8b":"Penguin Wars (USA)","9c189413f62b92172b0bb95e81731465":"Pocket Kyoro-chan (Japan) (SGB Enhanced)","9c1efb1bd07fd91765f680e7e9bc44f1":"Hudson Hawk (USA)","9c23d37d51a593e82378dad038a52ef2":"Aretha (Japan)","9c3aff83a957d13e393f99cff8445271":"Centipede (USA) (Majesco)","9c6535574996d4b95a7e8f074ec6376a":"Space Date (Europe) (Proto)","9c9679e4da4daa2ee22f1c35eef03cad":"Caesars Palace (USA) (Rev 1)","9cbd5ff8ff720dfdf4580338626d353b":"WorkBoy (USA) (Proto)","9cc5c4335f6f233c6b0000178871e457":"Zool (Japan) (En) (Proto)","9ccc41fe3fb0ac407440cb8ea9fb3d0a":"Game Boy Wars Turbo - Famitsu Version (Japan) (SGB Enhanced)","9cd7f210ae2680349078aca844be5354":"Mickey's Chase (Japan)","9d20f9cc539c953a3da5962bea455d18":"Hyper Lode Runner (Japan) (En) (Possible Proto)","9d3d554ace962a9dc4e87544dfa76ed2":"Go! Go! Tank (Japan) (En) (Beta)","9d4d9a346158fcda7221c853b13bd19d":"Shaq Fu (USA) (SGB Enhanced)","9d94d01d3133165d4469bb27d58f0f6c":"Bill & Ted's Excellent Game Boy Adventure - A Bogus Journey! (USA, Europe)","9da5066fed7d826101a92688aa03059a":"Outburst (Japan)","9db0e1e39aa5a40471911a40e12ba739":"Looney Tunes 2 - Tasmanian Devil in Island Chase (USA, Europe)","9db11a12e5721bfecca10ac782f55247":"What Friends Are For (World)","9ddc6f4f0dc369008cbd2ac4ec561e75":"Tetris 2 (USA)","9e6e3cc5a71ee19204028f13feae395a":"Tokoro's Mahjong Jr. (Japan) (SGB Enhanced)","9e71577a809bbef83abd02596cb00913":"NBA Live 96 (USA, Europe) (SGB Enhanced)","9ea97e9f74d1059510e37736ddc65536":"Goukaku Boy Series - Koukou Nyuushi Derujun - Chuugaku Eijukugo 350 (Japan) (Possible Proto) (IE Institute)","9eb0a55ab94e3bd83d3cfc87c28c0107":"Hugo (World)","9ecb13a68c8c58d90dd15157440d5b10":"Splitz (Europe)","9ed711b8fc6602b1fcb41232e8cc43cc":"Goukaku Boy Series - Koukou Nyuushi Derujun - Chuugaku Eitango 1700 (Japan) (Possible Proto) (IE Institute)","9efef8cea73bafbaaeb779b97356149f":"Super Mario Land 2 - 6-tsu no Kinka (Japan) (Rev 2)","9effa81d3ba96812459bd6e76726371a":"Nigel Mansell's World Championship (Europe)","9f2b62d971705e147745dc2bffb99cc1":"Selection - Erabareshi Mono (Japan)","9f53c54e829ecdbd15baa3faafebb25e":"Race Drivin' (USA, Europe) (Beta)","9f5ddc6ee110a6843b1d9d9a08514c71":"Mickey Mouse II (Japan) (En)","9f7c06f90401599c5b4b2690565a29bb":"Marzipan Beef Reverser (World)","9fa5ce9c87d949dfbd5d8ff46ece63eb":"Sanrio Uranai Party (Japan)","9fae2cc970ba45b0d7ba79a68e0e9104":"Jet Pak Jak (Europe) (Proto)","9fb9c42cf52dcfdcfbad5e61ae1b5777":"Bomberman Collection (Japan) (SGB Enhanced)","9fc7d7525963a0029fcd15aa05e4cebf":"Jantaku Boy (Japan)","9fcf969d7d4554997ca902bbf9033287":"Game Boy Controller Kensa Cartridge (Japan)","a093e160d18423bdaa2d6bf22f5f32a0":"Nettou Toushinden (Japan) (Rev 1) (SGB Enhanced)","a09ca996d31ac59d76a7c156d38c02ed":"Hoi Hoi - Game Boy Ban (Japan)","a0cbb8db8757203fe42d47591c5ca982":"Seiken Densetsu - Final Fantasy Gaiden (Japan) (Seiken Densetsu Collection)","a0f5378a7c89b4c423db56204cbfcc31":"Konamic Sports in Barcelona (Japan)","a126f0ee58e0b47c405c15dd314d279b":"Jack Nicklaus Golf (USA, Europe)","a17431d0f77f14fa8339d6f9fde0f006":"Cosmic Courier - Trapped in Limbo (World)","a1b98dad8650552a7133e786d319c95d":"Ferrari (Japan) (En)","a1c0e2a4a653d2dd99cc0a7e8ef312fe":"Minolta 2420 Adj. Program2 (USA)","a1d55314d4d98e93eaf8de42e1ac5bc8":"Phobos Dere .GB (World)","a1ec7f07c7b4251d5fafc50622d546f8":"Pokemon - Blaue Edition (Germany) (SGB Enhanced)","a230f5ea1f13b2f1ee94ea05ed494a7c":"Doctor GB Card 16M Loader (World)","a23c6961d22f0d01257e64050341e480":"Pull of the Void (World)","a2431eacf48073f83bfc8e193c595f3e":"Sword of Hope, The (USA) (Beta)","a26406088504fdbde82e6783492388db":"Aladdin (Europe) (Sample) (SGB Enhanced)","a27e15cde0a8fbfc4489e0f599a53a9a":"Indiana Jones and the Last Crusade (USA, Europe)","a291dd1f541fac1d57019e4a3d0ffd08":"Takahashi Meijin no Bouken-jima III (Japan)","a2a6f4af9e87d6e34d92398a28d05149":"4 in 1 (Europe) (4B-006, Sachen)","a2b68b9472bde2d2fee32c2ec87ff017":"Wayne's World (USA)","a3059206ef517091a475249ce6c0db4f":"Aretha II (Japan)","a33a6aae3b61ef7ea70a9438e9c65b0d":"Minolta 2472-73 Adj. Program (USA)","a349929d5f66d6b7f637a4c8070fff18":"Humans, The (USA) (QUByte Classics)","a35f069f57eac92b4289b6cb45376963":"Friend of the Void (World)","a36b4c6c13d1dc9a98af66f963858ba9":"Minesweeper - Soukaitei (Japan) (En)","a379bbfbec2845fff956c18f9b743ee5":"My Husband is a WITCH (World) (v1.1)","a3ee0ae53bdbddd093304cb566a48eda":"Fidgetts, The (Japan) (En)","a446427cf79799deeba1ad63183765c0":"Mystic Quest (World) (De) (Collection of Mana)","a4627fb86c2b91fc0ace4f628aa607e4":"Joe & Mac (USA)","a46ded16cdf9308ed765e857203a59e7":"Daiku no Gen-san - Robot Teikoku no Yabou (Japan)","a477ac86be35d1fa70b708ad08dc88b8":"RoboCop (USA, Europe) (Rev 1)","a4dee5de1b4c3d9083f307d910fa0c3f":"Little Mermaid, The (USA)","a4fc8158d1f2b6359ddac6c66d747a95":"In Your Face (USA)","a517826d1cc3984a141f0f08d3ad72ee":"Zen - Intergalactic Ninja (USA)","a55e4143925f5cbe2b929cc5f598bbe9":"Superman (USA, Europe) (SGB Enhanced)","a574e5f7119b31e5112221c3a0ada813":"Smurfs, The (USA, Europe) (En,Fr,De) (Rev 1) (SGB Enhanced)","a580ee4e1fc4dde0d3b8c11b62a4d77b":"Rentaiou (Japan)","a58397c62d44a60fa08d3f51cd8385c6":"Mini 4 Boy II (Japan) (SGB Enhanced)","a58ad38354f16e3e6777e91dedd9ce28":"Battle Bull (Japan) (En)","a58f2b1a317cfb1d60b59f3875f6a9c2":"Dexterity (USA, Europe)","a5ab8800c82e4cac4e59fb4cf848a520":"Super Covid Go Get Biscuits Adventure (World)","a5ccb24492f40038cd5c2bb00ef6e150":"Chachamaru Boukenki 3 - Abyss no Tou (Japan)","a5d383a5f6e9d61b505429257f2c44c1":"Crayon Shin-chan - Ora to Shiro wa Otomodachi Da yo (Japan)","a5eef9d26684af4ee340f3b49a454283":"Madden 97 (USA) (SGB Enhanced)","a60df6aeb6820683805be1717097fca8":"Ganso!! Yancha Maru (Japan)","a614bbd7851374a870e57f43896ffe0e":"Casper (Europe)","a617ca41254cc6df7b82fa18e411010d":"Tip Off (Europe)","a61b0c0e0f0d9833cba22811caabd3ba":"College Slam (USA)","a630ff4546fd16369ede2a618224e7ca":"Linea, La (World)","a66e4918edcd042ec171a57fe3ce36c3":"Kirby's Dream Land (USA, Europe)","a6b8b5222f1cfc5162ce4fb1e29a8006":"Probotector (World) (Contra Anniversary Collection)","a6e199044dd40de06a7cc7cb1903711c":"Soccer Boy (Japan) (En) (Beta)","a6fd94ff8f5293aee192b89253b7be80":"J.League Big Wave Soccer (Japan) (SGB Enhanced)","a7032c0bbfe917790135acd338ec3d2f":"Nintama Rantarou GB (Japan) (SGB Enhanced)","a74a2a87bb4b2637c5243a37523fa7ae":"Karakuri Kengou Den Musashi Lord (Japan)","a74aa804a3a6439303583e6c0b413b00":"Chikyuu Kaihou Gun ZAS (Japan) (En)","a757dddda7b377c73cd8b7958b2115f6":"Operation C (World) (Contra Anniversary Collection)","a7594d0b4362a7e4325dd8ea913c4bf1":"Kinin Koumaroku Oni (Japan)","a76792fdbcf6a9f9f1ff32bc0915834c":"Snail, The (World) (v1.3)","a770898fbe4e5c155c865abbee4ee654":"Bobby's World (USA) (Proto) (SGB Enhanced)","a774e4d7c2e05d0dbbde260ec807bb59":"Mick & Mack as the Global Gladiators (USA) (Proto)","a77e8144b00215385ebf8490a539e4be":"Zoids Densetsu (Japan)","a78457ae06f670c5ec173f8d2ca605d5":"Doraemon no Study Boy 2 - Shou 1 Sansuu Keisan (Japan)","a7b0e283170b28c4c77016a95210b714":"Pocket Stadium (Japan)","a7df57dcb5f80ac0bbe39c4dc6339a4e":"Selection I & II - Erabareshi Mono & Ankoku no Fuuin (Japan) (SGB Enhanced)","a7e6b3415bd33f306c342f5b71493154":"Jimmy Connors Tennis (USA, Europe) (Beta)","a7f5427d28a60a0f59b850a521919179":"Fly O'Clock (World)","a818623c008517f677c1c1eb17962e8d":"Humans, The (Europe) (En,Fr,De,Es,It)","a83273edb8b89c84145d619d72ee19fe":"Ninja Taro (USA) (Beta 1)","a83d745ae8806a04d4a9e3c241f8c8cb":"Medarot - Parts Collection (Japan) (SGB Enhanced)","a8413347d5df8c9d14f97f0330d67bce":"Super Mario Land 2 - 6 Golden Coins (USA, Europe)","a849bc6810ae27de442ab9aa354ea594":"Medarot - Kabuto Version (Japan) (SGB Enhanced)","a8804c8514619cc918960c2008ed65d1":"Yoshi (USA)","a8b74d14e66f7a3049e79ca147141d52":"F-15 Strike Eagle (USA, Europe)","a8f87a97f8b5b84282c68d0ce989dd65":"Karamuchou no Daijiken (Japan) (SGB Enhanced)","a926508282da0b7889ab4f0947916068":"Desert Strike - Return to the Gulf (USA) (SGB Enhanced)","a94e7294260b4266af7d0283c95f0018":"Snow Brothers (Europe)","a95e6579f8d6048c5e150c41d180c782":"Alfred Chicken (Japan) (En) (SGB Enhanced)","a95ef483162d0ca6824a08a5e68f90b0":"Genesis (World)","a981378da19c08597db03f3ee02cd6d7":"Fortified Zone (USA, Europe)","a98f3b3b87d4b8ae3672f518295a8fde":"Populous Gaiden (Japan) (En)","a9c9d6b6759c28f2b3986717f4df2f98":"Medarot - Kuwagata Version (Japan) (Rev 1) (SGB Enhanced)","a9e795191670fe5994700c9cd8b7fbfd":"Otto's Ottifanten - Baby Bruno's Alptraum (Europe) (En,Fr,De,Es)","aa05bfdc3b5655d4cf6694f54a6262b0":"GameBoy WORDLE (World)","aa13e886a47fd473da63b7d5ddf2828d":"Pocket Monsters - Pikachu (Japan) (SGB Enhanced)","aa6cb8aa7bee968d77aae59acfbde6d8":"Bass Fishing Tatsujin Techou (Japan)","aa9d61a428c592030a88828ae80c8fb2":"King of Fighters '95, The (Europe) (SGB Enhanced)","aaaea54927a98e4531367d0331f06b00":"Matchless 23 in 1 A (Taiwan)","ab1fa0ed0207b1d0d5f401f0cd17bebf":"Exodus - Journey to the Promised Land (USA)","ab5e4c728a5b62f7985c22c61551469c":"Parasol Stars - Rainbow Islands II (Europe)","ab5f50d0e31a07e19739453bb9a2d328":"Dick Tracy (USA)","ab5fac354726b7b0710cfdba22d7142f":"Populous (Europe)","ab640fff5661c467369fa8fb12a389e8":"Tail 'Gator (World) (Limited Run Games)","ab7a5f3d9e818a434cc64915c3dbd31f":"Q Billion (USA)","ab916e1df69e7b3401cb6ebd3f1798a7":"Alien vs Predator (Japan)","aba4c0670730f413d4946d88aab28629":"Rampart (USA, Europe)","abd4baa57f0b90b402c2e56090394f9e":"Hercules (USA, Europe) (SGB Enhanced)","ac04d143de6734e181a223d05178bde8":"Ikari no Yousai (Japan)","ac2cd2a4227b38765f23fb5b72de6229":"Fidgetts, The (USA, Europe) (En,Fr,De,Es,It,Nl,Sv)","ac4db6db9087a5f124d0cdc5a72a77c0":"Touch the Cat (World)","ac818b043dce5ac97e5c36fb924964a6":"Hook (USA) (Sample)","ac91c0c58bc087f15d294092d65ed9f1":"Loesningen (Sweden)","aca9abfbab8345733456394b516f03e1":"Nekojara Monogatari (Japan)","acac255e33082dde52eee7af941d8681":"R-Type II (Japan) (En)","acc04aebb20cb829dca77bb554f60653":"Game Boy Digital Sampling Oscilloscope (Europe)","acc561d478839c1f3e5548355fce9e3b":"Sa-Ga 3 - Jikuu no Hasha (World) (Ja) (Collection of SaGa)","acc809b591ea80aef4922268460d7984":"Lion King, The (USA, Europe) (Beta)","ad167668bc03ad597a6ec4030be64d07":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced)","ad868e84fb6071a3b6a211d16e6cbb66":"Teenage Mutant Ninja Turtles - Fall of the Foot Clan (USA)","adeb901ebd11b788ae0b312e559eab73":"Olympic Skier (World)","adf6023f4bfc67cbbf09a42f0d0ce27a":"Suzuki Aguri no F-1 Super Driving (Japan)","ae073c63ff7d151dc2dd406830fbbdc2":"Batman - The Animated Series (USA, Europe)","ae08c1f73f822116060ef58293b94ed8":"Zelda no Densetsu - Yume o Miru Shima (Japan)","ae3f9a9c9a1ce63578ba68b3511c359c":"Animaniacs (Europe) (SGB Enhanced)","ae49bef112672ffa782d45fe9939be71":"Power Paws (Europe) (Proto 2)","ae4fda03378a0584d45a4735c9d6290e":"Dragon's Lair - The Legend (USA)","aee13a4aa95c9b3a4b4cf607a3e17a91":"Puzzle Boy (Japan)","af400bb2773ccbfcedfd1250cc801328":"Teenage Mutant Ninja Turtles III - Radical Rescue (USA) (Cowabunga Collection, The)","af46f94b7a05caf538b7c07b8bb75238":"Smurfs Nightmare, The (Europe) (En,Fr,De,Es)","af8022daa8b774c666fcc65961c8bd4a":"seaQuest DSV (USA, Europe) (SGB Enhanced)","afa16d0822254cf68df1e29556e6cbcc":"Prophecy - The Viking Child (USA)","b00c32fc442b523cec2f2a26ffe9a1a4":"Kick Boxing, The (Japan) (En)","b0195767bf5d839e4cc4c837a4709b54":"Mickey's Dangerous Chase (Europe)","b04f705f3e4db711560f9834a6431171":"Deadeus (World) (v1.3.8)","b050def2aa2280ee666d23c3a688f438":"Shinri Game 2, The - Oosaka Hen (Japan)","b051d85bf46335e0c00429abb313c213":"Teenage Mutant Ninja Turtles II - Back from the Sewers (USA) (Beta)","b06f7dae7b52ebe3d277ececa2d1976c":"Do I Pass (World) (En) (v1.4)","b08b6047c38db0febcdc29da5fc5b5a3":"Little Tales of Alexandria, The (World) (MBC5) (SGB Enhanced) (Batteryless)","b0935f81f3396b70e052a4b3332f0292":"Finders Keepers (World)","b0afdadb0804b98cd2ba41e2c59e251f":"Tsumeshougi - Kanki Godan (Japan) (Beta) (SGB Enhanced)","b0ef8b9f2ea3e0898b8298a6f076064a":"Caesars Palace (Japan)","b12ff2bc7c37b89272b8d402ff42f634":"F1 Challenge (Europe) (Beta)","b13d36a2d0244cfa90ca73d1b9794f0a":"Roger Clemens' MVP Baseball (USA) (Rev 1)","b150ebb4eef4643b9a392f41a0cd62e5":"Sushi Gun (World)","b172d8b9954d1dcf374ef99fc7cc2716":"Family Jockey 2 - Meiba no Kettou (Japan)","b17c839d444f98a4bd7fec2e49cacf12":"Mortal Kombat - Shinken Kourin Densetsu (Japan) (En)","b1864ab2fa592aa7e8337c308df08047":"Mickey Mouse V (Japan)","b1871e07c180925c0d196cf3a5fea020":"Goukaku Boy Series - Z-Kai Kyuukyoku no Eijukugo 1017 (Japan)","b199980b6e3fde27da5fb8d6d2b49356":"Bomb Jack (Europe) (Beta 1)","b1a4da0fc96be115b3d5303c9ca1447f":"Mega Man IV (Europe)","b2023017774d88ffe82a7d1b0af52c12":"Dirty Racing (Japan)","b236e81e9f5c19148c24c4984d8ef90f":"Heiankyo Alien (USA)","b251d6a81102315a0965281653b1ae36":"Goukaku Boy Series - Z-Kai Kyuukyoku no Eitango 1500 (Japan)","b259feb41811c7e4e1dc200167985c84":"Super Mario Land (World) (Rev 1)","b28fb20c039edc0f07509dd61a2ce7e4":"Art School Pocket (World) (Es)","b2999cfb6dacb439f501a71f30f91762":"Game Boy Camera Gold (USA) (SGB Enhanced)","b2c2367b5a3e6a483c147debec006508":"Goukaku Boy Series - Gakken - Yojijukugo 288 (Japan)","b33d6f65f4a566d715ce480bffd004ad":"Cliffhanger (USA, Europe)","b340bad71c781bd1394d95241ed1adce":"Cosmo Tank (USA)","b3474bab3eda25bdb1508ed53765fb30":"Mortal Kombat (USA, Europe)","b364d2bbe0a3a09adafa9b6b982a9acb":"Darkwing Duck (Germany)","b394b99267da2b55c74fc67c369c1057":"VS Battler (Japan) (En)","b3af8bcd6de27ba829c075affbc9f839":"Tumble Pop (Japan) (En)","b3be58ae099ab2a695cfebe9881c7461":"Boggle Plus (USA)","b3e011cde1fa6b5bebcac15ac970c4a9":"Hook (Europe)","b3f3d35f58a0ea3affc0ec6d4ee1183d":"Alien 3 (USA, Europe)","b439f2ca31e47f7ac4ea4a95cc6c9fa5":"Teenage Mutant Hero Turtles II - Back from the Sewers (Europe)","b48161623f12f86fec88320166a21fce":"Super Mario Land (World)","b4981ddab0cb1574701e7f1dae333861":"Goukaku Boy Series - Koukou Nyuushi Derujun - Chuugaku Eijukugo 350 (Japan) (Imagineer)","b499a3d11d9a18ad78407b1d00bf5e6d":"Safe File (World) (SGB Enhanced)","b4ab37ee420c11285be1c634c34f5726":"Altered Space - A 3-D Alien Adventure (Europe)","b4b0bea76a491e46c3b1e6e2fd7f0402":"Kaseki Sousei Reborn (Japan) (Rev 1) (SGB Enhanced)","b4cee49981c3124df8bbd40a60426f9e":"Snow Brothers (USA)","b4e5876c5acedd12b62e25a12973a4ae":"DuckTales 2 (USA)","b4f880dad5d909125faec725ae95c561":"Super Hard Bouncer (World) (v1.1)","b50c899d9e6c8e46e20e36aec019b0f0":"Snakebird (World)","b5136b95183959944f06e000f10dde07":"Deadeus (World) (v1.1.0)","b53539ee3d15c24bc55d71cfbbbf2946":"FlappyBird GB (World)","b53fe06db30ab689153135990354dd5a":"Mega Man V (Europe) (SGB Enhanced)","b55a747b3674c0c330c143ee715b1a6a":"Goukaku Boy Series - Z-Kai Reibun de Oboeru - Kyuukyoku no Kobun Tango (Japan)","b5a41149d31b00fae3460c5b89c6755b":"Spirit of F-1, The (Europe)","b5a6254b1711edfaf89830bcfff09d38":"Bionic Battler (USA)","b5c541c765fd3a5767b3fa1cfc821587":"After Burst (Japan) (En)","b5e99dcb3296afb933796e552cac1e31":"Purikura Pocket 2 - Kareshi Kaizou Daisakusen (Japan) (SGB Enhanced)","b65938f85944bda47e59c123537abea0":"Race Days (Europe)","b67196db786a67cdfe50d6d2e902aa11":"Jinsei Game (Japan) (SGB Enhanced)","b68c4141b4c4f778bd13100b9a3db82c":"King of Fighters '95, The (USA) (SGB Enhanced)","b68ce95d923f40fe9166ff635031147c":"Nada Asatarou no Powerful Mahjong - Tsugi no Itte 100 Dai (Japan)","b6a08c7e3af4ec8c9559cd268115d97c":"Mystic Quest (Germany)","b6cc27346353a8f02dda978a4e8ae2d3":"Nada Asatarou & Kojima Takeo no Jissen Mahjong Kyoushitsu (Japan) (SGB Enhanced)","b6d07d6830c8517aa96b000d9f3b2bf6":"GB Genjin 2 (Japan) (SGB Enhanced)","b6d1139fb8d57cd47f173faef592c813":"Game Boy Gallery - 5 Games in 1 (Europe) (SGB Enhanced)","b6d37de7ea2b720d1b66cb1db51ee6ba":"Amazing Penguin (World) (Limited Run Games)","b6da78085d38a8be3ef564b9989c45d0":"Dr. Franken (USA)","b73d76599e3d7f979a99bba5f1c92add":"Bonk's Revenge (USA) (SGB Enhanced)","b7477b7050cc569b4c02a5ae60e5f24e":"Pro Action Replay (Europe)","b76df0942c3f4b3569a736c9c8e44179":"Cel Story (World)","b783d5b3d52f43200500d773d36cc000":"Mega Memory Card (World)","b78f7809624994defcf23d2ec5e17d70":"Asterix (USA) (Proto 1)","b7963a68f95d644f8adedb269d29666c":"Hoshi no Kirby (Japan)","b80fc4c1aa83f4f57cd8e0378287ffd4":"Grander Musashi RV (Japan) (SGB Enhanced)","b834825661c10226c42ef6be87224b83":"Litti's Summer Sports (Germany)","b83f33f33ab52e0b7ee80715dbb8d415":"Great Greed (USA)","b83f3c669d22bc74c72743821ae3aaa3":"Alfred Chicken (Europe)","b85a4bdea69168870d5be639b8a1aa4b":"Pop Up (Europe)","b86be9c65c1ba0db48d6eb8e0770926d":"Peke to Poko no Daruman Busters (Japan)","b8ad678f5f1e8a7f498b04a6257b3108":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Rika Battle Hen (Japan) (Imagineer)","b8ae13edc37731756974a2b520763f20":"Pocket Kanjirou (Japan) (SGB Enhanced)","b8d609b5dbac6a2dae6087fd9feec196":"4-in-1 Fun Pak (USA, Europe)","b8daf4591cd9dd9da702d3544a3d07f5":"Ippatsu Gyakuten! DX Bakenou (Japan)","b8db331900e2ff84a83efa787a11131d":"Chibi Maruko-chan 2 - Deluxe Maruko World (Japan)","b8de7e1ef842f68d1d33538e621a9248":"Sword of Hope, The (Sweden)","b8ea135492ac908dda8bb695ffbbc813":"Super Street Basketball (Japan) (En)","b90369597fe5e986af4c1c31ad655f86":"Genjin Cottsu (Japan) (SGB Enhanced)","b91125b6018a0a879e356a32129f5b73":"Bataille Navale (France) (En,Fr,De,Es)","b94eb524347bb0a8a5c151b59ad63cfa":"Jurassic Park Part 2 - The Chaos Continues (USA, Europe) (En,Fr,De,It)","b990a1214b0c0c4f6eb079d80c8a9cbf":"Teenage Mutant Ninja Turtles (Japan) (Cowabunga Collection, The)","b9c444465748af0c5a7532c91d8c6d64":"J.League Winning Goal (Japan)","b9cfee05797beb8ff7e259ee77eaf2fb":"Mega Man II (Europe)","b9d3d91d8389cc510aa8fe9063228644":"Hatris (Japan, USA) (En)","b9d8e38d12aad3046b0e2e6fd1ce4944":"John Madden Football (USA) (Proto 1) (SGB Enhanced)","b9df0bb1f84333a1e5ab4af563525cdc":"Baby T-Rex (Europe)","ba134274fa4098395d54f619b22c9726":"Blitz Bomber (World)","ba2ac3587b3e1b36de52e740274071b0":"King James Bible (USA)","ba33da96bd133a788492f410170eb27c":"Minolta 2097 Adj. Program (USA)","ba50565630891680c9cf8b1827fca429":"Chalvo 55 - Super Puzzle Action (Japan)","ba544265b8d949cf35984cd23af63da8":"WWF Superstars (USA, Europe)","ba556891321dbbc8dce857ca2cf7d417":"Attack of the Killer Tomatoes (Japan)","ba760b6d4b96baf0fa2e7ad6e4498a95":"Nemesis II - The Return of the Hero (Europe)","ba78ac0638f36a89386b690d619f13b1":"Adventures of Pinocchio, The (Europe) (Proto)","ba8628a70339843c2ee8a294b840e8d6":"Killer Instinct (USA, Europe) (SGB Enhanced)","baf5068c926c2eabea4afe559f2e3cb0":"Lion King, The (Europe)","bb0cca048a51ddbae426221bb3d2e508":"Aretha III (Japan)","bb352209d041ed1b9f09c26e0c7ab749":"Dino Breeder (Japan) (SGB Enhanced)","bb5544584f2988490565198c56d81c06":"Shippo de Bun (Japan)","bb922ce354fc5caec500f99985a07c39":"Taz-Mania (Europe)","bbca91d6bc19cda45c706046b6e854e6":"Real Ghostbusters, The (USA)","bbee4bc313cf03c016129e1e00b50008":"Othello World (Japan) (SGB Enhanced)","bbf5e9e76b28352665aff796a13830e8":"Doraemon 2 - Animal Planet Densetsu (Japan)","bbfbc7f8bf4bc6bc5f4b829b2e52d593":"Pachinko Kaguya Hime (Japan)","bc19f4674a1ce73f1557e75fbd572370":"Minolta 2481 Adj. Program (USA)","bc1a3848092bdc900c157996c29a7783":"Yoshi's Cookie (USA, Europe)","bc35dc3bf102cfa265c5c7348e674ba9":"Dragon Slayer I (Japan) (En)","bc36d55377d7961a49a48a70a2827e5e":"Simpsons, The - Bart vs. the Juggernauts (USA, Europe)","bc40e81c4db84dd46f7b52c8bccf49b8":"Teenage Mutant Ninja Turtles 2 (Japan) (En)","bc4576a905da6160758264e6b070f8d0":"Lawnmower Man, The (USA) (Proto 1) (Not For Resale)","bc673971b4d2fd8914fb37d1b42e4610":"America Oudan Ultra Quiz Part 2 (Japan) (Rev 1)","bc76c0516129c6791e4087f93f5d3c99":"Battletoads in Ragnarok's World (Europe)","bc81e491896f94f1f92d1b830852ef5b":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced)","bcb3d47c291fd0a26b2c7b1082c3ad88":"Crayon Shin-chan 4 - Ora no Itazura Daihenshin (Japan) (SGB Enhanced)","bcdea9c2628c4913ee1036c161d69ce0":"Minolta 2162 Adj. Program (USA)","bd08880684132809013b413cfc1051dc":"Megami Tensei Gaiden - Last Bible II (Japan)","bd2d327c51a3c705227ec6eea474bb7b":"Tip Off (USA) (Proto)","bd456f73ba9cf33058d5a32f9f149e89":"Klax (Japan) (En) (Hudson Soft)","bd816c99ef46497c67aca61d1cb306be":"Nettou Samurai Spirits (Japan) (SGB Enhanced)","bd8873b840455cb6464574c14448f8cb":"Mighty Morphin Power Rangers (USA, Europe) (Beta) (SGB Enhanced)","bdc53a5d0d1448b900d16b9d583b02c4":"Oblique Strategies (World)","bdcf042bc2458768522c3cca43c89ee1":"Days of Thunder (USA, Europe)","bdd6f3f98390202800751a4ea2a48c36":"Same Game (Japan) (SGB Enhanced)","bdf7e5902c89bd3cdfead568d8105758":"GB Pixel Jam 2023 Gallery (World) (Digital)","be99ca18c5b9dbb90b4e08f164855be5":"Pachinko Time (Japan)","bebc8436a32cf92de0197dd47bc52e97":"Christmas Carols (World)","bec4b32510f72af2811045a87261aea9":"Kizuchi da Quiz da Gen-san da! (Japan)","beeb3092aec6da08f5a86630207ae87c":"Looney Tunes - Bugs Bunny to Yukai na Nakama-tachi (Japan)","bf01b798de6b41d301827a4c943a9e45":"Jimmy Connors Tennis (USA, Europe)","bf3d90ff1c8d4827b5657d7b15d84fde":"Mercenary Force (USA, Europe)","bf4e4002ffa88b9be2c8b8a5b4cd9a48":"International Superstar Soccer (USA, Europe) (SGB Enhanced)","bf9334b9c902510cd9fe39af82b4b465":"Hugo 2 (Germany)","bfc83dd55f64f6c472ef45d3592a7b92":"Yu Yu Hakusho Dai-4-dan - Makai Touitsu Hen (Japan) (SGB Enhanced)","c013958fa8447be55f1e037ed4a1a9f9":"True Lies (USA, Europe)","c03abc409b442aa42864cb2ac2ba89b9":"Pinball - 66hiki no Wani Daikoushin! (Japan)","c042681adbbe175b354d0abee3413219":"Shanghai Pocket (Japan) (SGB Enhanced)","c05b47df8bdfe770be228e51bc42da84":"Rockman World 2 (Japan)","c07063729944ffc4459e006e862df061":"Soreyuke!! Kid (Japan)","c07e71f36fe2cd302f043dd37f828718":"Ninja Twins (World) (Digital) (SGB Enhanced)","c0a038c66fb8252108ee888f8a0ba2bf":"Konamic Basket (Japan)","c0c970db6c0572facb8a54b23152f509":"Minolta 2205 Adj. Program (USA)","c0ca6588162206b5982ba77bcf6397ce":"America Oudan Ultra Quiz (Japan)","c0d8ed063b30614c71d15d4d0ff08ffe":"We're Back! - A Dinosaur's Story (USA, Europe)","c0f1cd247136a87c6a2f71b54544a8d3":"Alien Olympics (Europe) (Beta 2)","c10a76a601ea375593f1cb944c3365e7":"Game Boy Wars Turbo (Japan) (SGB Enhanced)","c18465f62acdb31516360c17ccc2ab37":"Nettou World Heroes 2 Jet (Japan) (Rev 1) (SGB Enhanced)","c18510af46a7e2649221fdc2e03599e6":"Nigel Mansell's World Championship Racing (Europe)","c18bd7c4f672efe33dff72a5dacd3284":"Wordtris (USA) (Beta)","c197d6afc51b6bcf616781a5c32708a4":"Pachi-Slot World Cup '94 (Japan)","c19d61e31d6aebc12abf80d628a7bd09":"Mortal Kombat 3 (USA, Europe)","c1ac652d62a6302d6c34814f7f703957":"Dragon's Lair - The Legend (Europe)","c1adf0a77809ac91d905a4828888a2f0":"Pocket Monsters - Ao (Japan) (SGB Enhanced)","c1b3f705a5e0786b223e9c2ece073fe5":"Star Wars (World) (Limited Run Games)","c1c084439399dc1541ee555bcabb7700":"Bases Loaded (USA)","c1cff8487b25700a509ce89cc3c7bcac":"Primal Rage (USA, Europe)","c20ce2d03552b351510767ea68070838":"Opossum a la Mode (World)","c21058af21efc29413797f0a2c532e16":"Incredible Crash Dummies, The (USA, Europe)","c216547ff3fc2794bb6eab9c84032bea":"Super Breakout (USA)","c2212d75077638539d6af4673b4939e6":"Dead Heat Scramble (USA)","c22f3efe9048652ef6f798650fce2d2a":"Rockman World 3 (Japan)","c24fab661012d1cf62e030bc31cd1f69":"Famista 3 (Japan)","c25b8eba16bb9a24dcf6339febc05dbe":"Game Boy Gallery (Japan) (SGB Enhanced)","c267820660ecbbab0d63fded955f1e15":"Mona and the Witch's Hat (World)","c27ebebee5a53fe6eb857747c0556111":"Flappy Special (Japan) (En)","c284b8a9019020336c89b680fb6552e4":"StarHawk (Europe)","c29df42ef1237c4392049196d2205ffe":"Midori no Makibaou (Japan) (SGB Enhanced)","c2a123cce9d1adac8bdb94b8b475d24c":"Addams Family, The - Pugsley's Scavenger Hunt (USA, Europe) (Beta 2)","c2ab034ceb1dc42c96a7a9301c382d20":"Battle Crusher (Japan) (SGB Enhanced)","c2bd6566d434e175c308d99803922e3d":"Cool Hand (Europe) (Fr,De)","c2de4b0c726b579012fef2be578b1920":"Kirby no Pinball (Japan)","c2f5ca0c891c84b3393ab732934f70e3":"Stardiver (World)","c31e99cb81e95c56af7596cdcfe5a48c":"Iron Man X-O Manowar in Heavy Metal (USA, Europe) (SGB Enhanced)","c3f48a71da12919004c88b6f37eebd0d":"Nekketsu! Beach Volley Da yo Kunio-kun (Japan) (SGB Enhanced)","c3fbe689e57e493d9e5eb8340c4efb29":"Doraemon no Study Boy 1 - Shou 1 Kokugo Kanji (Japan)","c4082f582d94e51fc960838e9c5829b8":"Neko Can Dream (World) (En)","c4360f89e2b09a21307fe864258ecab7":"Legend of Zelda, The - Link's Awakening (USA, Europe)","c46e059a69d9b3b4b0b9d8d303c559b3":"Trip World (Europe)","c4801ac17a34635fdce973354e85faef":"Dig Dug (Europe)","c4868bf46a993b4c33a9a8af5341282a":"Blaster Master Boy (USA)","c4b03180037d53cb64b93634439acea0":"Super James Pond (Europe)","c4c65d1c07bbc9626ddab008843bf7d0":"Oni (World) (Digital)","c4dc3987a841a428f837db26bddc586e":"Nemesis II (Japan) (En)","c4e2de3be0bb5608ab903a885afc065d":"Hook (USA)","c4ea13687c331ce83c03d5fb400ea19a":"Blues Brothers (USA, Europe) (Beta)","c515cc92427ea1148c1d6274f803b07a":"RoboCop Versus The Terminator (Europe)","c5256354a6fcd57240c97a399773822e":"Nangoku Shounen Papuwa-kun - Ganmadan no Yabou (Japan)","c5397c3e9740264482995573628e3b9d":"Dr. Franken (Japan) (En)","c551445d0da819e3717e5bb600a81d06":"WWF Superstars 2 (Japan) (En)","c5858497d4e8fcfbb7221e327a0e79b5":"CutThroat Island (USA, Europe)","c58edffdb628ea2fc904d4b8c93b6cbc":"Mickey Mouse (Japan) (En)","c593b63cbd4b151a2fd1861c73634b0a":"Winter Olympic Games (USA)","c5b36de3dd613b23e2aef7fc4427e5f8":"Frank Thomas Big Hurt Baseball (USA, Europe)","c5f51c42357790b7693198fc06f82390":"World Cup Striker (Japan) (En)","c62460c4fb6430cb4d2c6a3902b5442d":"Schiffe Versenken (Germany) (En,Fr,De,Es)","c62581e125bda4a878740548540f8ebb":"Pluto's Corner (World)","c62fcd4c0cbf34f2e7d1c86db1eb0a87":"Machine, The (World)","c6adf7c0b2a3ea59fa6e59bcf7f1dc4a":"Super B-Daman - Fighting Phoenix (Japan) (SGB Enhanced)","c6c1ce5f473fd6a31033878d32c885d4":"Chiki Chiki Tengoku (Japan)","c6effb3a51b36056411760d1ffe048f7":"Operation C (USA)","c7697c8db218bcb35aa37d43e4278376":"Bamse (Sweden)","c789b84538beff12b8b60065974a3b10":"Mission Mars (World)","c7920eb4b478c4d7513f2f43b7dbb9cf":"Tamagotchi (USA, Europe) (SGB Enhanced)","c7bf23774f3fec0bbe79504a558fbbb6":"Jinsei Game Densetsu (Japan)","c7dd61d11b33e88fc09acd045d4ab339":"Nakajima Satoru Kanshuu - F-1 Hero GB '92 - The Graded Driver (Japan)","c7f41e40a9e5a9141ca80be614e0907b":"Judge Dredd (Japan) (En)","c7f8eb0309204c2d83fc2fe4d03c4bde":"David Crane's The Rescue of Princess Blobette (USA) (Beta)","c7fe0019fdc5887641cd6a1bb193ddd6":"Top Rank Tennis (USA)","c80413993cb4a5b79c9cdd04235010dd":"Bubsy II (USA)","c836b4b44edcbe8a811fb10541919fe8":"Final Reverse (Japan) (En)","c83cfed9c0cc9043eed5f761550de64c":"Ninku Dai-2-dan - Ninku Sensou Hen (Japan) (SGB Enhanced)","c856cee0abfc387aaef8c851cc2a67b8":"Chou Mashin Eiyuu Den Wataru - Mazekko Monster (Japan) (SGB Enhanced)","c85e5ba3dad5aa705b96da083cdd1a1c":"Dangan GB (World) (v1.1)","c8611861afe5d9b47043150ee2c94389":"Druaga no Tou (Japan) (En)","c87119b643ff4de3e2614ff10bd0c6ea":"Street Fighter II (Japan) (SGB Enhanced)","c88219c68fd7f29e92511eb80da2a9ef":"Anctrayl (World)","c88d94a984afde869426694a3b992894":"Fist of the North Star (USA)","c8bab3886324f6aec60b65d8584453a1":"Agro Soar (Australia)","c8d156a2d4f38f56ec3aa9e405e540b3":"Winner's Horse (Japan)","c8d302c64c7fa47c8d735d037b5e4e0d":"Alien Games (USA) (Proto)","c9200b1be878f079cee6cbebbeaa27ea":"Nintendo World Cup (USA, Europe)","c94afb46cada0118aa8ff08cc07749a4":"Parodius (Europe)","c9791e6cd453aeef19c722924521d381":"Star Trek - The Next Generation (USA, Europe)","c99e0dff23c030ec8f7be07557b94a66":"radioRealm (World) (Ja)","c9a8d61d6d4707d28fcb267f93fa59ec":"Namco Gallery Vol.1 (Japan) (SGB Enhanced)","c9ce9d01b622efce61cd4f002c628203":"Square Deal - The Game of Two-Dimensional Poker (USA)","c9dc09ea6d93d5114079f58c7bbf7982":"Battle Space (Japan)","c9e8c196d57aab17c4c171816fcd6492":"Spud's Adventure (USA)","c9edc6cb63e3c2a91889653af8929ff7":"Hokuto no Ken - Seizetsu Juuban Shoubu (Japan)","ca051ed29d2e844da897484aa501d86d":"From TV Animation Slam Dunk Limited Edition (Japan) (SGB Enhanced)","ca7a62e5e14aafd813bc806d0cf54117":"DuckTales (Europe)","cac921f8eec70d5ccd8a2db8f473a084":"Alfred Chicken (USA)","cac94925bf098982d31f7c9a2c296d25":"Tail 'Gator (USA, Europe)","cb0a5d103c01d1d82d324602a45dd21b":"Burning Paper (Japan) (En)","cb1d69526cea3a0cbcaae091a10707fe":"Donkey Kong Land III (USA, Europe) (Beta) (SGB Enhanced)","cb1dce08c78c509a876c494d6333f45c":"Star Wars (USA, Europe) (Rev 1)","cb5fe1c733f610ad6151216b6887285a":"Samurai Shodown (USA, Europe) (SGB Enhanced)","cb61afd7708d90d976f585edebcaaa89":"Tom and Jerry - Frantic Antics! (USA, Europe)","cb62a0dd667ff4fc2f4ebe6f0aef955f":"Baseball Kids (Japan)","cb66b804aea0db325d5f2dd795c71a6a":"Lingo (Europe) (En,Fr,De,Nl)","cbab48ca1dffc834b4e334861498610d":"Tip Off (Europe) (Beta 3)","cbb45188c780ce5bbdf502ceb2b9994a":"Tiny Toon Adventures - Babs' Big Break (USA, Europe)","cbbc637e7c1f6473ef5c07d9071b50ae":"WordZap (USA) (Beta)","cbd881ea82beb95ab599a0418b22635a":"Metal Masters (World) (Limited Run Games)","cbe4df9625a9145d00426f0e92e162f9":"Tsuri Sensei (Japan) (SGB Enhanced)","cbf1f4ca2288995c18df0ef3025c9580":"Bakuretsu Senshi Warrior (Japan) (En)","cc0cc9f187765dbf3054585d5b33a6ec":"Torpedo Range (Japan) (En)","cc111bc1ee3e0ad566b8bc058372b6cd":"Lucky Monkey (Japan)","cc5fe746d5e216b4a1048453b2068a5d":"Solomon's Club (Japan)","cc6419598044961237496d3af7f18d58":"Goukaku Boy Series - Eijukugo Target 1000 (Japan)","cc7b28ea40189a4c0a254c3a7f11e934":"Oni IV - Kijin no Ketsuzoku (Japan) (Rev 1) (Beta)","cc9d6b3915a86013599fcb30b75cc237":"Conefuse (World)","cca5288a7a9e0270592bf75c0431bbb5":"Hunt for Red October, The (USA, Europe)","ccaf9331318d4dfe3d1ee681928a74fd":"Mario's Picross (USA, Europe) (SGB Enhanced)","ccb0d2a704c3ec24a0bbd78fcdfad4dd":"GB Genjin (Japan)","ccbd8d97a61883e05eab21a5546188b2":"Heracles no Eikou - Ugokidashita Kamigami (Japan)","ccd0cf7cc240714a9694e1fe296afb7c":"Noobow (Japan)","ccd1192a634c3358352172abfeb7fb9e":"Caesars Palace (USA)","cd1fa506eea7590b0b24b6bdd153ffa9":"Bubsy II (Europe)","cd2caab38139f54145fc5a3ce1e01925":"Best of the Best - Championship Karate (Europe)","cd40bda7a113c2279d5ffd1cfa0cfdc7":"Jet Pack (USA, Europe) (Beta)","cd5b7ab41c9c5b1f0f70f4a736628dc0":"Ranma 1-2 - Netsuretsu Kakutou Hen (Japan)","cd5bd70c93494a58aa919d84eba8e77e":"F-Zero - Project (World)","cd6ca2a01e2310193c46afcbfa382ab5":"Hero Shuugou!! Pinball Party (Japan)","cd84cc505331f6a1d0702bb4a9667cec":"RoboCop 2 (Japan)","cd8eb18dec915d8e2ea73f097d33ba04":"Mouse Trap Hotel (USA)","cd9027e147f4605f26ee261c537441b3":"Pac-Man (Europe)","cdca15cfd1645c02fe1cc327b772264e":"Gauntlet II (USA, Europe)","cdd340a5f4e02c5d84d094fa0a06db1a":"Samurai Shodown (USA, Europe) (Beta) (SGB Enhanced)","cdf34991548f40dfc310d4fc763441f8":"G-Man (World)","ce2927987765182b9c69f26f758656e9":"Mortal Kombat II (USA, Europe)","ce9fbfc61ec6310a524cec0e89a9e487":"Trump Boy (Japan)","cea0e2a46ccbf9b9a77b14379e49228e":"Ninku (Japan) (SGB Enhanced)","ceaedf86193a8708a8a67e0e472b57fb":"Blues Brothers, The (USA, Europe)","ceb17d831b410d91aa41bf2819cbed82":"Mega Man V (USA) (SGB Enhanced)","ced7cc60f00d5bc4bcdc816aafe69be3":"Mystic Quest (World) (Fr) (Collection of Mana)","cee4efe750f6bb6ad685a9d1d912a1ca":"Uchuu Senkan Yamato (Japan)","cee6d41002411e7d8b8344eea2a3ded9":"Monster Truck Wars (USA, Europe)","cf189f7f8a35bd5838c102cd2126de46":"Renju Club - Gomoku Narabe (Japan) (SGB Enhanced)","cf1f58ab72112716d3c615a553b2f481":"Mortal Kombat & Mortal Kombat II (USA, Europe)","cf4e3f4ee5df2d68e978826ae564e1da":"Racing Damashii (Japan)","cf5be6d9c263d02039bfaae93c1bd32c":"Asterix & Obelix (Spain) (En,Es) (SGB Enhanced)","cf6ec3c13cd20240ef0c0c63ec06558f":"King of Fighters, The - Heat of Battle (Europe) (SGB Enhanced)","cf71ca9d27bb91c32cdcad09024b2457":"Koi wa Kakehiki (Japan)","cf975880261a3767a64a28cc4357966e":"Guns&Riders (World)","cfc7edbc95e8df5305d117c6993d5f20":"Fire Fighter (Europe)","cfee195bfd47e8e061ed67b9545242a4":"Power Mission (Japan) (En)","d0444abf63571f46cd080063f82a4452":"Robin Hood - Prince of Thieves (Spain)","d051557317b202cfb9b6667fc64a5426":"Jabberwocky (World)","d08bd44b4dd69e5eb7baf626cf5a7386":"Popeye 2 (Japan) (Rev 1)","d09f2f5306655baf5b910a5c115dd77c":"Legend of Zelda, The - Link's Awakening DX (Germany) (Proto)","d0a4d58a42b46b891d1c92d6af37f934":"Super Street Basketball 2 (Japan) (En) (SGB Enhanced)","d0b1c550250c859f4563165eb29033d6":"Rockman World (Japan) (En)","d112981290430c09b82d7fd7edfce0bb":"Purikura Pocket 3 - Talent Debut Daisakusen (Japan) (SGB Enhanced)","d11777331e12f55ae4bab2f6e0bda918":"Shanghai (USA)","d11d2dc76c6d743c3cc791104a2bdae2":"Jurassic Park (USA)","d120872ad4f5b3e67cc5561550f2d142":"Yu Yu Hakusho (Japan)","d12e226a7e1686e8dac9936361299624":"Mysterium (USA) (v1.00AI) (Beta)","d14502bcdcf71e9e16476b5077c03945":"Nettou Toushinden (Japan) (SGB Enhanced)","d17aa3dd0a52bc3dc03bfe20f27c8b07":"Booby Boys (Japan)","d1d01441dbc0baa83b23010cb60c687b":"Higashio Osamu Kanshuu Pro Yakyuu Stadium '91 (Japan)","d20d4b7e9f7299ac1f59c3130abb6e02":"Daiku no Gen-san - Ghost Building Company (Japan)","d21322204e66c5f40ab3a86cbb63fccf":"Mini Putt (Europe) (Proto)","d29cc1b6fe7709a6d16f00c779499de2":"Rugrats Movie, The (USA) (SGB Enhanced)","d2cfe884e32423402fb7c71e319cf4ed":"Super Black Bass Pocket 2 (Japan) (SGB Enhanced)","d2e1d465d372f9ee4d115a2c9bd1c497":"Jetsons, The - Robot Panic (USA, Europe) (Rev 1)","d2fa9c7a4c634949c42b3271365b6c7a":"Purple Turtles (World)","d300bf9412617a95b00b80fa468a8a04":"Alien Olympics (Europe)","d30c6595259d32038a56597d4ab7a3d2":"Auto Zone (World)","d310864869dca081fd30002548830051":"Q Billion (Japan) (En)","d32022e0c8eeb93bbbfed851d75788f3":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced)","d32b9da8028d357e20c791b07ded4f86":"Space Invaders (USA) (SGB Enhanced)","d335d4d79ed002c7a67863e82ceaa472":"B.C. Kid (Europe)","d345b97e4b43f20a01fa2e4ea4a63a2b":"Lethal Weapon (USA, Europe)","d38d79715b8ec31de8905f5d1312079e":"Namco Classic (Japan)","d39462c174c7ae4e15680301dbae1c35":"Double Yakuman (Japan)","d3b0f2fd8305d44173634ff52a5f7b37":"Kamen Rider SD - Hashire! Mighty Riders (Japan)","d3d63bf466e63af0601016f87ffc3ee2":"Vitamina Oukoku Monogatari (Japan)","d3fce7259e7768c7a6315b32a54cb32d":"Daikaijuu Monogatari - The Miracle of the Zone (Japan) (SGB Enhanced)","d4088d3239a9291e4e7bdb2119ad7708":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Joushiki no Sho (Japan) (Imagineer)","d413f826b00d3f2384555490d0f1271d":"Tasmania Monogatari (Japan)","d42a0f2f9205e81cbbbe132711d69d58":"Urban Strike (USA, Europe) (SGB Enhanced)","d44041e733ffa73dea5613f62f8e064b":"There's Nothing to Do in This Town (World)","d4792ed1687d50cf4c77afcab05a24bc":"Home Alone (Japan)","d4a7bd8598b050262ed6f553b45d5b3e":"Catrap (USA) (Beta)","d4bf4c5ebec2a496bb6ec062058158c6":"Nikkan Berutomo Club (Japan) (SGB Enhanced)","d4ce04db5f2e259967c01a8bbd9792fc":"Captain Tsubasa J - Zenkoku Seiha e no Chousen (Japan) (SGB Enhanced)","d4e7caf41d3a12facc5d7d5185631567":"Toy Story (USA) (SGB Enhanced)","d4ebf9cf10dda19dd2bafd1c1673d762":"3-pun Yosou - Umaban Club (Japan)","d4f7ade01af0818a79bc809cf96118bb":"Battleship (USA, Europe)","d4fddd965bb2192e2635d2202f59f999":"Mick & Mack as the Global Gladiators (USA) (Proto)","d5081250257e0dafcb8fe8720fcb9f28":"Game & Watch Gallery (USA) (SGB Enhanced)","d526aa32fb92d3721a16d79527bcacc1":"Zoop (USA, Europe) (Beta)","d5596fa64e5b0ff193feeac749b8be88":"Ferrari Grand Prix Challenge (USA, Europe)","d56d652d3b306345718ce657629d4a40":"Prince YehRude (Taiwan)","d57eeed4d5dede4b9aefd15c4c703113":"Game de Hakken!! Tamagotchi 2 (Japan) (SGB Enhanced)","d57f73c47aca3e22f4ea2143469ab20e":"Mani 4 in 1 - Bubble Bobble + Elevator Action + Chase H.Q. + Sagaia (China) (En)","d59add67965bacf227a0661797fc6405":"Traumatarium - Penitent (World) (Proto)","d5b242aff7e2008950611082f0b4edb9":"Stargate (Japan) (En) (Possible Proto)","d5c27ff8cb1b69cb56df4ff170e2baf0":"Final Fantasy Legend, The (USA)","d5f71894ebb36d4424de4207d9ecfa91":"Tuff (World)","d5f88d0799c85b6d59f12542da403691":"Choplifter II - Rescue & Survive (USA)","d63c397e5f6c81e4accc9114f75ee574":"Oni II - Oni Densetsu (Japan)","d6665854fdfe6d6d34c03b56d641d193":"Go Go Ackman (Japan) (SGB Enhanced)","d67e58bf5f39d5fb073fed85c3d9bede":"Adventure Island (USA, Europe)","d6cf6d5b5a86292d88116b9c4ebee091":"Medarot - Kuwagata Version (Japan) (SGB Enhanced)","d6d8e759c19c1ba384670f2a06b4d11b":"Battle Bull (USA)","d701029a9030339477ba4cca1ad3e9c9":"Xin Nushen Zhuansheng Waizhuan - Zuihou de Shengjing (Taiwan) (Pirate)","d736b55291d7dae4d9c3f1e74fbff0da":"Hudson Hawk (Europe) (Proto)","d74207329ee4b820f4b84455fc8181b7":"Little Tales of Alexandria, The (World) (MBC5) (SGB Enhanced)","d7569c3faaa4a657385c119e6b4a48c6":"Prophecy - The Viking Child (Europe) (En,Fr,De,Es,It)","d76ca0b687c813464743967c26b03278":"Gegege no Kitarou - Youkai Souzoushu Arawaru! (Japan) (SGB Enhanced)","d7bc88e01b7722082b3a5ae729de170e":"Go! Go! Tank (Japan) (En)","d7da0896f856630a011ac160589912ce":"Bugs Bunny Collection (Japan) (Rev 1) (SGB Enhanced)","d7fa04a91e492855f549dfe1f2c721f7":"Elden Ring GB (World)","d7fb01dec29a52de74e5b335b8619e0a":"Speedball 2 - Brutal Deluxe (USA, Europe)","d82114f0aadfc632cdc9d4c553b3cc7a":"Sanrio Carnival (Japan)","d8326bfee457ccb2c0afb8dd6ac11db2":"Amazing Penguin (USA, Europe)","d87fdb7009dece416655edf24ee19ede":"Mach Go Go Go (Japan) (SGB Enhanced)","d8ad8389c9ec44d4e3bacc88d7b7b1a9":"Jeopardy! - Teen Tournament (USA) (SGB Enhanced)","d8be915967fef85c4c53e205ede65b3c":"Sa-Ga 2 - Hihou Densetsu (World) (Ja) (Rev 1) (Collection of SaGa)","d8e5252704cf0681a7f737d599526591":"Bram Stoker's Dracula (USA, Europe)","d8e5f3f058b75b65ba86ae4e43e2986b":"Dracula Densetsu (Japan) (Castlevania Anniversary Collection)","d8f049e77238c17c5a91aef2bf300180":"Goukaku Boy Series - Kirihara Shoten Hinshutsu Eibunpou Gohou Mondai 1000 (Japan)","d8fafe7e8bf3d169d03b48ea23262fd5":"Mr. Do! (Europe)","d9290db87b1f0a23b89f99ee4469e34b":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (CGB+SGB Enhanced)","d9293475642991e942ac11262d8e5927":"Mani 4 in 1 - Genki Bakuhatsu Gambaruger + Zettai Muteki Raijin-Oh + Zoids Densetsu + Miracle Adventure of Esparks - Ushinawareta Seiseki Perivron (China) (Ja)","d939e5c1ce9436a548fcdd3938348ba1":"Osawagase! Penguin Boy (Japan)","d9774af8edb8969adfd3693d5d7ab166":"World Circuit Series (USA)","d97f34c22a179fb4094acbc05616f565":"Buster Bros. (USA)","d9bacb4b392a0ce4e8f9d29baa916b0b":"Pipe Dream (Japan) (En)","d9c82bf67ad459f08676a1c7cb9037f3":"Dodge Boy (Japan)","d9cb4470f5320cac32fc2bc17e1e9d7b":"Tetris Plus (Japan) (SGB Enhanced)","d9d957771484ef846d4e8d241f6f2815":"Wario Land - Super Mario Land 3 (World)","d9da15a5481fdc184d75c6d190d45fd3":"Hyper Black Bass '95 (Japan) (En,Ja)","d9e0e5c51f4a60855d701c3c9deec74f":"Mickey Mouse V (Japan) (Rev 1)","da11bf0e3d40d317a0d27a665b739bae":"Indiana Jones - Saigo no Seisen (Japan)","da7f9623e0d544196747cfd2b79b5e78":"Hayaoshi Quiz - Ouza Ketteisen (Japan) (SGB Enhanced)","daee829005d9c4bd5f636004bfffdfe3":"Red Arremer - Makaimura Gaiden (Japan)","db156bc96b528996ce1bf771195171af":"Final Fantasy Legend III (USA)","db24c76ac8d32cd23ce3a00519ba874f":"Lunar Chase (USA) (Proto 2)","db536d452c67b67722711ce45519015f":"Addams Family, The - Pugsley's Scavenger Hunt (USA, Europe) (Beta 1)","db8683de91dd039783618b0873f3960e":"R-Type II (Europe) (Beta)","db93fedeee04d4a18fd4251cdc93620d":"Kattobi Road (Japan)","db9e4e9d4a4b9f4e282448284ddea155":"Mini Putt (USA) (Proto)","dba637d1573394056a89cb97ec78000a":"WWF King of the Ring (Japan) (En)","dbb866351ae487d06c3d79f9ad641d0b":"Zagan Warrior (World)","dbe1e995af2f9c28a06fe5845f04da7b":"Super Momotarou Dentetsu (Japan)","dc2732dba9121aad355fa2e1dfbbb069":"Tecmo Bowl (USA)","dc2f4d927edda442de2148af590bebb5":"Addams Family, The (Japan)","dc3ef8d3fad26cba840327cc428cadbc":"Street Fighter II (USA, Europe) (SGB Enhanced)","dc79b733997e469e961e2d850448db23":"Hyper Lode Runner (World) (Rev 1)","dc8b474c2a31da3a494c80970d2892bf":"Tecmo Bowl GB (Japan) (En)","dca464649ea6a3969ac8ee834d431d44":"Motocross Maniacs (Europe)","dcabc0879c258e54048237d280ffa7da":"Paperboy (USA, Europe)","dcac90d51f56f90e26d41e7731de08ec":"Nanonote (Japan)","dcf52229dfd4c2d90d76577d9abf8e39":"Farm, The (World)","dcf79d785d5ce187f727f7dc2e00dc8c":"McDonaldland (Europe)","dd059180386c5d7b7b5c580d0e557a93":"Bung's Math Test (World)","dd0752e29d7754ae3249f32bf0352811":"Legend of Zelda, The - Link's Awakening (Canada) (Fr)","dd3b8a8023d8eb0c9766d42f78be4fb1":"Pachi-Slot Kids (Japan)","dd519f58f68e27b70c29cf19500a0154":"Ultima - Ushinawareta Runes (Japan)","dd5aa6e85827a3ce6e4b7500e75a3262":"Burai Fighter Deluxe (USA, Europe)","dd5d45d9f8722f8ded9ab85097daa4e5":"Captain America and the Avengers (USA)","dd762c593d517101b6a64407eac2f91a":"Rig Attack (World)","dd807bce8ce4a54a6bf40ff653beeaf8":"Pachinko CR Daiku no Gen-san GB (Japan) (SGB Enhanced)","dd83f27a43bc5d571c86f979aac2e1dd":"Impossible Gameboy (World)","dd846c4e076dd2f02fc3a4e2ecb6c940":"Koro Dice (Japan) (En)","ddb5bfae32b0ca39cf8ab6c46880126c":"Kirby's Dream Land 2 (USA, Europe) (SGB Enhanced)","ddce618f0a986b96960bc5f6f69e3415":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Kokugo Battle Hen (Japan) (Imagineer)","ddd4c08b975e78d77b00b56b85a7862d":"Goukaku Boy Series - Shikakui Atama o Maruku Suru - Rika Battle Hen (Japan) (IE Institute)","de0ff9f3ad6c9dfd3f83f18e5a931a77":"TV Champion (Japan) (SGB Enhanced)","de12e7c222ca5be9a1b1ea76ddc6c568":"Ishida Yoshio Tsumego Paradise (Japan)","de1572d4d181b265e2cb7d517c0ba04a":"Motocross Maniacs (USA)","de2236723c8d218e04c93849ebcda72d":"Quarth (USA, Europe)","de3860796170ee4ca80d302a5f024474":"Pachio-kun (Japan)","de6058a29141dd5b327070c7c7ba4196":"Kingyo Chuuihou! 2 - Gyopi-chan o Sagase! (Japan)","de64a15fb90fae1c179a0d32a5eb1390":"Goukaku Boy Series - Koukou Nyuushi Derujun - Rika Anki Point 250 (Japan)","de731a5f2f4e7d16bcdc4b5953ddcc12":"Makaimura Gaiden - The Demon Darkness (Japan)","de7c175933eb95ec5fd1bd7bdd7f7bf3":"Teenage Mutant Ninja Turtles - Fall of the Foot Clan (USA) (Cowabunga Collection, The)","de95d425f6a2836960f4ee2a9aa2f6f7":"Little Master - Raikuban no Densetsu (Japan)","deb601b4fadefb13f5e6251c945d10f4":"Kaijuu Ou Gojira (Japan)","ded0b53fcfcb2fc647982727cc8fa072":"Pocket Love (Japan) (SGB Enhanced)","ded286dc9fb5708292f01db0839e0102":"Brain Drain (Japan) (En) (SGB Enhanced)","dee2448aa2314e7b3c12849a053ea079":"Elevator Action (Japan) (En)","dee3e9698d8087aa884d95978d5efaa7":"Nettou World Heroes 2 Jet (Japan) (SGB Enhanced)","defe3559ef5e8d69ca95289edb6f9f6e":"Mario no Picross (Japan) (SGB Enhanced)","df43e0adfdc74b2829c7e95e91c71a28":"Penta Dragon (Japan)","df5835e45b4540087133af202f7d67f6":"Pang (Europe) (Beta)","df7478308fc20466e39ef7bd950048e5":"Pokemon - Red Version (Hong Kong) (SGB Enhanced) (Pirate)","df91ed711fb8553d034d4952c666b3c6":"Shougi Saikyou (Japan) (Rev 1) (SGB Enhanced)","dfca8240e0e90f741e8c32a5173ae9fb":"Tip Off (Europe) (Beta 1)","e00f66bff186e969f603a889dfa7e356":"Suzuki Aguri no F-1 Super Driving (Japan) (Beta)","e01b48974b0dcd4b7de479ac4d3d207c":"Tsumego Series 1 - Fujisawa Hideyuki Meiyo Kisei (Japan) (SGB Enhanced)","e01f6fcb9bacca86642744fa4003b349":"Doraemon - Taiketsu HimitsuDougu!! (Japan)","e04adfd64cd859c338c938a1107fbb31":"Bubblemania (World) (v0.7)","e07a8d8ac2a2770ea1a808ac517384cc":"Track & Field (USA, Europe)","e0a81dcc3aa0db3896c6f46e0ed3fc80":"Trip World (Japan) (En)","e0aadd04cf2c955ff60d9446b2b18931":"Parasol Henbee (Japan)","e0b6ff29d6f0fc5b7509b70cb7c0aca5":"Panel Action Bingo (USA)","e0b9dd8e504ec8e44d15b2bd0d8901a6":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Kanji no Tatsujin (Japan) (Imagineer)","e0e45a92aaf878544de84ef4867b8595":"Uoozu (Japan)","e102078685b4ecc91b4e844a922c33bd":"Nihon Daihyou Team France de Ganbare! - J.League Supporter Soccer (Japan) (SGB Enhanced)","e107e33ec2ce9a3f8e6e107f65abb070":"Konami GB Collection Vol.2 (Japan) (SGB Enhanced)","e10f788da29e18934c3e9161b25b96c7":"Gradius - The Interstellar Assault (USA)","e1254f4af3ba70f0937e92f14f04ac91":"Tenjin Kaisen (Japan)","e12c5c2897ed095f8d26c7578afddfda":"Ninja Gaiden Shadow (USA)","e15a6b601c845e425f62ef2b7aed691f":"Crystal Quest (USA)","e1b89445b1e8992d93319c52d4d7ca3b":"Arcade Classics - Super Breakout & Battlezone (USA, Europe) (SGB Enhanced)","e1b8b8158c54df9188d54c4d5331e53d":"Star Trek - 25th Anniversary (USA, Europe)","e1c096f4953421f7fedb767adb675ec7":"Medarot - Parts Collection 2 (Japan) (SGB Enhanced)","e1d28ce25a61b4f623c3c8013ce55b89":"Lucle (Japan, Europe) (En)","e1ea97584e0cf0d0f4187e1c6322da93":"Probotector 2 (Europe) (SGB Enhanced)","e202ee96a60ce347e39fe3f5d9fd65e7":"Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev 1)","e2133fc6f1d81ce8aa1c955c616dd1fe":"Trump Collection GB (Japan)","e220a0c5845b19bfc8c1f03bcef2f822":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced)","e22a670567858f46060c047defa01818":"Goukaku Boy Series - Nihonshi Target 201 (Japan)","e273c01531adf757ce6b3bc6d17afec2":"Foreman for Real (Japan) (En)","e27f25f72e2c4bea5d8cd51592852b08":"Jordan vs Bird - One on One (Japan) (En)","e2c928a942cd827b52499aa9fb148f9a":"Monster Race Okawari (Japan) (SGB Enhanced)","e2e76c7e50d4463f9e628df2933bb79a":"Pac-Panic (Europe) (SGB Enhanced)","e30ffbab1f239f09b226477d84db1368":"Pocket Monsters - Midori (Japan) (SGB Enhanced)","e31c6235113ed686705bf664219e87d9":"Nichibutsu Mahjong - Yoshimoto Gekijou (Japan)","e32f759ca399650f8a35535d0d815c23":"Pocket Bass Fishing (Japan)","e35d24f2a2b72255e0caadcfd131ce08":"Jimmy Connors no Pro Tennis Tour (Japan) (En)","e386e74a32c38938607dd9034e52ba6b":"Kiteretsu Daihyakka - Bouken Ooedo Juraki (Japan)","e39f8e545dadb5a6d77ca1487ae85c8f":"Tokyo Disneyland - Mickey no Cinderella-jou Mystery Tour (Japan) (SGB Enhanced)","e3b7b3649e52ee6aa6fd98baf88d50de":"Pac-In-Time (Europe) (SGB Enhanced)","e3b96773c7d55b3ee4c2615d1b9daca7":"Sengoku Ninja-kun (Japan)","e41aac285898754055eb3f0c3f280ea3":"Pierre le Chef is... Out to Lunch (Europe)","e44398f7ba16480c7cb9196b2fc6f568":"Learn and Play - Blackjack & Solitaire (USA) (Proto)","e46274f5c7a7e2f7816174e32da48fdb":"Card Game (Japan) (En)","e4ba52d3c6d5cd7aad2d3c398c9b7a0e":"Bubble Ghost (Japan) (En)","e4fcc98cf30ab2db7d3c08f322667be1":"Rodland (Europe)","e5124d0719d5429fe71a88db5fbd3b17":"Rockman 8 (Taiwan)","e5190278da9e7675533b2cfdbf5cffc4":"Spiky Harold (World)","e54042d63d3671719b95d311731c02e4":"Legend of the River King GB (USA) (SGB Enhanced)","e5511e9a5f0c709ba25df570eb5be41c":"Game & Watch Gallery (Europe) (SGB Enhanced)","e55ecbd33d5813fe6e9a4ca1d04e9f15":"Cyraid (USA)","e5876720bf10345fb2150db6d68c1cfb":"Jungle Book, The (USA, Europe)","e5936bbbf946f1959059c058318611fa":"Alley (World)","e5b64d0f6d48d325a3235109fc12fb12":"SD Gundam - SD Sengokuden - Kunitori Monogatari (Japan)","e5b790931cdb6308a1939239c707ab24":"14 Juillet (World) (Fr)","e5c07daa704a35dd105604286546d56e":"Death Planet (World)","e5e8910d436acb9fd218559a216501a3":"Wario Land II (USA, Europe) (SGB Enhanced)","e5eba5278bbc6e5f040649afe98a0af4":"Miner 2049er Starring Bounty Bob (USA)","e60b4e21a7357819b7602954ea517ea3":"Shisenshou - Match-Mania (Japan) (En)","e6104df1feb1318ff1764c791eb4ce0e":"Teenage Mutant Ninja Turtles III - Radical Rescue (USA)","e63bba411ca5d496bbb2a33a7ca22155":"Pineapple Kid (World)","e6410ff2286bc1aef2ce0de6fe04804d":"Pang (Europe)","e64c49a5280da30eceabdc3ed3852a88":"Soldam (Japan)","e6980267d58310af5ad57570045a95fa":"BattleCity (Japan) (En)","e6aecb5959f3435df9b4500dc54404f6":"Heisei Tensai Bakabon (Japan)","e6e0b97c6a3b80ab2e0a323e3d21a137":"Genjin Collection (Japan) (SGB Enhanced)","e6e405968face6a00abf3abf8514e9de":"GB Genjin Land - Viva! Chikkun Oukoku (Japan)","e6edabd28a9d6600f8b8e9707baa930e":"Roadster (Japan) (En)","e7305eeee86bd45eb4c9043b75199f62":"NFL Quarterback Club 96 (Japan) (En) (Proto)","e731fa23d9cd0c3d4dec7d5565beef61":"Bart Simpson's Escape from Camp Deadly (USA, Europe)","e76328b0795af8cd85a70e84c1ef4722":"John Madden Football (USA) (Proto 2) (SGB Enhanced)","e764267d68869ae2e7d6fdb37bb76f45":"Pocket Densha (Japan) (SGB Enhanced)","e76fb477ef0e8163e83f9fac15fff7e9":"Sumo Fighter (USA)","e7bcb3f5534c8363f855ba92d83cb2d9":"Baseball (World)","e7c39c38e03d89b5d0f5603f4592a35c":"Art School Pocket (World) (En)","e7c623c0bf954183b6e7eb2ccaef8348":"Thin Ice Rescue, The (World)","e7e0943cb9b8d6dd29c18e6a41e8d346":"Pocket Sonar (Japan)","e821ec4fe25c679efeb9676a129c2130":"Nobunaga no Yabou - Game Boy Ban (Japan)","e83411adccf5266f2deb263e67b68bc1":"Godzilla (USA, Europe)","e83a80a058fa5cfec4a16c1c2f3e0dd3":"Konami Golf (Europe)","e84971b95d5dbb25efaf4ea89564a1a9":"Football International (Europe)","e870bccbc307fb32228fa8e4545edf35":"Zettai Muteki Raijin-Oh (Japan)","e872272d9da777a9561b6e82f8b1d343":"Lion King, The (USA, Europe) (Beta)","e88eab57ab4614966748280bf3c97f52":"Avenging Spirit (USA, Europe)","e8d2a7833fd082f8cc62277d02e84a30":"World Bowling (USA)","e8db5b611f9bb6da2fffd9fc5a880472":"Fastest Lap (Japan) (En)","e90254b52fbb54f563697134efe57c15":"Ishido - The Way of Stones (Japan)","e904ad95019fad36decd3b8bae8b3f09":"Ishido - The Way of Stones (USA)","e928d1f7dfaff38abc7937a6e092cec4":"Magical Taruruuto-kun 2 - Raibaa Zone Panic!! (Japan)","e93f10168e3c9b9d18e3ad4a1415e1d0":"Pokemon - Gelbe Edition - Special Pikachu Edition (Germany) (CGB+SGB Enhanced)","e96273c4d399f1a9de58702aed110b4a":"From TV Animation Slam Dunk - Gakeppuchi no Kesshou League (Japan) (SGB Enhanced)","e9685452a74e7d13fa6ae9996de7138e":"Kitten's Getaway (World) (Es)","e96f49c4201d851574f0cfba1c619f42":"Commodore 16+4 Pack (World) (Demo 2)","e977b90b7b582de86068a6b0e6c5b16c":"Ninja Taro (USA) (Beta 2)","e98c2c5e838713bc68be569c295a14a0":"Otto's Ottifanten - Baby Bruno's Alptraum (Europe) (En,Fr,De,Es) (Beta)","e9ab23a96409060054a05344b536b33c":"WordZap (USA)","e9cee6ad037e8d96c84fb9d752120d4b":"Turn 'Em Off (World)","ea0be44bb573550d7ea0ee91232ebdc8":"Selection II - Ankoku no Fuuin (Japan)","ea48475ec24fd803715169265abf1dfd":"Mick & Mack as the Global Gladiators (USA) (Proto)","ea82922267095a2268d76e4f21d4ff93":"Top Ranking Tennis (Europe)","ea8d9e89565ff9e931118b9ea4712c29":"Franky, Joe & Dirk - On the Tiles (Europe) (En,Fr,De,Es,It,Nl)","eabbef967167719c2afda1d635550096":"Nanonote (Japan) (Rev 1) (Beta)","eb23450a50f1eeff27b33c988f2d779e":"SD Hiryuu no Ken Gaiden (Japan) (SGB Enhanced)","eb2c8695b903c45611c9faa43ca1b2ab":"Retroid (World)","eb41c29d9526e5f24f590d16f7bd33b8":"High Stakes Gambling (USA)","eb43c1df87041d6b82e789a2b46927be":"Uchiiwai - Kyoudaijingi no Puzzle Game (Japan)","eb4c1f70056aac7a767e6eb790b2fa30":"Looney Tunes Series - Daffy Duck (Japan) (En) (SGB Enhanced)","eb57688da8812dee7c813954dee175ce":"Madden 95 (USA, Europe) (SGB Enhanced)","eb771fb255fa207a830df06338af6d87":"Nekketsu Kouha Kunio-kun - Bangai Rantou Hen (Japan)","eb8a2ee6284c53c81329479feaa28a7f":"Mortal Kombat & Mortal Kombat II (Japan) (En)","ebd1866dc6c13ca48f45538ed33ea46f":"Rolan's Curse (USA)","ebdb99bf19c9066be71485c3c9187b82":"Super Chase H.Q. (USA, Europe)","ebe0742b472b3e80a9c6749f06181073":"Pokemon - Versione Blu (Italy) (SGB Enhanced)","ebff9863f1ca3d748977ab79bf8b775e":"Teenage Mutant Hero Turtles III - Radical Rescue (Europe) (Rev 1)","ec4b05b3483b384691886febffdd7a77":"World Cup 98 (USA, Europe) (SGB Enhanced)","ec68e96f47cff2c1a9beae89cdf1c146":"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (Beta) (CGB+SGB Enhanced)","ec8dfc2600756d4ff306eedcd03defd2":"Battletoads-Double Dragon (Europe)","ec8ec90cb60ec839f485208f141293cb":"Super Connard (World) (Fr)","eca9fe803d60ff7f1b8a740a1accc63b":"Star Trek Generations - Beyond the Nexus (USA) (SGB Enhanced)","ed0a8885341ee6a201873b2038c87582":"Simpsons, The - Itchy & Scratchy - Miniature Golf Madness (USA, Europe)","ed236aafb435db5624611939e9581894":"Caihong Zhanshi - Rainbow Prince (Taiwan)","ed2444afe317452e29c1c2258da6963c":"Adventure Island II - Aliens in Paradise (USA, Europe)","ed5525a71dda6eaf4bbf8d5601b6b3b9":"Aladdin (USA) (SGB Enhanced)","ed5b453f823dda545be8fe4db0954934":"G-ZERO (World) (v2.6)","ed7318b615b0a827f3edcff0c817caea":"Skate or Die - Bad 'N Rad (USA)","ed999967209a4cbcaa844b8a84e09ea9":"Serpent (USA)","edfd07c3e47abffaae2441d75110d4a7":"Shin Nihon Pro Wrestling - Toukon Sanjuushi (Japan) (Sample)","ee81c7d7481bb6db26bef691bf9d5645":"Wheel of Fortune (USA)","eecabc069331ce1512cba30442ad2980":"Mysterium (USA) (v1.00AU) (Beta)","eecf87a2c5dbf9f8d2af9976b0f01f4e":"Tokio Senki - Eiyuu Retsuden (Japan)","eed84ed6a1a34809832ac6de11a9ea89":"Action Replay Pro (World)","eee449a4c33f41681d0c44feeb91ac91":"Toxic Crusaders (USA)","eef71c64f1a51f5e32ab4e6e5e2cc5e8":"Tintin in Tibet (Europe) (En,Fr,De,Nl) (SGB Enhanced)","ef2f6c817d762dab848362c4cf7c1c32":"Fastest Lap (USA)","ef6f92c23b5d2be7db647b7d6152ec13":"Trump Boy II (Japan)","ef84a328b1c87d22448accdb713a2329":"America Oudan Ultra Quiz Part 3 - Champion Taikai (Japan)","efa067c7aaed8dd19777443db9228516":"Asterix (USA) (Proto 2)","efaf761d789e9f6e7cddf81b500576d8":"Final Fantasy XI Adventure (World)","efc276516b3ceea0d291b49271b95bcd":"Shuyaku Sentai Irem Fighter (Japan)","efe060ea92c1815417d7fc12005d6afd":"Sea Battle (Europe) (En,Fr,De,Es)","efe8efadcf735ffa0f0bf85f1b1c5f7e":"Zuigao Jimi (Top Secret) (Taiwan) (Multicart Rip)","efee88a2a4d0a7b9f5b886df04422017":"World Ice Hockey (USA) (Proto)","effbaf8c4b83edfebbe6451df0d44fd1":"Soccer (Europe, Australia) (En,Fr,De) (SGB Enhanced)","effe72b5d666de4ba54d3f4d5f89c87b":"Cuthbert in the Cooler (World)","f04f23d228f03311545b1b3bb9b3b73c":"Chessmaster, The (Japan) (En)","f0551f45075ca99a762c292f13e42422":"Mysterium (Japan)","f05959d91b9cb0ccfd8493351db3eccc":"Knight Quest (Japan)","f062ae2eb1223f784d4c81607c1b4adb":"Lost Knight (World) (Proto)","f064bd662fdcb40a9f6926cc3baee116":"Dennis the Menace (USA)","f07094cb4398c3670d1da2f704895b95":"Shougi Saikyou (Japan) (SGB Enhanced)","f07ed24e96f84ce78787709f248263c8":"Flintstones, The (USA, Europe)","f0c0599f8d8a18b1adcbe6e79d8d936a":"Monster Maker - Barcode Saga (Japan)","f0da8b1cff3aab898ecde9dcbda6d817":"Pokemon - Edicion Amarilla - Edicion Especial Pikachu (Spain) (CGB+SGB Enhanced)","f155c9c04ef01a99b26478c1121c8069":"Mega Man III (Europe)","f1724349b22aa4f3a3e6c30d97117040":"4-in-1 Fun Pak (Japan)","f1dbc21b1b8f8dcbe9a15bc9ef68fb9c":"Daffy Duck (Europe)","f213c0040e067cfae27c3fe90143b7c3":"Power Pro GB (Japan) (SGB Enhanced)","f214ebedb198f539230c4738cc644109":"Konamic Golf (Japan) (En)","f246a7acd295b25519cb5ec45df68fbc":"B.C. Kid 2 (Europe) (Beta) (SGB Enhanced)","f24ccb89c3ff60f54600d7b063d5a6c2":"Battle Pingpong (Japan) (En)","f28ade3926852a8ad2e449c274683956":"Mole Mania (USA, Europe) (SGB Enhanced)","f29d7dc8d22c317bb7c17a7bbdc24ec6":"Dragon Ball Z - Gokuu Gekitouden (Japan) (SGB Enhanced)","f2de4c011304bf6edd31e5911e3141ec":"Little Mermaid, The (Spain) (Proto)","f31c556186b91cf161ecf60644fbecba":"Momotarou Dengeki (Japan)","f3580f0bfcc3b39d94eee79820c9946d":"Cosmo Tank (Japan)","f35a1d453fa4287ffc6fc070fd11dc2e":"NFL Quarterback Club '95 (Japan) (En)","f391c76a46776967729b8607b4a3aacb":"Ultima - Ushinawareta Runes 2 (Japan)","f395f7b8ce24e6da365b843adf7d763e":"New Chessmaster, The (USA, Europe)","f3c6246db6dd47701435e0ede493b975":"Pocket Shougi (Japan) (SGB Enhanced)","f4352b697190fccadd9d07657376da5e":"Cosmo Tank (Japan) (Beta)","f44bd95417b6a3d229282b0f5fb9bd53":"Tsumeshougi - Kanki Godan (Japan) (SGB Enhanced)","f45935911e4d033f611cd50ef61d5d40":"Robby's Day Out (World)","f45caca57f16d21ff0fd7aa431fe4b6a":"Velious - Roland no Majuu (Japan)","f46e92b09399dfbf575aa48b8999a188":"Donkey Kong Land 2 (Japan) (Proto) (SGB Enhanced)","f489b8eb7dc88a39842f20a7f7165e5b":"Marble Madness (USA, Europe)","f49fef0c5cc023462d7f84286dc19976":"Frisky Tom (Japan) (SGB Enhanced)","f4c0bf35939be6786c099e9eb4635919":"Kirby's Star Stacker (USA, Europe) (SGB Enhanced)","f4c4fca9e816c1fee2e0d09026a2ea29":"J.League Live 95 (Japan) (SGB Enhanced)","f4e5b89f72cf88c203d8f66c627acd91":"Palamedes (Europe)","f5155252ff84ea0f708154cfe46a31d7":"Marmalade Boy (Japan) (SGB Enhanced)","f5357ab80e3838c58668d9d394962f48":"Deep Forest (World) (v1.1)","f57101bf26e140991a4e2f50a968ce7c":"Othello (Europe)","f597728869d7ca129f507e723d17bca1":"Vegas Stakes (USA, Europe) (SGB Enhanced)","f59dbce4cf5b51a5241806e1b35301fb":"Gremlins 2 - The New Batch (World)","f5d9206e1a5f8b42485e4dd431a5a2d4":"Nemesis (Japan) (En)","f5e132763e20e45f407258d3c6ec0c61":"Super Hunchback (USA)","f6095c118f8bb0ffd353be0a00a30449":"Final Fantasy Legend III (World) (Collection of SaGa)","f60fd654e4998e42b1aa53845a584220":"Konchuu Hakase (Japan) (Rev 1) (SGB Enhanced)","f629f0b6d156bec6acb9e6b9da4ad4e3":"Addams Family, The (USA)","f67d293f77a27de481c7541d6021a659":"Chou Mashin Eiyuu Den Wataru - Mazekko Monster 2 (Japan) (SGB Enhanced)","f683f5e516c1f267d4d16dc0e697f746":"Pac-Panic (Japan) (En) (SGB Enhanced)","f6901ba2ac671a063299da419058f838":"Shark Attack (World)","f6b898bfaa367ac1b0782a363cd098c7":"Pac-Man (USA)","f6c1715b8b93356b8b8ad27f5574dc96":"Beetlejuice (USA)","f6c52e1dc73cffcbcbd9958008f6db06":"Foreman for Real (USA, Europe)","f6ce41f073f04954cd0f14fce720a03c":"4 in 1 (Taiwan) (En,Zh) (4B-003, Sachen-Commin)","f7094136499601a6e45db03d1edb98b8":"Mickey's Ultimate Challenge (USA, Europe) (Beta)","f70c60ca87714fa9d81be60c9ac93de0":"Balloon Kid (USA, Europe)","f711ed10307d4ea27223fe965595b123":"Kirby's Pinball Land (USA, Europe)","f72ba137f679bde064e2e4e644c69b22":"Riddick Bowe Boxing (USA)","f75fde95c0c8e957c9fe76d546e5180a":"Meitantei Conan - Giwaku no Gouka Ressha (Japan) (SGB Enhanced)","f777a4526089a83ca758efbf01007ec1":"Aerostar (USA, Europe)","f7816c22aa5d1467a95e08046d85d534":"Casper (USA) (Beta)","f78e6574ba56879c9333b3aa60278721":"Adventures of Rocky and Bullwinkle and Friends, The (USA)","f7a896711997ea35d4f79f37ac0890bb":"Monopoly (USA)","f7aa9880db8e7884618ff0dcab6fba85":"Battle of Kingdom (Japan)","f7c384e29738c21ef611d45e5d35b4b9":"DMG Deals Damage (World)","f7caa11fcb8be738e1fd584ac8aad215":"F-1 Spirit (Japan)","f7d266bc81c150796ae373bddd0a9a84":"Mickey's Ultimate Challenge (USA, Europe)","f7eba1c53b02624852daea423a71c4ea":"Wishing Sarah (World) (Pt-BR) (v1.1)","f88a0df4f77f415235bf6c83eb39709c":"Koukiatsu Boy (Japan) (SGB Enhanced)","f898ddf750d2c10675a1c3bb1b306e1b":"Pac-In-Time (Japan) (En) (SGB Enhanced)","f89a33de3fa660a13ec29bb323efffa9":"Bionic Commando (USA)","f89f14b54db224ab47ebe8a0d6077a3e":"Don't Call Me Mama But Yes I Am Your Mama (World) (v2.0)","f8adc92b72483f92a40ebe0df7117907":"Soreyuke! Speedy Gonzales (Japan)","f8b0f3889fc7b9936f7e556a3f73825f":"Ranma 1-2 - Kakugeki Mondou!! (Japan)","f8c225bb04abaf8d22fc5d5ee999e35d":"Star Catcher (World)","f8d92a05c7be07964824830e9ce3ff30":"Skate or Die - Tour de Thrash (USA)","f91bd5edf950b0d70ddff98c1aa49f30":"Chibi Maruko-chan 3 - Mezase! Game Taishou no Maki (Japan)","f9302265fcbc4178c84aaeac3138af97":"Wild Snake (USA) (SGB Enhanced)","f9445b104ebb70d8fb91c8c64452c0a4":"Wizards & Warriors X - The Fortress of Fear (USA, Europe)","f97902058640f3700b5acff422969ba3":"GB Basketball (Japan) (En)","f98a6ce8e8065e351693098e906bd32e":"Goukaku Boy Series - Koukou Nyuushi Derujun - Rekishi Nendai Anki Point 240 (Japan)","f9a6af7c1041424cbcbe79822d7dab0c":"DX Bakenou Z (Japan)","f9b37fd741ee5eed62355f11afb52bcb":"Flipull - An Exciting Cube Game (Japan) (En)","f9e94b9a134d900a3b971e206f4e826c":"DragonHeart (USA, Europe)","f9f226d0534e8152b280388e39573e92":"Loopz (World) (Beta)","fa2a6cfad08c5023543da193ade69a0f":"Hiryuu no Ken Gaiden (Japan)","fa2b11931da462c4d34095987c4a0264":"Genesis 2 (World)","fa4af656b09274e5b8139be0a3a39a2c":"Pinball Deluxe (Europe)","fa54481d628d2fc1f5da2fb3c3368c0b":"Goukaku Boy GOLD - Shikakui Atama o Maruku Suru - Joushiki no Sho (Japan) (IE Institute)","fa91adc7023e03f97ec36f66876a569e":"Bust-A-Move 2 - Arcade Edition (USA, Europe)","faacaf378b59452d81c4ef020f87db6d":"FIFA Soccer 96 (USA, Europe) (En,Fr,De,Es) (SGB Enhanced)","fab412c9028db22f8bcd71b6d7fe1997":"Rhythm Land (World)","faecef1fcbb6252afec06504e3393f4e":"Song of Morus - Ghostly Night (World)","fafbf122bf2fe17bcf883a7705c24049":"Swaplatformer (World)","fb0adff5efe92c9d3a26be9313bcc236":"V-Rally - Championship Edition (Europe) (En,Fr,De)","fb62e511419ff8ea89ee1cf558e7208a":"Chessmaster, The (Europe)","fb8540a7262842083991f4aa2a6330d5":"Kyoro-chan Land (Japan)","fbca46f59bd36388b116df8d1fece132":"Namco Gallery Vol.2 (Japan) (SGB Enhanced)","fbd26b166eb8a61c2617b878a22c204f":"Bokujou Monogatari GB (Japan) (SGB Enhanced) (NP)","fc2b347600edffc8e997a7fc75382873":"Navy SEALs (USA, Europe)","fc2d9eb9479543614b6e3d0d63c359aa":"Bomber Boy (Japan) (En)","fc39750f5dec8ad4789e6516dbe8357b":"Blockade (World)","fc84b2e016917d5b0e7de412d9f8c269":"Taito Variety Pack (Japan)","fc89ae96c911ba84a5539bcc180f8f79":"Rock'n! Monster!! (Japan) (SGB Enhanced)","fc9d18538596c136f4cc9fc64d044a76":"Taikyoku Renju (Japan) (En,Ja)","fcc37bc406eef113b046f564a9d2a449":"Super Battletank (Europe)","fcf00a10c3ee34acfec22445a7221daf":"Power Paws (Europe) (Proto 1)","fcfa7b01f96b5546defb6b3c739f4008":"Sa-Ga 3 - Jikuu no Hasha (Japan)","fd01cb80c21da79311461e8da0e97891":"Super Bombliss (Japan) (SGB Enhanced)","fd269fc744ac60b138f8b238e0bb5c34":"Dino Breeder (Japan) (Rev 1) (SGB Enhanced)","fd280448ae0f60bae1d10016a87fc1ed":"Zerd no Densetsu (Japan)","fd6bd52147792817cbddf37c454e8563":"Skate or Die - Bad 'N Rad (Europe)","fd72131f46eaccd71e987489f834c630":"Waifu Clicker (World)","fdab70df67c8941ed7b39a0405161545":"Lion King, The (USA)","fdcfe686cf4df461e870b6e53b2b5a8b":"Pocket Camera (Japan) (Rev 1) (SGB Enhanced)","fdd228f59ee0eb8b162054a330039b0a":"Game de Hakken!! Tamagotchi (Japan) (SGB Enhanced)","fe0ac40641bc533a4a011898c0c15139":"Sports Collection (Japan)","fe68b048f7f77454f73ddef30c16316f":"Turok - Battle of the Bionosaurs (USA, Europe) (En,Fr,De,Es)","fe739c4bfdf652af8d09ed778c429480":"Tsumeshougi - Hyakuban Shoubu (Japan)","fe78f234327f0293c653a1e5846cc777":"Out of Gas (USA) (Beta)","fe877b7ac3f3093144907f4c971fa940":"Uno - Small World (Japan)","fe9c96c1d212d9cbc7c6f25946a87059":"Sanrio Carnival 2 (Japan)","feaa1bbb7e532872cf1d37d80af6fdb4":"Mystical Ninja Starring Goemon (USA) (SGB Enhanced)","febead9c066474ccf390c92d84d7208f":"Legend - Ashita e no Tsubasa (Japan)","fecc3f5a95ccaec78f83892933d8159f":"Mickey Mouse (Europe)","fee2cfb63e4491e395b6f3438c48aca2":"Reservoir Rat (Europe) (En,Fr,De,Es,It)","fef106aa1596fe49144b02a837d7d9eb":"Shanghai (Japan) (HAL Laboratory)","fef3cb8003acb11ff75a2201bb517877":"Pac-In-Time (Europe) (Rev 1) (SGB Enhanced)","ff0033ceecd7562360c5d5d3cae76575":"Missile Command (USA, Europe)","ff22733a091e9d32596fbff8331153c6":"Pocket Battle (Japan)","ff3b9e42aa323ef0045a6000f6010764":"Maus, Die (Europe) (En,Fr,De,Es)","ff3e6d70d42987dd7f6214067dc83afe":"Double Dribble - 5 on 5 (USA)","ff76e39f9ea003242f0adda707c953f7":"Dead Heat Scramble (Japan) (En)","ff8ac71f09453b667856a8539192101f":"Ghostbusters II (USA, Europe) (Beta)","ff9196caa266ae36d409ce7e53ddc77a":"Another Bible (Japan) (SGB Enhanced)","ffa8642a18781fbe79df436a761a9775":"Ms. Pac-Man (USA)","ffb546c576fdbb14c2c62409ff53943d":"Perfect Blend (World) (v0.9)","ffed7cc94e45730f0acd41da998c6820":"Pachio-kun 2 (Japan)"} \ No newline at end of file diff --git a/lib/gemba/data/gba_md5.json b/lib/gemba/data/gba_md5.json new file mode 100644 index 0000000..0decc64 --- /dev/null +++ b/lib/gemba/data/gba_md5.json @@ -0,0 +1 @@ +{"0007d212d9b76a466c7ca003d50c8c74":"MX 2002 Featuring Ricky Carmichael (USA, Europe)","000d041c067efea777a6608fb4ec2b7a":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 7)","002dc5540ec997b98c1e8d29d3abfe24":"Final Fantasy IV Advance (Japan) (Rev 1)","003a6851c61cc1981427248d57ba41fe":"Trollz - Hair Affair! (Europe) (En,Fr,Es)","0041789771fab4154eb638b4bcc68641":"Broken Sword - The Shadow of the Templars (Europe) (En,Fr,De,Es,It)","0051c7b9d4a3908afea19da18813fcbc":"American Tail, An - Fievel's Gold Rush (USA) (En,Es)","0053467f8f43c893299c1c18a2e971d9":"Need for Speed - Underground (USA, Europe) (En,Fr,De,It)","005531fef9efbb642095fb8f64645236":"Fire Emblem - The Sacred Stones (USA, Australia)","0079f558708a0cc61d3d38c7134ee199":"Ochaken no Yume Bouken (Japan)","00843bdde7eb18498d7d112d27ad5fad":"Ace Combat Advance (Europe) (En,Fr,De,Es,It) (Beta)","00866e17ce947975d30efe48ad99628b":"2-in-1 Fun Pack - Shrek 2 + Madagascar - Operation Penguin (USA)","00aacdd2f31f592066ac2d8f214ae757":"Rushed Hack Job, A (World) (GBA Jam 2022)","00b3169c025d8000f8944e2e8b81c2b5":"Super Bust-A-Move (USA) (En,Fr,Es)","00bcc2d5347cf3012dd273b43ac39a6f":"Nakayoshi Pet Advance Series 1 - Kawaii Hamster (Japan)","00e44d439cdef2014c67ffced1cb90d7":"Scooby-Doo! - Unmasked (Europe) (Es,It)","00fc773fff582dc53604a7229f64e82f":"bit Generations - Dotstream (Japan) (En)","01356207595154e92efa8b97b6e48acd":"Dead to Rights (Europe) (En,Fr,De,Es,It)","01457d05d4601ceff3f6d27a31606c18":"ZooCube (USA)","01529e7a20314ab1479ab2b91ccfcf49":"Rugrats - Castle Capers (USA, Europe)","016707a7640c82c4258b6c1d8b98fc83":"Mezase! Koushien (Japan)","016fe71584c04d4b8725aafd3cbdac9c":"Bratz - Forever Diamondz (Europe) (En,Fr,Es,It)","01ad547e076252f97adddfce4a21f395":"Luggage Retrieval Officer (World)","01af1ed83c07af653edd6f6a314f1a3a":"X-Men 2 - La Vengeance de Wolverine (France)","01d53ae496ca36129f7a62ccf3ceed83":"Bible Game, The (USA)","01f08a55412611f51ce89a1b90b3af11":"2 Games in 1 - SpongeBob SquarePants - Battle for Bikini Bottom + Nicktoons - Freeze Frame Frenzy (USA)","01fd699b39a0ca8e84226f18cf8baee7":"No Rules - Get Phat (USA, Europe) (En,Fr,De,Es,It,Nl)","020411d3b08f5639eb8cb878283f84bf":"Yu-Gi-Oh! - Ultimate Masters Edition - World Championship Tournament 2006 (Europe) (En,Ja,Fr,De,Es,It)","02092dd27803fa0251728972f919f5d1":"Cronela's Mansion (World) (Demo 1)","022cc7ccc60272a2b773071ad448bba9":"Danny Phantom - Urban Jungle (USA)","023327fe6c7bf7b35334b347d7f9b4d1":"WWF - Road to WrestleMania (USA, Europe)","02472e367d05eca0ed719b865b5d30f4":"J.League Pro Soccer Club o Tsukurou! Advance (Japan)","0260c5c32bec282426882f5c127ed781":"Eyeshield 21 - DevilBats DevilDays (Japan)","0269f1346cfa7942f43039e12ac5f26c":"Stuart Little 2 (France)","026fbee1949b8508f7ef3f9f92cb1f74":"Yu-Gi-Oh! Duel Monsters International 2 (Japan) (En,Ja)","028807ea1e01c6645d38e228f6915a31":"Donald Duck Advance (Europe) (En,Fr,De,Es,It)","02a1d4f4efd3553d9a890cad60ad62c4":"Spider-Man - Battle for New York (Europe) (En,Fr,De,Es,It)","02a9fddd43013966303a043db1c0a479":"Harvest Moon - Friends of Mineral Town (Europe)","02c8b1b57f3de3f9d96c4c917a5a8f28":"Skyland (World) (Proto 1)","02ca69d4ca90bc8da7ca48d59bb0035d":"Spyro - Season of Ice (Europe) (En,Fr,De,Es,It)","02cae6ad10eb30da0f76cbd8ca994952":"Barnyard (Europe) (En,Fr,De,Es,It,Nl)","02cd66823b6666b956e0baeeab7ba161":"Kiwame Mahjong Deluxe - Mirai Senshi 21 (Japan)","02d54c3ed3daf9976f355c16fe8303fc":"Mini Moni. - Onegai Ohoshi-sama! (Japan)","02f233e3ae37bb9a9517291872720a1f":"Agoria - Ode to Fate (World)","02f23bf2f90126574bc0de0752bed485":"Duel Masters - Kaijudo Showdown (USA)","02fd4433f3dacbfd1c921a54909ac365":"Zoids Saga - Fuzors (Japan)","02fe9812bc5022835d55ce2ddfee95d7":"Agent Hugo - Roborumble (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da,Fi)","0309e2dda3ec19ee11c2afb0c22ff3ef":"Totally Spies! (USA)","03108469c51b6370782af9d436a67ca2":"Gyakuten Saiban 3 (Japan) (Virtual Console)","031c29c70dc451c121219816cfbbb527":"Mortal Kombat Advance (USA)","03795f6f703d32d889d97548b2ed70aa":"Made in Wario (Japan) (Virtual Console)","039975d2d1c2828a8b19b0ae0e679e3e":"Hudson Best Collection Vol. 5 - Shooting Collection (Japan)","03a47a034c02e457fb6f8412b81ae56c":"Sips (World) (GBA WinterJam 2023)","03aaa67fcb972ec6bce6f1c6863026da":"Hobbit, The - The Prelude to the Lord of the Rings (USA)","03b199db52c1470618faad2cf93eeea0":"Twin Series 3 - Konchuu Monster - Ouja Ketteisen + Super Chinese Labyrinth (Japan)","03beecd053b2ddf56341a6a981c561fc":"Crash Bandicoot 2 - N-Tranced (Europe) (En,Fr,De,Es,It,Nl)","03c4c5409d77c03a5e35a8adaff70158":"Commandos 2 (Japan) (Proto)","03deb68b670ebd258b9d7ef70288a9a2":"Uranus Zero EV (World) (En,Fr) (v1.1)","03e0114f2ed087104a007594d36f70df":"Monsters, Inc. (Europe) (En,Fr,It)","03e4df3b3506eee9173dffd6e5db4fce":"Findet Nemo (Germany) (Beta)","03eea2d57de9c16b5f10055e8e4e2893":"Summon Night - Swordcraft Story 2 (USA)","04105c845973df1d717b2487227f0fb0":"Fantastic 4 (USA)","041cd0228e12f003f9736fdad77cdbf0":"Catwoman (USA, Europe) (En,Fr,De,Es,It,Nl)","041face918f3fffb1548b336b09d9d47":"Super Mario Advance 3 - Yoshi's Island + Mario Brothers (Japan) (Virtual Console)","04244f72a9b8f17ee33e0b5bff2b8b1f":"Ninja Five-O (USA)","04507c08f149756e262017efd3df4bee":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 13)","04524b68642568798af10a69fc199aad":"Turok - Evolution (USA)","04613e49b4e7a8fd022b1fa51e664ae9":"Flashback Legends (France) (Proto)","04615a5e1b6aca1d2934c290cbd12cfa":"Sennen Kazoku (Japan) (Rev 1)","0476e1f73f413b9f5790663817c0082b":"Super Mario Ball (Japan) (Virtual Console)","04775a93461d24cf1a7e3346d244e516":"Advance Wars (USA) (Rev 1)","04786992d22b58a168d6ef2fb0ffb830":"Revenge of the Smurfs, The (Europe) (Beta)","047dffed50e17e1eaab78d69409b19bd":"Godzilla - Domination! (Europe) (En,Fr,De,Es,It)","0482081869f5b084ea0614ddb942cac7":"Shantae 2 - Risky Revolution (USA) (Proto)","04d7e6cd55b91ff493e8529fbcf82266":"Wakeboarding Unleashed Featuring Shaun Murray (Europe)","04da9867ce85b92598695f664bb96c7c":"Apotris (World) (v4.1.0)","05271b3c67aaa0a36fcdf723364a8c46":"Ultimate Card Games (USA, Europe)","0527c2edb2832e8d59baaa4c4fb7b1e7":"Ultimate Spider-Man (Europe) (Fr,De,Es,It)","052c742acf21757dcc5bbc9b75414c82":"Minicraft (World) (v1.2)","053cf73404dcc39be7cbd77c8e833150":"Rockman EXE 6 - Dennoujuu Gregar (Japan)","054223e916f9a4f543812ae795145cb5":"DK - King of Swing (USA)","054d89a31ca79c50638ee14e8d3185a7":"Wing Commander - Prophecy (USA)","055b47930ba47d234d91bdbf63dd974e":"Shin Kisekae Monogatari (Japan)","0599fd3ea49510898691c1b77b42f838":"Wilden Fussball-Kerle, Die - Gefahr im Wilde Kerle Land (Germany)","05ad07333f42c2e6f727ac6e72a1a5bd":"Play-Yan (Japan)","05b2267bdf77e3d36d0b96c22d3af844":"Tak 2 - The Staff of Dreams (USA)","05b82f996a7ebc44c62697b02833a68f":"Wade Hixton's Counter Punch (USA, Europe)","05bf1a8337fb6b000dc2b875e1da07c9":"Capcom Classics Mini Mix (USA)","05c54425438b4e1fb9944f380df39b4e":"Games Explosion! (USA)","05d2d50f8aac9d4d6e1889432e197167":"Shrek - Reekin' Havoc (USA) (En,Fr,De,Es,It,Nl)","05da8d783575896e54f15104f1e87035":"Kim Possible 2 - Drakken's Demise (Europe) (En,Fr,De,Es)","0632f298b6484b923c5e01d231ae4aa9":"King of Fighters EX, The - NeoBlood (Europe)","0635251b85657f9c1de295546da09aeb":"Densetsu no Stafy 2 (Japan)","0635910eceb7b59722a49c9d7d12bbc2":"Duel Masters 3 (Japan)","063f1a5c5dc09ce899c983db8cc28c01":"Super Bust-A-Move (Europe) (En,Fr,De,Es,It)","0644bdce94af8ec7e33f0aee1830b497":"Battle Network - Rockman EXE 3 (Japan) (Rev 1) (Virtual Console)","064b4a2a29134a638f4d38f3c3fd4b98":"Naruto RPG - Uketsugareshi Hi no Ishi (Japan) (Rev 1)","064db81169e3cb761c5702260039ae28":"Yaobai Senxigang (China) (Proto)","065b12ab5b43e941fa0011a5483a47df":"Secret Agent Barbie - Royal Jewels Mission (Europe) (En,Fr,De,Es,It)","0681007c0e1dafb25c4179b6b90e47df":"Rockman EXE 5 - Team of Blues (Japan) (Virtual Console)","0687fdac8b7fbc2d5147ec9f5f4d2525":"Ecks vs. Sever II - Ballistic (Europe) (En,Fr,De,Es,It)","068b542444b3ad28e75be4087a754b58":"Avatar - The Last Airbender - The Burning Earth (USA)","06a6d7cd07281747cfe0300700a960fd":"Batman - Vengeance (USA) (En,Fr,Es)","06ae9bc5a49c1f5edac5f5dbdd30882d":"ATV - Quad Power Racing (Europe) (En,Fr,De,Es,It) (Rev 1)","06bffd302bb341ef623d4cd53c4418c4":"Army Men - Sarge's Heroes (USA, Europe) (Proto 6)","06d6a0c54470197ffc3d0bde2dda591e":"Medarot Navi - Kabuto (Japan) (Virtual Console)","06de64363cfc09ab7e5bdf4b03bbf6ac":"King Kong - The Official Game of the Movie (Europe) (En,Fr,De,Es,It,Nl)","06ed08799b2f163076fe9fc0cfe65a4c":"Densetsu no Stafy (Japan)","06f7ff2db5abcbd59e4f4816b1890dd9":"Punch King - Arcade Boxing (Europe) (En,Fr,Es)","072f378e3ae2d271f384b886be067031":"Racing Gears Advance (Europe) (En,Fr,De,Es,It)","07397d508982f2c340c296d2c057db8a":"Texas Hold 'em Poker (USA)","0772dfd199bb5039a5d0cc5015d4af1d":"bit Generations - Digidrive (Japan) (En)","07826e89f368fdcfe22590d578b63b4b":"Peter Pan - The Motion Picture Event (Europe) (En,Fr,De,Es,It)","07930e72d4824bd63827a1a823cc8829":"Metroid - Zero Mission (Europe) (En,Fr,De,Es,It)","079f35bf49c4c64aca46ac5b82c358e6":"Family Feud (USA)","07acb26f244e6d36374607071369238d":"COVID Adventure (World) (GBA Jam 2021)","07c67caee98287f303193d837ebdb702":"Hajime no Ippo - The Fighting! (Japan)","07f3b7415eb3779ff11e51a38d0ad3f8":"Nicktoons - Battle for Volcano Island (USA)","080c58f12416fdf0d8b38ec61a976ca6":"Rockman & Forte (Japan) (Virtual Console)","081eb069af9e5cdc0cb7515a7249ba52":"Island Xtreme Stunts (USA, Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","0821eea9bf87804ec1d700ec458a04e5":"Urbz, The - Sims in the City (USA, Europe) (En,Fr,De,Es,It,Nl)","086490833184ca1c3f7db723c0a23995":"Hugo - The Evil Mirror (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da,Fi,Pl)","086699e25cfba633d8ffb16644d79e4d":"Matantei Loki Ragnarok - Gensou no Labyrinth (Japan) (Rev 1)","0870d28ecfd2761a2712e9185e094420":"Inky and the Alien Aquarium (World) (Demo 2)","087a7620a5c7b7f69e09fd3b97a68c2f":"Spy Kids 3-D - Game Over (USA)","0886eee57b5f9e97d2981a00134fd641":"Ed, Edd n Eddy - The Mis-Edventures (USA) (En,Fr)","08934127e26fa137f2f03d3cce3953e7":"Konjiki no Gashbell!! - Unare! Yuujou no Zakeru 2 (Japan) (Rev 1)","08a002ca5de6e28726c3d17644137b23":"Medabots AX - Rokusho Ver. (USA)","08a64ac42e0ac926269fd2c469f7c074":"Jonny Moseley Mad Trix (USA) (En,Fr,De,Es,It)","08aecb6882d9a73b2cac1316a5fbf31b":"Tetris Worlds (Europe) (En,Es,It)","08c41541eb69a1d652937ed3f88824be":"Mario Pinball Land (USA, Australia)","08d2fe71572e3537f2e7d7c08dab5707":"Extreme Skate Adventure (USA, Europe)","08d5c8e67cf1cdba2e55452c2e2414c1":"Game Boy Wars Advance 1+2 (Japan)","08eaf353e753e922e8bf05fcc9a87ac0":"Keitai Denjuu Telefang 2 - Speed (Japan)","08f6bb1a700cbf57c10872fa84354562":"Holy Hell (World) (Proto) (NEO Coding Compo 2012)","0915ac62d58a160028eb47141657013f":"F-Zero for Game Boy Advance (Japan)","091ea9b529fcc8e05b87091e21f749c4":"Super Dodge Ball Advance (USA) (Rev 1)","092721060c0261c13de6ade3e8c87854":"Lost Vikings, The (Europe) (En,Fr,De,Es)","092dbb8125cfbc93d55342f25277b08f":"World Tennis Stars (Europe)","09306558743c945883527d6c75faeda8":"GT Championship (Europe)","09467407b4d5e62508405f6ec518e6dd":"Meine Tierarztpraxis (Germany) (En,De)","0950578bcd454402624fa3a78a7ca76e":"Zoids - Legacy (USA) (Beta 11)","0966c86597b2644a5e7c66ec59e9edb8":"Mario Pinball Land (USA) (Virtual Console)","09698b7f688a00a7ac4a67a225c2181f":"Radicorn (World) (Proto)","098752d6f195ab8c34e0eebad3a0a779":"Fantastic 4 - Flame On (USA)","098ae1d09c30569e6059952e577dfbf8":"Mummy, The (Europe) (En,Fr,De,Es,It)","09963ea87f2efed0f73883e68def20f6":"Peter Pan - Return to Neverland (USA) (Rev 1)","09a4004a580a8fe679d227ce3cc70d8e":"Moorhuhn Jagd (Europe) (Proto)","09bc6ab258b83508be5e9a0eb11417d4":"Kim Possible (Europe) (En,Fr,De,Es) (Rev 1)","09bdbc2b8190566335b4c27cd20c8b8e":"Pyuu to Fuku! Jaguar - Byoo to Deru! Megane-kun (Japan)","09c14005c7e4914a54ca9f5cf7514992":"Broken Circle (World) (En,It)","09daae27c8d72f04ac2ea12d8a9cc89d":"Crushed Baseball (USA)","09daf6531ded19b7921367084e439b2f":"Final Fantasy VI Advance (Japan)","09e8523914aff2d72b1b4b840827829c":"Scooby-Doo and the Cyber Chase (Europe) (En,Fr,De)","09f49996195a3fce6141306f9eeb2944":"Dragon Ball Z - Supersonic Warriors (USA)","09fb223b7d964fe31b097574d54c3dd4":"Game Boy Wars Advance 1+2 (Japan) (Virtual Console)","0a05b2762f053783d9e1d20ed10a6b4a":"Cardcaptor Sakura - Sakura Card Hen - Sakura to Card to Otomodachi (Japan)","0a0f0c3f73ca585c19f516c7e45fda74":"Gambler Densetsu Tetsuya - Yomigaeru Densetsu (Japan)","0a17a5e983e3ae92e31d4661318271d6":"Wizardry Summoner (Japan) (Rev 1)","0a2726e1c0ecb255b88ca3085afc7891":"Double Game! - Cartoon Network Block Party & Cartoon Network Speedway (Europe)","0a3523db5fe9a0329d766d9d1ff5e654":"Gensou Suikoden - Card Stories (Japan)","0a4b60e0f15350b991624763526a85d1":"Mutsu - Water Looper Mutsu (Japan)","0a4da0bbdad29f2faa5584b49b0a4f5d":"Road Rash - Jailbreak (USA)","0a4f344622606fb7e6470c169cf934f6":"Rockman EXE 5 - Team of Blues (Japan)","0a6666fe761d4ee8421500c24abb7b20":"Zoids - Legacy (USA) (Beta 10)","0a7c58069d5390165482e88a22158bd2":"Yu-Gi-Oh! - The Sacred Cards (USA)","0a9938a6bb7b657a1fb2588b91900122":"Crazy Chase (Europe) (En,Fr,De)","0a9e96e8273142fc5ed60511a726a14f":"Hugo - Bukkazoom! (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da,Fi,Pl)","0ab0992240121f5e8f9a5d75aab79a15":"3 Games in One! - Yars' Revenge + Asteroids + Pong (Europe) (En,Fr,De,Es,It)","0ab2602d06da0ee5d87ac319495a78f2":"Cardcaptor Sakura - Sakura Card de Mini Game (Japan)","0acbc949fc02ec0abd9e1825c03b8973":"Mario Party Advance (Europe) (En,Fr,De,Es,It)","0ae1a89caba4997b5059eaf8f8763727":"2 Games in 1 - Alla Ricerca di Nemo + Gli Incredibili - Una 'Normale' Famiglia di Supereroi (Italy) (Es,It+It)","0af58674e0fef09ca529a0a27aecf17a":"Shrek - Hassle at the Castle (Europe) (En,Fr,De,Es,It,Nl)","0af8fb79e9986400fd05dacf0a4373e8":"2-in-1 Fun Pack - Shrek 2 + Madagascar (Europe)","0b061059fd5e7f7b034f96932c86829c":"Zelda no Densetsu - Fushigi no Boushi (Japan)","0b1290911e143ce7ce4f39472ac8b5ab":"Unfabulous (USA) (Beta 11)","0b2772662e6df22bd3e5dbb84d9d9e55":"All-Star Baseball 2003 (USA)","0b2ec6ac765cd16c2d080d02c7d51d54":"Zoids - Legacy (USA) (Beta 7)","0b4c94edc68ff0f0a18e09e5b11ed0df":"Mucha Lucha! - Mascaritas of the Lost Code (USA) (En,Fr,Es)","0b57d3560459bd31c60667ad64843343":"Battle Network - Rockman EXE 3 - Black (Japan) (Promo)","0b8e817c956bf56035c3a5c73174f81b":"Digimon Racing (USA) (En,Fr,De,Es,It)","0b95fb20b9f487eb64431e9db9f75c7f":"River City Ransom EX (USA)","0bb34790a91d40f7afc437c528102496":"SEGA Arcade Gallery (USA)","0be6c13af62a0f75651bb2acbc397a56":"SpongeBob SquarePants - Revenge of the Flying Dutchman (USA, Europe)","0bf5df84c040f7bd352bb87a352ee6b0":"F-Zero - GP Legend (USA) (Proto 5) (Netcard)","0c112fda9346a9851fa7cb72d80be501":"World Poker Tour (USA)","0c1605d8447bf69a74dbd715d5fbe70f":"Tetris Worlds (Japan)","0c1a0844349b59fca1de85b1992abdf5":"Megaman - Battle Network 6 - Cybeast Falzar (Europe) (Virtual Console)","0c3521dc74150b501aba964d4c2a0fc3":"Aggressive Inline (Europe) (En,Fr,De)","0c3d24b790a8212c779c85de3cde98a5":"Kirby & The Amazing Mirror (Europe) (En,Fr,De,Es,It) (Virtual Console)","0c3fe57084bbae258eac8830c90a0334":"Lea - Passion Veterinaire (France) (En,Fr)","0c4fd4cf211b2b712fd090ef1b95adfd":"Tetris Worlds (USA)","0c508e4785e89f25f5a746cba838ed4b":"Frogger's Adventures 2 - The Lost Wand (USA) (En,Es)","0c53ef6b66b0f6912a524659c3a068c6":"Boukyaku no Senritsu (Japan)","0c5d34497c80ce931a91238c54c7e668":"Super Dropzone - Intergalactic Rescue Mission (Europe)","0c8060d8231b01fb2b6670a5e059122d":"Sonic Pinball Party (Japan) (En,Ja,Fr,De,Es,It)","0cadd0fd31e704d01503d303b5da8341":"Land Before Time, The - Into the Mysterious Beyond (Europe) (En,Fr,De,Es,It,Nl,Pt,Da)","0cb9989beb289f843cdb69bb0bd8c8be":"Shining Soul (Japan)","0cb99d064f970b580a8f0c1b87bd643b":"Spyro Orange - The Cortex Conspiracy (USA) (Rev 1)","0cc444d5fddbd08af0663e9fb8694780":"Kappa no Kai-kata - Kaatan Daibouken! (Japan)","0cc6758258b584e51046b00139c50e60":"Bomberman Max 2 - Red Advance (USA)","0cd601f13be95043eb1bc10e3675f25a":"Need for Speed - Most Wanted (USA, Europe) (En,Fr,De,It)","0cf8afe8006793c1c96ade67e872ce84":"Advance Wars (USA) (Virtual Console)","0d1e88bdb09ff68adf9877a121325f9c":"Megaman Zero 4 (USA)","0d221d3ad421c62da3fe6af1ecd67381":"Megaman Zero 4 (Europe) (Virtual Console)","0d2a4b08c87137212ef39a4c7e9d44cc":"Polly Pocket! - Super Splash Island (USA) (DSI)","0d5f0320a5921f1fa6c74dd86234d305":"Monster Maker 4 - Flash Card (Japan)","0d6241bf502d0cef1ca57870a1024e72":"Lord of the Rings, The - The Fellowship of the Ring (Europe) (En,Fr,De,Es,It)","0d750defe01da931beb8148a71be112e":"2 Games in 1 - Cartoon Network Block Party + Cartoon Network Speedway (USA)","0d8f24fa168197a151eeb95fd29aef65":"World Championship Poker (USA)","0da2f962ed7fbca94e4ce57c643425c1":"uCity Advance (World)","0da9790131eb40950b8cea5e84f38953":"Demon Driver - Time to Burn Rubber! (Europe)","0dbc85a954aba764a3bbae2e078d26f0":"Shin chan - Aventuras en Cineland (Spain)","0dc8a17af87706f54db5b78f02c5ad12":"Miteluode Ronghe (China)","0e24f5e435b0cf651017103de24f4f92":"Astro Boy - Tetsuwan Atom - Atom Heart no Himitsu (Japan)","0e2e6304b6f04d7b878f05c22f6b5ab1":"Animaniacs - Hollywood Hypnotics (Europe) (En,Fr,De,Es,It) (Proto)","0e3ed3a6cc2f201897c58cb31d43a35f":"Rockman EXE 6 - Dennoujuu Falzar (Japan)","0e4ba41493f33cf33f6f29541ed82b9a":"Army Men - Sarge's Heroes (USA, Europe) (Proto 1)","0e66f9dc9c29a3a11f2a821bcc809251":"WWE - Road to WrestleMania X8 (USA, Europe)","0e7e7ed17b4e8e4d09e166d3bd923b40":"Namco Museum (Europe)","0e86c0c284f2ce03ed28359a765a66ce":"LEGO Bionicle (USA) (En,Fr)","0e9df95d854d56a7bed63b79bab40bc1":"Cars (Europe) (Es,Pt)","0ea86808a1e0201968357e8b9bf282e8":"Tweety no Hearty Party (Japan)","0eadc5200158c854c27a5bf463a1d033":"S World 3 (World) (Beta 4)","0eb87d04c5be8ab25e8f2cf211650683":"Samsara Naga 1x2 (Japan) (Rev 2)","0eb8e248dac5b8f9730d818617ed54f4":"3 Games in 1 - Rugrats - I Gotta Go Party + SpongeBob SquarePants - SuperSponge + Tak and the Power of Juju (Europe) (En+En+En,Fr,De)","0ec6477593e4c9273b91676e464488f6":"EZ-Talk - Shokyuu Hen 5 (Japan)","0f0382627e439cf2f308986e3e921a28":"Hoshi no Kirby - Kagami no Daimeikyuu (Japan) (Rev 1) (Virtual Console)","0f424c61285bfee9a940bc9aa47c61bf":"Discrete Orange (World) (Demo 1) (GBA Jam 2024)","0f6fd5c281dc18e32045e79306587170":"Unfabulous (USA) (Beta 3)","0f796b33898e0f7c3b001136e6a1c28b":"Pocky & Rocky with Becky (USA)","0f7f9dc0c967029f8686ece3b9385c71":"Over the Hedge (Europe)","0f82bb24585c9ec64e99394c9d316315":"Rockman EXE 4.5 - Real Operation (Japan)","0f8ed17d661f50fd1c09d07e54f88f31":"Google Dino Advance (World) (v1.0.1)","0fd6897002244985cab200501e1b48c9":"Dragon Ball Z - Taiketsu (Europe) (En,Fr,De,Es,It)","0ffa05e57cfeeca8807b62578fd80fb1":"Open Season (Europe) (En,Fr,Es,Nl)","100579ef01225c620560f88e65ca423a":"Sonic Battle (USA) (En,Ja,Fr,De,Es,It)","101b2628c6eabbb3caa36a5dd9a309e5":"International Superstar Soccer Advance (Europe)","101c1c8ed0ca51da145b101c8a42b0eb":"Galidor - Defenders of the Outer Dimension (USA) (En,Fr,De,Es,It,Nl,Sv,Da)","10242132aa289781c1857954e832c0be":"Anguna - Warriors of Virtue (World) (Demo 1)","102ca19e193b7727645c3ba2302dcf22":"Codename Hacker (World) (En,Fr)","1040f372f0d2ed64f01e582dffa6d89b":"Tiger Woods PGA Tour Golf (USA, Europe)","105c79c9b8c04f2807a0ef1c1aaebf6a":"Wer Wird Millionaer (Germany)","1070a9c7392722b1224f6da39096598e":"Madagascar (Japan)","10860572e5479bbaa1e790d1fa027207":"Darius R (Japan) (En)","10974dab2afea1b3d981568451fe60da":"Super Ghouls'n Ghosts (USA) (Virtual Console)","109b5dab2c9472d26e9b68cabfac0d4f":"Crouching Tiger, Hidden Dragon (USA) (En,Fr,Es)","109bcd4625fe28c0424ed0d1300b7933":"2004Mbit Competition (World)","10aad86c227ca97ae5c66117c6452ca0":"Happy Dawn (World) (Demo 1) (GBA Jam 2024)","10d14cbd9d43d2c4d59da9a7ee64ba95":"Care Bears - The Care Quest (USA) (En,Fr,Es)","10e33fd51bac0b0c3523eddbcd0eaf56":"Sangokushi (Japan)","10e47426da21bd7ba064a388c8498fdb":"Hot Potato! (Europe)","10e701d275bb9b34b4c451bf8a611495":"Crash Bandicoot Bakusou! Nitro Cart (Japan)","10ea584b14960348548e8528202968f1":"Famicom Mini 16 - Dig Dug (Japan)","10eaeb09b2a583574fd0c7f416c68f82":"Nicktoons Racing (Europe) (En,Fr,De,Es,It)","10ebb8e13d6639e9425d172888389fa0":"Sabrina the Teenage Witch - Potion Commotion (Europe) (En,Fr,De,Es,It,Nl)","11100f0c82de617894a90b0fa70b7e63":"Wild Thornberrys, The - Chimp Chase (USA, Europe)","111715b064a0de33d49034937dbc48d8":"Tony Hawk's Pro Skater 2 (Germany)","11289eeb3326a826cda771cee60b6b7f":"Freekstyle (USA)","113022c562fbd4eb723341b4b05cc7ec":"Twin Series 5 - Mahou no Kuni no Cake-ya-san Monogatari + Wanwan Meitantei EX (Japan)","116db73b6b497253e887e4ee46b4fe3c":"Koala Brothers - Outback Adventures (Europe) (En,Fr,De,Es,It,Nl,Pt,Da)","1176113fe66cf20d5d00def9fbda8c20":"Bratz - Rock Angelz (Germany)","1191848184916ade8df270fa27d2555f":"Pokemon - Versione Rubino (Italy) (Rev 1)","11a1c991749ededfce2cef42e1019cc7":"Hagane no Renkinjutsushi - Meisou no Rondo (Japan)","11beb7fd8ce6c8a3d4987274835e0843":"Ultimate Spider-Man (USA)","11bfeb390128b3fa4af1e92399a9bd3f":"Barbie in the 12 Dancing Princesses (Europe) (En,Fr,De,Es,It)","11c77b84b23817cda21c24bc7ddd2605":"Masters of the Universe - He-Man - Power of Grayskull (USA)","11cb293eb98b1d7bab027cda8777c98e":"Ice Age 2 - The Meltdown (USA)","11e59f830fec5702011173cac6c9c7d9":"Madagascar (Europe)","11fd08b9d7b232deef2519e951c65859":"2 Games in 1 - Disney Principesse + Koda, Fratello Orso (Italy) (It+En,Fr,De,Es,It,Nl,Sv,Da)","1205d76449958f1d204f380499c7cfff":"Snood 2 - On Vacation (Europe) (En,Fr,De,Es,It)","1207a415c9acfbd206e5580f34e73ba2":"Foster's Home for Imaginary Friends (USA)","120cf0c4d430cf9de20071a249db62f4":"Zero One (Japan)","120fe8f60008ed371a40843dfad39cf6":"Zoids - Legacy (USA) (Beta 4)","121fd8e5e64ff91db0e14ea991de4625":"David Beckham Soccer (Europe) (En,Fr,De,Es,It)","1227eebff87a8b9d5e713e20cddcb468":"Gradius Advance (Europe)","122ec4309cb7aa7a13f880de1ec3e703":"2 Games in One! - Paperboy + Rampage (USA)","123978146274e2c7711209aba22ee244":"Over the Hedge (USA)","125cdf912a55210d086d73bbd4b40f5b":"Mother 3 (Japan) (Virtual Console)","1266f7f9d73252d70b25ebfe966c9a2b":"King of Fighters EX, The - NeoBlood (USA)","128f71aa30e3435283df66b77a361672":"Power Pro Kun Pocket 6 (Japan)","12b7a60b8faba2b44b1fdf1396578037":"Fairly OddParents!, The - Shadow Showdown (Europe)","12bfe2b37eb53eec924ca2a697fc9924":"Madagascar (Netherlands)","12d9fcae83c5295aac6da015b75a24d6":"3 Game Pack! - Candy Land + Chutes and Ladders + Original Memory Game (USA)","12e67891bd86b4b417b7462d7ee891ef":"From TV Animation One Piece - Nanatsu-jima no Daihihou (Japan)","12ea1887210dfa6164d7cbeae7573a48":"Final Fantasy I & II - Dawn of Souls (Europe) (En,Fr,De,Es,It)","12f06df6ff6d6895dc87665fc4c79144":"Tom and Jerry - The Magic Ring (Europe) (En,Fr,De,Es,It)","1319babf77cdb73c904364bf354f7595":"Choro Q Advance (Japan) (Rev 1)","13282333ff803c7c525e5512019fbb51":"Nakayoshi Pet Advance Series 2 - Kawaii Koinu (Japan)","132ac906d53969643a2a117425a7bcb5":"Donkey Kong Country 3 (USA) (Beta)","13682a498effaef25aaaad9ac02cb4c0":"FIFA Soccer 06 (USA, Europe) (En,Fr,De,Es,It,Nl)","136d8ce4db69b232133585f3bac449be":"Action Replay GBX (Europe)","138a71a5be83f3f3d7af3d31916a5fc7":"Pocket Monsters - LeafGreen (Japan)","138f9df1c5d9c7cb0b28760f92a4698e":"Nakayoshi Pet Advance Series 4 - Kawaii Koinu Mini - Wanko to Asobou!! Kogata-ken (Japan)","139b7e51d2f49dffeede13e464bafeea":"SimCity 2000 (USA)","13fd90ae7070ba25c2ce4223b8f51a1e":"Baldur's Gate - Dark Alliance (USA)","14371b084ed7caa4b8e533d111254310":"MAER Heaven - Knockin' on Heaven's Door (Japan)","1441e4d82330fb286a7e1702b68992cf":"BoulderCrash GBA (World)","1455d99497a4d004aa0edc0e50bd2530":"Screw Breaker - Goushin DoriRureRo (Japan)","146ae198a3d42a66733b9e0ef3ec11eb":"Castlevania - Akatsuki no Minuet (Japan)","147ea6fe88f1e2bb50b51e19f5f54cb9":"Simple 2960 Tomodachi Series Vol. 2 - The Block Kuzushi (Japan)","1489b4d9defff4a8a993fa6017367c8f":"Kunio-kun Nekketsu Collection 1 (Japan)","148c4190c830886bece41eb380ea3533":"Teen Titans (USA) (En,Fr)","14a31a749989b4e99c3a9ed9dac8a85f":"Famicom Mini 21 - Super Mario Bros. 2 (Japan)","14bc45c78e1d2325654c0cdac25873bb":"Zoids Saga II (Japan) (Rev 1) (Proto)","14c864da7a500ffc5ccc7139fb7ef053":"Majokko Cream-chan no Gokko Series 2 - Kisekae Angel (Japan)","14d8dddf41901b02db25a04ab587664b":"Rayman 3 (Europe) (En,Fr,De,Es,It,Nl,Sv,No,Da,Fi)","14dab12e795098988d46b96885170538":"Drill Dozer (USA)","14eb992bd01c4b6b3542ebd30d942726":"Super Mario Advance (USA, Europe) (Virtual Console)","14f0f598534646ee02b48845bfb0b21e":"Tremblay Island (World) (En) (v1.1)","1529f4677cba3e47f4be897f02b71044":"Disney Sports - Snowboarding (USA)","153dfb9b03fd758d737b8671b743ce4a":"Super Street Fighter II Turbo - Revival (USA) (Virtual Console)","155753526498f1a93b7a2850368da3e4":"Robots (Japan)","157cec6ff0d7360e856b8e09508ec2e5":"Rockman EXE 4 - Tournament Blue Moon (Japan) (Rev 1) (Virtual Console)","158c0792eb9b050dc8da7ab58ed2df95":"Jissen Pachi-Slot Hisshouhou! - Juuou Advance (Japan)","1596c3f8af92805541bc92e656b29dd5":"Paws & Claws - Pet Vet (USA)","1597d0bff45a3722beae045d218d6649":"Classic NES Series - Pac-Man (USA, Europe)","15a038b656bce4a0d293ad1b47737f9f":"Sword of Mana (Europe)","15b3055351b71b4ae9f17431d1e8707a":"Tyrian 2000 (USA) (Proto)","15b8647b2a4e1d62f779703a0a50154a":"Battle Network - Rockman EXE 3 (Japan) (Rev 1)","15c95e0d6067d9f60b4baba4c6ffd02c":"Shaun Palmer's Pro Snowboarder (Germany)","15db64521ee01c3f0428fdb9798577c5":"2 Games in 1 - Bionicle + Knights' Kingdom (Europe) (En,Fr,De,Da+En,De)","15dbde22ef467c503e09f75b233da539":"Yu-Gi-Oh! - Worldwide Edition - Stairway to the Destined Duel (Europe) (En,Ja,Fr,De,Es,It)","15de8e3ed041332e0529c0b884d42d42":"Breath of Fire - Ryuu no Senshi (Japan)","15e002514b589a1cfe18805ba504361f":"J.League Pocket (Japan) (Rev 1)","15e37fb594c2dfe85b8b7ba3b7e565bd":"Crash Bandicoot Fusion (Europe) (En,Fr,De,Es,It)","15e493a90d9b8cc7935f01abd57393b2":"Grim Adventures of Billy & Mandy, The (USA)","15fb7bb864e9876537890af774b43dbf":"Legend of Spyro, The - A New Beginning (USA)","160c89d655b1db397e419a9614144a7a":"Mazes of Fate (USA) (En,Fr,De,Es,It)","161acf52bfedb16060dc24183db56d23":"Kawa no Nushi Tsuri 5 - Fushigi no Mori kara (Japan)","1625473f5bc984de7590193576cd3b77":"Trogdor! (World) (v3.1)","164aed5ee87071fd14e908bf65f7a6e3":"Who Wants to Be a Millionaire (Australia)","164b2a21afa59d6dedad07117296c8e7":"TMNT - Teenage Mutant Ninja Turtles (Europe) (En,Fr,De,Es,It)","164e42954fe047552701ff62836642ae":"Silent Scope (USA) (En,Fr,De,Es,It)","1690c80a29f8096d50422e38517674dc":"Minna no Soft Series - Minna no Shougi (Japan) (Rev 1)","16ae239c819d0a772307e3193d593860":"Frogger's Journey - The Forgotten Relic (USA)","16b5f1c6f8567cbe42f7562fccbb6426":"Riviera - The Promised Land (USA)","16bf8504460b72db612adc0e17831221":"Killer 3D Pool (USA)","16d337bbd90230ae5eed4cc1f5d72fd9":"Mario Pinball Land (USA) (Kiosk, GameCube)","16d70ac9d2798623ed1114e3184b5be6":"Shuma Guaishou - Hongbaoshi Ban (Taiwan)","16e66d48b063671e1d6a3db5ff0950bc":"Eragon (USA)","16f99099d8674858400004a0052f31ba":"Shamu's Deep Sea Adventures (Europe)","171e7bdf6b194cc9ae301f5424714a1a":"Desert Strike Advance (USA)","172f722a84bd79496059745e3a148f7d":"Disney Sports - Motocross (Japan)","1739ddafb47c12da4709e9529c103d68":"3 Games in One! - Super Breakout + Millipede + Lunar Lander (USA)","1739ff2b55b034c58aa1618a2e49d4e8":"Disney Sports - Skateboarding (Japan)","175ffe1ee242cac0316a9882a240d794":"Backyard Sports - Basketball 2007 (USA)","176da8ac357508b17baa922352a30568":"Hot Potato! (USA)","177cbecf21922a3d5f19d160816c31c2":"Starsky & Hutch (USA) (Beta)","178627a0a81f7e79f3549c4ef122e7d5":"3 Games in One - Darts + Roll-a-Ball + Shuffle Bowl (Europe)","1793a537f75831900b1131b8bcaba63d":"Zoids Saga (Japan) (Rev 1)","179ebcf3fa5934d89bdad8f970a391c9":"Mario Party Advance (USA) (Virtual Console)","17a32cfa3d0a5c74f914281ef55c75cd":"Breath of Fire (USA)","17a986af456ed994f556f23c330666a8":"Shining Force - Resurrection of the Dark Dragon (Europe) (En,Fr,De,Es,It)","17dd0e3e76207e30614768482078cc3f":"SpongeBob SquarePants Movie, The (USA) (Beta 2)","17ece80a2d8609e513776e67ef0ecb15":"NBA Jam 2002 (USA, Europe)","17fa3b069564dd1dfc01ec579fccf0ad":"2 Games in 1 - Monstruos, S.A. + Buscando a Nemo (Spain) (En,Es,Nl+Es,It)","17fccf4edeed5cfe2c2814b2c6fa1a19":"Tremblay Island (World)","17ff0b3af041f31b6c6924726c2642b8":"Megaman - Battle Network 5 - Team Colonel (Europe)","180a4c25cb809435f85f7fb81bc2495f":"Razor Freestyle Scooter (USA)","181d31b59e0b1c5402c145afedcad316":"Army Men - Sarge's Heroes (USA, Europe) (Proto 7)","182363b0698322e1864ced6e9eed7ead":"Megaman Zero 2 (USA)","18317fa6e27ea0ea7509f1319bc0865c":"Dokapon - Monster Hunter! (Europe) (En,Fr,De)","18441e53efd724563581600a0f253879":"Hello Kitty - Happy Party Pals (USA)","1851c34d41025d541b6ad76b9146cc6b":"Catz (USA, Europe)","185ea59c28f2d64063865ac94744635d":"Hardcore Pool (France)","1879cb045c1de7e5c3405fcc06f59e11":"Tigermoth (World) (Proto)","187a5494f83d9e31e0485dc971a727d4":"Ui-Ire - World Soccer Winning Eleven (Japan)","188e4a01bf62230b7b50eaeb9355bd42":"R-Type III - The Third Lightning (USA)","18929912972f945dffdb21ef5ee7c8b1":"Koukou Juken Advance Series Eitango Hen - 2000 Words Shuuroku (Japan)","18a0f7cfe44de29feff9efb2f18634f9":"Planet of the Apes (Europe) (En,Fr,De,Es,It,Nl)","18bfa442d857e038c8ef578b64df0ba2":"World Poker Tour (Europe) (En,Fr,De)","18d8c779e0b0c50be33b84374d1f57b8":"Rockman Zero 2 (Japan) (Virtual Console)","18ef4ec828a4bf14b6fd241230bb349a":"Alien Hominid (Europe) (En,Fr,De,Es,It)","18f479a8d3e0ac87d5f6495a43f76876":"ESPN Great Outdoor Games - Bass 2002 (USA)","190634951b15d743ab39fb56d105c15b":"Disney Sports - Football (Soccer) (Europe) (En,Fr,De,Es,It)","19129e5f655be691894551b379ac6154":"Mr. Incredible - Kyouteki Underminer Toujou (Japan)","19183a3438256a96b07026bc9c2265bf":"WarioWare, Inc. - Minigame Mania (Europe) (En,Fr,De,Es,It) (Virtual Console)","1923216a92a9d7b4640c39a37b6a612b":"Little League Baseball 2002 (USA) (En,Es)","19237fa5628f80a4239d817eba82faa6":"Tim Burton's The Nightmare Before Christmas - The Pumpkin King (Japan)","1933352fdcc12b8bdb603ee7ed8f9027":"Tales of the World - Narikiri Dungeon 2 (Japan)","1934b7380ba91e4966f12c2968451289":"Bionicle (USA)","19371ad5f797b26c5e841992339ad37d":"Jurassic Park III - Kyouryuu ni Ainiikou! (Japan)","193f6184cdb4b5f6c0f9875e812e4c75":"Monster! Bass Fishing (Europe)","1944e6ac9631eeec604e5fadf749885e":"Charlie and the Chocolate Factory (Europe) (En,Fr,Es,Nl)","1949b8e4a2f30f28be71e97b4d824b22":"Monster House (Europe) (En,Fr,De,Es)","1950bec3827a706bcf603bf27794c270":"Kidou Tenshi Angelic Layer - Misaki to Yume no Tenshi-tachi (Japan)","1953b83685eaeb7bf713091a77569e17":"Lemony Snicket - Raetselhafte Ereignisse (Germany)","1975eda7d93cdb6d0828533dd34a05a7":"Dora the Explorer - Super Spies (USA)","197ae930329b3515fa57c039ad81c415":"Digimon - Battle Spirit (Europe) (En,Fr,De,Es,It) (Beta)","197dc540682b32e2022fec2ec543be1a":"Madden NFL 2004 (USA)","1995bfb86365486c6568aaa86b2330c0":"Deutschland Sucht den Superstar (Germany)","19a4e7b19c46c224f3dea0a412b88309":"Bengt Swinger of Longarm (World)","19bf7f61b8f684b92cd746a8575a6a83":"Twin Series 2 - Oshare Princess 4 + Renai Uranai Daisakusen! + Renai Party Game - Sweet Heart (Japan)","19c9594b78d51c9b24f5fb79e463756f":"Lord of the Rings, The - Futatsu no Tou (Japan)","19dfc661c5a3563e001aaaec36b33b90":"SimCity 2000 (Europe) (En,Fr,De,Es,It) (Rev 1)","1a2c640094216f9d15dc7a2ac3b8c1e0":"Jungle Book 2, The (Europe) (En,Fr,De,Es,It,Nl)","1a42ae26c4068ea87c2e8c476ecd0e26":"Shrek Prezessin (Russia)","1a92e287f154d62c136ebe524e75c7f2":"Rapala Pro Fishing (USA, Europe)","1a97a68ce320fd9eda568a724ea1bfb4":"Magical Quest Starring Mickey & Minnie (Europe) (En,Fr,De,Es,It)","1a9cc177b098fa1762b0e9872590916c":"Marvel - Ultimate Alliance (USA)","1aa6a1651fa5ad8a002ca41e5ea9db30":"Oshare Princess (Japan)","1aa85dfb96e1abbee490420dc628b3b9":"Mario Golf - Advance Tour (Europe) (Virtual Console)","1ac4901f9a831d6b86ca776bb61f8d8b":"Yu-Gi-Oh! - Dungeon Dice Monsters (USA) (En,Es)","1af27a924734e9f9e30569633204269c":"Yu-Gi-Oh! Duel Monsters 8 - Hametsu no Daijashin (Japan)","1af28ea547d4116dc752c93f7f694239":"Pokemon - Rubin-Edition (Germany)","1b19f74bc004de8267993711d304511b":"Final Fantasy VI Advance (Japan) (Virtual Console)","1b1d09ff352571dac46b1790e000876d":"Freekstyle (Europe) (En,Fr,De,Es,It)","1b2e6bec49e5d6fbe8cf76b37b579f24":"Sys Crusher (World) (v1.2)","1b52dbdddd84d20f1faf32234ee31e6b":"Sutakomi - Star Communicator (Japan)","1b6af74f06ac7982e32f4f9803ba5f7c":"Pinball of the Dead, The (Europe) (En,Fr,De,Es,It)","1b7e12284e562915aa7acd260c06771d":"Yaoxi Dao (China)","1b93ef2e096d7eb72e76b8662a3e74ec":"Super Army War (USA)","1b953a635c3b51aecc8d74a5dee826cd":"Justice League - Chronicles (USA)","1bdadffe311ef9fa231c799806ad5ca3":"Brother Bear (USA)","1c04ff63c5d5b1a1eb62c1dca639e87f":"Shin Megami Tensei - Devil Children - Puzzle de Call! (Japan)","1c1d819ef380b1910277eae8f6f754f6":"Galacard Advance (World)","1c1e71c7877fe5bfdb3d612006159bf5":"Pocket Monsters - Sapphire (Japan) (Pokemon Box)","1c2da9f487a4834c8021d7a307a55684":"Legendz - Buhwarhaneun Siryeonyi Seom (Korea)","1c4467efeb8c13831b8ad08d7e8f4908":"Disney Sports - Basketball (USA)","1c694783acdfd013bdd980a4d8f8f546":"Sonic Battle (Japan) (En,Ja)","1c71095f65234ad3649e6c685b1e61f4":"Power Pro Kun Pocket 1, 2 (Japan)","1c759edf84a20174989588664bbbec55":"Kirby & The Amazing Mirror (Europe) (En,Fr,De,Es,It)","1c910a18efff33811d7695899296ff03":"Gren's GBA Game Pack (World)","1c92edbad07a372ee382d16cf624dc4b":"Shaman King - Master of Spirits (USA)","1c937c4f43a60a60066c9a2bce690e31":"Blood Drive (World) (GBA Jam Week)","1c9971ba2ed8174f6a3d099c2ee44d7d":"Oggo Boggo (World) (GBA Jam 2024)","1cb94e81dd0168c33e0eb8b070fddb6e":"Breath of Fire (Europe)","1cd1385407bfb06d4ee222650e633735":"Pferd & Pony - Mein Gestuet (Germany) (En,De)","1cd1d918e2730ac739bf2bcf14373382":"Disney Principesse (Italy)","1cd909a6837e4175244b71b83d2fdd1f":"Three-in-One Pack - Risk + Battleship + Clue (USA)","1cdd7f33c9a27061201e1d1ce029a700":"Golden Sun (USA, Europe)","1ce4441b3142b480e03cffe290b00ce6":"GT Advance - Championship Racing (USA, Europe)","1cf89b423893a12ee0bbc1c4e2868509":"Van Helsing (USA)","1d15cd3454a3566dc51d9321563d8c12":"Snood 2 - On Vacation (USA)","1d1bb23346b8a9592316a63647c70d76":"Sims 2, The - Pets (USA, Europe)","1d3084de02b0bb709ebf0070b4802aee":"SpongeBob SquarePants - Lights, Camera, Pants! (USA) (Beta 1)","1d55a0e331301a7d36ac326f3d8dc007":"Banjo-Pilot (USA)","1d6191fca5bed8a2abcea16be8f2c69c":"Famicom Mini 20 - Ganbare Goemon! - Karakuri Douchuu (Japan)","1d651567d1a5a91c93983c5b9af79421":"Yggdra Union - We'll Never Fight Alone (USA)","1d6c744dedc3741923850e47f9745418":"Tomato Adventure (Japan)","1d82ad717de36b8025770049ef4fb934":"Majokko Cream-chan no Gokko Series 1 - Wannyan Idol Gakuen (Japan)","1d8b145985bb38f9de77405c9f1fa60b":"DK - King of Swing (Europe) (En,Fr,De,Es,It)","1da8c2e3f6594c4287770171d145b7d3":"Board Game Classics - Backgammon & Chess & Draughts (Europe) (En,Fr,De,Es,It)","1dac1484f1d66158b1cfae3da7c79af9":"Racing Gears Advance (USA)","1dbd789e9efc3aaacc48512872677f97":"Action Replay GBX (France)","1dbf1b5255a3fc4b9a412f79f83a77fb":"F-Zero - GP Legend (USA) (Virtual Console)","1de4ebf40c819e8cfb20b84f6dcdf718":"Mech Platoon (Europe) (En,Fr,De,Es,It)","1de6184d96452bed659bc732915ecb0e":"Lizzie McGuire (Europe) (En,Fr,De,Es)","1e04d15e21960028153dd09609103c63":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 4)","1e087998d7f24a69579d107f7671f7db":"Lunar Legend (Japan)","1e0b41fbb6f338dc44932625446df20c":"Onimusha Tactics (Europe)","1e0ff992c079acf2e5310699e1fafe45":"Music Recorder MP3 (Japan)","1e32d754b8a874d279086f98cf523dfd":"Banjo-Kazooie - Grunty's Revenge (Europe) (En,Fr,De)","1e35207a805af5bafde2361df6721c60":"Battle Network - Rockman EXE (Japan)","1e3e1d0307b350dc1af049ea85d18c06":"Chrismas Challenge (World) (Beta)","1e3fd614dc43edbbf9df51262057f2cc":"Scooby-Doo and the Cyber Chase (USA, Europe)","1e52d66f5f8a7c4f207d80ba4fccf55e":"Yu-Gi-Oh! - Worldwide Edition - Stairway to the Destined Duel (USA) (En,Ja,Fr,De,Es,It)","1e52f38082b252e04173efb340a9286e":"Pokemon - Versione Verde Foglia (Italy)","1e5a3679bb64a87ea2e23774a672ca7d":"Super Monkey Ball Jr. (Europe) (En,Fr,De,Es,It)","1e5f91db7b8fa135cc3b118a3f8e686c":"Pinball Advance (Europe) (En,Fr,De,Es,It)","1e68810a62d6db776b3e602e39601b70":"Medarot G - Kuwagata (Japan)","1e7ee1cf52d5a507ab4a54ee1efad630":"2 Games in 1 - Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (Europe)","1e8c774ba210d1c55113531c7360c737":"Megaman - Battle Network 6 - Cybeast Falzar (USA)","1ea6b683e2cadc313474badeac929154":"Yu-Gi-Oh! Duel Monsters Expert 2006 (Japan) (En,Ja,Fr,De,Es,It)","1ec7fbc18c78d747d1505fe0abacbec0":"Dragon Ball Z - Buu's Fury (USA) (Beta 2)","1ed7f890ce33a463907cec23f83be7c0":"Math Patrol - The Kleptoid Threat (USA)","1edb0b88ee507f5176900c419c52b570":"Ultimate Puzzle Games (USA)","1ef40e56d3eab2501445ba73d26bf827":"Disney Sports - Basketball (Japan)","1efa00a76962e01d5a0aebeb7b0ef8cb":"Action Replay GBX (Europe) (En,Fr,De,It) (Alt)","1f068b49fa0fff9f866abe2d0a965a89":"2 Games in 1 - Sonic Advance + Sonic Battle (Europe) (En,Ja,Fr,De,Es+En,Ja,Fr,De,Es,It)","1f49d24ac42d1697a55a45a145b1dd39":"Curious George (Europe) (En,Fr,De,Es,It,Sv,Da)","1f5a23d069bf42a1f3131e8c5a574efb":"Columns Crown (Japan)","1f739df174644981268f67efbca5dab8":"Duel Masters 2 - Invincible Advance (Japan)","1f7d87cd45e6105577670cab74961993":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 1)","1f86e54c43ba68c9211e76816d88927f":"Scrabble (Europe) (En,Fr,De,Es)","1f90a64fb3b26abee5ff9284fe628758":"Classic NES Series - Castlevania (USA)","1fa9862e396758ee4eb6923e5ce4f9bc":"Dokapon Q - Monster Hunter! (Japan)","1fad228baad51e306b23986ca403d6ec":"Cat's Curse (World)","1fb0b1a3df41397795acf99d8aada8d6":"Super Bubble Pop (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv)","1fb4a4b0891ed489183ba487e2f9046e":"Sword of Mana (Europe) (Fr,De)","1fb97ae3abe61bb55643559084ceb160":"Ganbare! Dodge Fighters (Japan)","1fe0aa775a55230c0cf8236f4376dbe9":"Elf - The Movie (USA) (En,Fr,De,Es,It)","1ff9f0809c7766f72e67378cb14a430a":"Megaman & Bass (Europe)","20121e429ee5ece132b9ac3b0f22efe9":"Fushigi no Kuni no Alice (Japan)","20170a5739aff291fa8adc67b682ab15":"Star Wars - Flight of the Falcon (Europe) (En,Fr,De)","20447ef4715492164d65ebcdf26bd568":"Little Buster Q (Japan)","20449adab693bf966bf0f4a907102fb9":"Pocket Monsters - Ruby (Japan) (Rev 1)","2047548fdb416c3ebe15ca34fc16e773":"Mahou Sensei Negima! - Private Lesson 2 - Ojamashimasuu Parasite de Chuu (Japan)","204f81fba1f395db9e7966039ef48840":"Who Wants to Be a Millionaire (Europe)","20512c2b1d7cfd870a2562c7b82dcdc1":"Pokemon - 10th Anniversary Distribution (Europe) (Kiosk)","2097afe595661f911cffe25050d532ec":"ZooCube (Europe) (En,Fr,De,Es,It)","20bb7717258c3bd2e87b9b7617e95df2":"Mobile Suit Gundam Seed - Battle Assault (USA)","20d7b1bcaf56617df5718f0052a83011":"Black Black - Bura Bura (Japan)","20dad766e239365d6f121dccf79a48f1":"Hudson Best Collection Vol. 1 - Bomberman Collection (Japan)","20e17b68ad10086ddb5f9f899d1ff6d8":"Magical Vacation (Japan) (Virtual Console)","2100cf6f17e12cd34f1513647dfa506b":"Pokemon Mystery Dungeon - Red Rescue Team (USA, Australia)","211af14ac83a170a0e60fe8d0a48e37e":"Pinobee - Wings of Adventure (USA, Europe)","211f243e032b967e01ff97907b29f56a":"Harry Potter - Quidditch World Cup (USA, Europe) (En,Fr,De,Es,It,Nl,Da)","212cd9b15124251d8b08602d607c7865":"WarioWare, Inc. - Mega Microgame$! (USA) (Virtual Console)","2132b06357239d4e6a0716d963f46597":"Breath of Fire II (USA)","214047ac78c08eb59e256f54df9522f2":"Cars (USA, Europe)","214b56eca30b048860579598e935c06a":"Uno - Free Fall (Europe) (En,Fr,De,Es,It)","2151c4d48be4c45f54a2a7365e4293eb":"Domo-kun no Fushigi Television (Japan)","2152c7ff7aea128267279e1a3c5db3ee":"Rockman EXE - Battle Chip GP (Japan) (Virtual Console)","215e630068500f4c4f52bbe9ad5172a1":"Eliminator GBA (World) (Proto)","2164e4c57a166869961fa1b428fd6ded":"Blades of Thunder (USA)","2166bc8d0cf08a6fe0cc44559a52c3a1":"Minna no Soft Series - Tetris Advance (Japan)","2170ce3d59a6f69d6d5b002088beed7c":"Stuart Little 2 (USA, Europe)","21837dbfe88ec42e35cddaf7585d1fe1":"Racing Gears Advance (USA) (Beta)","218700b79a0ae3e9d69abf00fe06eb97":"Hot Wheels - Burnin' Rubber (Europe) (En,Fr)","21a45ac121ef99a99688f3b36f1fd297":"Famicom Mini - Kidou Senshi Z Gundam - Hot Scramble (Japan) (Promo)","21b6d4d9631896145f94b869de43f543":"Power Rangers - Time Force (USA, Europe)","21d299d0f2fcd9ab20041a4e6f3788d9":"Frost Princess (World) (GBA Winter Jam 2021)","21d31c0f9843e08ae60419098b0105f3":"March of the Penguins (Europe) (En,Fr,De,Es,It)","21d8748d4d072f90c6319d6bd6ee1781":"F-Zero - GP Legend (USA) (Proto 13) (Netcard)","21e76aea003b916a2beeddd5b71f8df5":"Chicken Shoot 2 (Europe) (En,Fr,De,Es,It)","21f4383d59bb113b4495be56e30c0c53":"Ace Lightning (Europe)","21f8cc99837efbc1cb59fd75dc47be67":"Monster Truck Madness (USA, Europe)","220a6f1b9d8d63e7638248f24dbfa709":"Zoids - Legacy (USA)","2219cac76173a4069c011968ab9e44df":"Hamster Club 4 - Shigetchi Daidassou (Japan)","2221038e601e260c39b5b5937064d4e4":"Super Dodge Ball Advance (USA) (Beta)","223d4da54d60f28fc13124bf03c75734":"Shaman King Card Game - Chou Senjiryakketsu 3 (Japan)","22695f0e188adebaa5f7b865c9719daa":"Spider-Man 2 (Europe) (En,Fr,De,Es)","2286cf9c0253344a19ccc19a36ea293f":"Drill Dozer (Europe) (En,Fr,De,Es,It) (Virtual Console)","228cbf6936579b32b8cc6d7b092dad9c":"Frogger's Adventures - Temple of the Frog (USA) (En,Fr,De,Es,It)","228fca59cbdcff493f207271411e15a5":"Spider-Man 3 (Europe)","2293e67087ae9c5fb0ab6abb25179c0e":"Operation Armored Liberty (USA)","22a0e9f0e8c1c51272a2e29ef2de56e7":"Dr. Seuss' The Cat in the Hat (USA)","22a4e57b85f7413c1973d4bd5a19d5a3":"Robopon 2 - Cross Version (USA)","22ab0c3096981c511a4698e16d8e067b":"SpongeBob SquarePants and Friends - Battle for Volcano Island (Europe) (En,Fr,De,Es,It,Nl)","22b1ec2ea8e0da29ef2810aa4ab7b5f5":"Natural 2 - Duo (Japan)","22b31aa8f66e7c6528fd4903a09f030f":"Lufia - The Ruins of Lore (USA)","22b69c5c0108766be33ad23340f387e2":"Power Pro Kun Pocket 3 (Japan) (Rev 1)","22d31d959de4e87160ba308c95386799":"High Heat Major League Baseball 2003 (USA)","230bbfa7c06395868dfc17c514112c83":"Yuureiyashiki no Nijuuyojikan (Japan)","2330d9d78363285a7a59a844cfe4e506":"Ms. Pac-Man - Maze Madness (Europe) (En,Fr,De,Es,It)","23564039143b0f8beb2e9f3ca4ab742e":"Dr. Sudoku (USA)","2363306cb2927ee859a39ba2744d7f42":"Neoromance Game - Harukanaru Toki no Naka de (Japan)","2395cca1007ecd7d016860703812c2bc":"xXx (France)","23a1a8685d67405271f297f5a042fa23":"Gachasute! Dino Device - Red (Japan)","23a5cf12dda1bd5ef4d3e03fa6112c19":"Planet of the Apes (USA) (En,Fr,De,Es,It,Nl)","23a85707e6b7bb14d559f207824b2389":"Digimon - Battle Spirit (Europe) (En,Fr,De,Es,It)","23aac6d60e04eef54cec26066fa2d4c3":"Duel Masters - Shadow of the Code (Europe) (En,Fr,De,Es,It)","23f620f0e968f21e79197f1e96803965":"4 Games on One Game Pak (Nickelodeon Movies) (USA)","24110878dd4b1d24cd824002685a5f4a":"Hot Wheels Advance (Japan) (En)","241e85ad00eaf8cf43499eeb437cf009":"Reign of Fire (Europe) (En,Fr,De,Es,It)","243cd8ce513da13eeed632a3a8d3d153":"Trollz - Hair Affair! (USA)","24409e68056b96bd4530d774f163d798":"Advance Wars 2 - Black Hole Rising (Europe) (En,Fr,De,Es,It) (Virtual Console)","2448dbe0ddd454ad9b9217e2f3c64787":"Beyblade G-Revolution (Europe) (En,De,Es,It)","247ec2c581b6c5d9bafbda6c51d7c119":"Okumanchouja Game - Nottori Daisakusen! (Japan)","247f637c17f7c8d996a4ab48f3398f06":"Konami Arcade Game Collection (Japan)","248d9fa9903d27cd9890e6a08dbd97cf":"Top Gun - Firestorm Advance (USA, Europe) (En,Fr,De,Es,It)","249a079e6e7cd8a870e23f4fa390d9ea":"Classic NES Series - Excitebike (USA, Europe)","24a24025a5e3b15512d4b5858b07c662":"SpongeBob SquarePants - Lights, Camera, Pants! (Europe) (En,Fr,De,Es,It,Nl,Sv)","24b6419d695679a176c1d8ef4f21d667":"GameShark GBA (USA)","24b65c43b58646c0b6450090c0dea44f":"Famicom Mini 14 - Wrecking Crew (Japan)","24bc3d8a0ae721d6bdc745c761422b50":"Polly Pocket! - Super Splash Island (Europe) (En,Fr,De,Es,It) (DSI)","24ef180602e0658bbe38fabc5d09894c":"Crash Bandicoot Purple - Ripto's Rampage (USA) (Rev 1)","252037e0c434428271dc322b122612aa":"Monster House (Europe)","253d5403fff7e6a7c4166423f2693f8f":"Konami Krazy Racers (USA) (Beta)","2548856ed56765e0f8267175bc1ac171":"Aero the Acro-Bat (Europe)","2553ec818abcbaf0e925805918635f0f":"SEGA Rally Championship (Europe) (Beta)","2556b3d052b71961c52f618689595429":"Beyblade V-Force - Ultimate Blader Jam (Europe) (En,Fr,De,Es,It) (Beta)","2584c4d9c73888ffc9096a02fafea08c":"X-Men - The Official Game (USA)","2585d9385617b38836884f90997dc985":"Zidane - Football Generation 2002 (Europe) (En,Fr,De,Es,It)","25998f81ba65037dcde78250b7d2c28b":"Cabbage Patch Kids - The Patch Puppy Rescue (Europe)","259cfd0ff14f96159fcf9aa156cec4da":"Dragon Drive - World D Break (Japan)","25a0842e3db8b40eeb39de83285cc13a":"Rock 'N Roll Racing (USA)","25b2d758e9abc435441414aab6d43431":"Shin Megami Tensei (Japan)","25cb3f0bc680ece2d1578a635e831c57":"Pocket Meat (World) (Proto)","25cdcf14f0fce47d9c6c8155774948fa":"Elf Bowling 1 & 2 (USA)","25ead20d8d3cfedb35393740b3a36b74":"Kotoba no Puzzle - Mojipittan Advance (Japan)","26138b868def156d361525dc69c2899e":"Mike Tyson Boxing (USA) (En,Fr,De,Es,It)","261baa7a487c97bcf1df6c2464f7e9e3":"Super Mario Advance 2 - Super Mario World + Mario Brothers (Japan)","263a70b0b601f573940d98dca29a244d":"Dora the Explorer Double Pack (USA) (Beta)","2644a4b5adb2bfe2ca1263b9db9649fc":"2 Games in One! - Spy Hunter + Super Sprint (Europe) (En,Fr,De,Es,It)","266da549741dbc9b9c902c113b13b4b6":"Advance GTA (Japan) (En) (Rev 1)","266e48e50827e202a9e74255bf29a554":"Aero the Acro-Bat (USA)","2670653630214cf574b16ed8a7c9ea9e":"Crazy Chase (Europe) (En,Fr,De) (Beta)","26711d7758259e9637b79fb3625b1a0c":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 12)","267f45f19c0bd4cb4eec1879c2cbd7cf":"Zero One SP (Japan)","269015766de9f577b51f3b5c8623c738":"Shin Sangoku Musou Advance (Japan) (Rev 1)","2694632a5422d0c1553e298458798797":"Disney Sports - Skateboarding (USA)","26b44c6f29e95b1aae1b79f37725d959":"Sound of Thunder, A (USA) (En,Fr,De,Es,It)","26c1b5796bed6222c5b41c94996c380e":"Konjiki no Gashbell!! - Unare! Yuujou no Zakeru 2 (Japan)","26c807fa46179e4820318ef8d7b460dc":"Namco Museum - 50th Anniversary (Europe) (En,Fr,De,Es,It)","26cc5df15901f42782974643505e5159":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 9)","26e70e3bcd7fd311a9ba93f64cbfe30e":"Croket! - Yume no Banker Survival! (Japan)","27035b74f608ffced0e4f78d9b3251cf":"Wagamama Fairy Mirumo de Pon! - Ougon Maracas no Densetsu (Japan)","2705c33d0c7cf9b0aff99c1b64d4465d":"Dr. Mario & Panel de Pon (Japan)","27138132d4c085bbbc442618579558bc":"2 Games in One! - Paperboy + Rampage (Europe) (En,Fr,De,Es,It)","27398cda21dd14b9e0aa28e0e2cb03a2":"Pokemon - Aura Mew Distribution (France) (Kiosk)","273b9e8c6760ba878e9c6310db5dce67":"Bakunetsu Dodge Ball Fighters (Japan)","275ea9783e76af29846cc3ee5675c62a":"SD Gundam G Generation Advance (Japan)","2761b40bd27082bd75b752b47cafacec":"Shin Megami Tensei - Devil Children - Messiah Riser (Japan)","2768c7c1a8478b245cb9b7b6615d50ca":"Tony Hawk's Underground 2 (USA, Europe)","276b4ef1d42518e99859b31d4ee1b843":"Green Memories (World) (v1.4.8)","277a144d9b4392a6c80f23b979c9c8f3":"Oddworld - Munch's Oddysee (USA, Europe)","279297081bab92bdc469f3b9127ab4fc":"2 Games in One! - Dr. Mario + Puzzle League (USA)","279605b6241eca4461003b439df9e87f":"2 Games in 1 - Disney Princesas + Hermano Oso (Spain) (Es+En,Fr,De,Es,It,Nl,Sv,Da)","279af1b9d55efdcea19593a42f8ce23d":"Ms. Pac-Man - Maze Madness (USA)","27ab3ab9d8c3fee6a38e95ba03fde194":"Totally Spies! 2 - Undercover (USA) (En,Fr)","27c9f37193977828f9808f3f76ff8c76":"Pocket Monsters - Ruby (Japan)","27d0a58227e4c5c6e8481faa4d541fc0":"Santa Claus Jr. Advance (Europe) (Beta)","27dfc6912ed8bbd27a5b5b32a62a4916":"Asterix & Obelix - Bash Them All! (Europe) (En,Fr,De,Es,It,Nl)","27e4b87ce096aaea17cc8a63bf9deeef":"Tony Hawk's Pro Skater 3 (France)","27ebadff2f3b46ae0bf7a198b5f29952":"Magi Nation (Japan)","27f322f5cd535297ab21bc4a41cbfc12":"Advance Wars (USA)","27f9f0e73752cc2df3b73bc46048e8a2":"Yu-Gi-Oh! - 7 Trials to Glory - World Championship Tournament 2005 (USA) (En,Ja,Fr,De,Es,It)","27faba97cc9e3c633a443630575f3585":"F-Zero - GP Legend (Europe) (En,Fr,De,Es,It) (Virtual Console)","27fb433473b3402996830e3d37c5f474":"MazezaM (World) (NEO Coding Compo 2013)","2820981c97087b1181fc44e722c64dc3":"Yu-Gi-Oh! Duel Monsters 6 Expert 2 (Japan)","282f4032daee65c2cbf421ece93e4a41":"Disney Princesas (Spain)","2836ad919de58d933ff94ea209ffea86":"Kawaii Pet Shop Monogatari 3 (Japan)","283969c5d1c1e46b94b565c6da5ecd5c":"Hi Hi Puffy AmiYumi (Japan)","2845b893708a6b8705c6f799f45d6eb3":"bit Generations - Boundish (Japan) (En)","28587f7914842e2104c48da646ca0fd8":"Megaman - Battle Network 6 - Cybeast Gregar (Europe) (Virtual Console)","287921d222d6c6caae129ab6418d5c7c":"V-Master Cross (Japan)","288280c929cde064b9363a7ad4548a76":"Banjo-Kazooie - La Vendetta di Grunty (Italy)","2885a1d384a596a6098855bd155a24a6":"bit Generations - Orbital (Japan) (En)","2892a0fcefc0c183bf725b0a2540a83a":"Power Rangers S.P.D. (USA, Europe)","289adca5437135ad982fe29f80278db1":"Uranus 2 - Sun Tear (World) (En,Fr)","289bbb2e151a6ca11f896ca4712c9835":"Tales of the World - Narikiri Dungeon 3 (Japan)","28a2b3e44952944e29a168e5f17b5696":"Powerpuff Girls, The - Mojo Jojo A-Go-Go (USA) (En,Fr,De,Es,It,Nl)","28a50021de4528077a106a4e29e03487":"City Connection (World) (Fr) (v1.7)","28a966d194d788bf9ef4b5751ceee872":"Camp Lazlo - Leaky Lake Games (Europe)","28ac2eef3f2d0470ec88fe6551b38322":"V.I.P. (Europe) (En,Fr,De,Es,It,Nl)","28cebf1c1138771d3c55beebf589fc52":"Renzhe Shen Gui 2 (Taiwan)","290e507685637ea065aa2d973ba7b923":"Time for The Chickens to Go to Sleep (World) (Auto Demo) (GBA Jam 2021)","29151401cf5f8f500ec2e1cd311f6ebc":"Tom Clancy's Rainbow Six - Rogue Spear (USA, Europe) (En,Fr,De,Es,It) (Beta)","291b90df9403047a5064a1a2e71ed430":"Chronicles of Narnia, The - The Lion, the Witch and the Wardrobe (USA, Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","291c1aa5d30affeb56ecd802b9e8d012":"2 Games in 1 - Golden Nugget Casino + Texas Hold 'em Poker (USA)","293102890d234db6139f88da7d785230":"Dancing Sword - Senkou (Japan)","2940087ab5440fe73b01fb67b2c1b708":"Happy Feet (USA) (En,Fr)","2945f32214890f18db4474bc8626eeca":"Shining Force - Kuroki Ryuu no Fukkatsu (Japan) (Virtual Console)","294d2e2e0782a347a04eb438185d805f":"Batman - Rise of Sin Tzu (USA) (En,Fr,Es)","29680a4aa183eb50aa888ab49cb2ff8b":"Rocket Power - Le Cauchemar d'Otto (France)","29ae328b85fedee67e1cd68b86006c5b":"Scrabble Blast! (USA)","29b048b4b36b3fda168850003f2ee844":"Sigma Star Saga (USA, Europe)","2a04b5eab350d2863809b3b516210d41":"Dogz (France)","2a0d1bb21640a97228f334853b0289c3":"Dexter's Laboratory - Chess Challenge (Europe) (En,Fr,De,Es)","2a141847ee3dc1e13ada211a8c2537cc":"Prehistorik Man (USA, Europe) (En,Fr,De,Es,It,Nl) (Beta)","2a2661cbc8e3891864fdc1d34f9d1c9b":"Dynasty Warriors Advance (USA)","2a3c66736cb90dc1dac6cb94944d0430":"Hot Wheels - All Out (USA)","2a43344ed8e9654f0cc95ce788371ba4":"Boxing Fever (USA, Europe)","2a47d9da2a8653f65f2a23d8052efe8c":"Treasure Planet (USA)","2a48cfc3bf07c4f64cd267489d46dca8":"Fantastic 4 - Flame On (Europe) (En,Fr,Es,It)","2a76e96be1fdb58ea4e4bafa62556a5a":"Tweety and the Magic Gems (USA)","2a8d8fb4d2ce5ca01c13d1c9cf65955e":"EX Monopoly (Japan) (Rev 1)","2ab4cafacf54e34053b34527539b7e5b":"Lucky Luke - Wanted! (Europe) (En,Fr,De,Es,It,Nl)","2acd2b101e2f03a3fb95ed41b187d5ec":"Jimmy Neutron - Boy Genius (USA)","2ad022deb3d3575d98bcf639fb177683":"Tomato Adventure (Japan) (Virtual Console)","2adeb64ff470fb08a472f3cb6f5d7d44":"Duel Masters - Sempai Legends (USA)","2ae30f703add1843ab2c0299076f086d":"Horsez (USA)","2ae643e7a49f5044cdc9413d86b8d538":"Denki Blocks! (Europe) (En,Fr,De,Es,It)","2ae7ae75669717e299671d26ea883f98":"King of Fighters EX 2, The - Howling Blood (Japan) (Rev 1)","2ae83e668d4098f60a686962ae8ea71a":"Space Invaders (USA, Europe)","2af323f1b5a498d3060b5b8fb94410ed":"Digimon Racing (Europe) (En,Fr,De,Es,It)","2af652bd8eaae10cac539bf9f2491e45":"Wild Thornberrys Movie, The (USA, Europe) (Beta)","2af78edbe244b5de44471368ae2b6f0b":"Legend of Zelda, The - The Minish Cap (Europe) (En,Fr,De,Es,It)","2b05ef0af7a48729a665a86573ae70b4":"Sims, The (Japan)","2b32199a5cee65f93714a686376e50ca":"Famicom Mini 15 - Dr. Mario (Japan)","2b4d29e64f0ab440877488d91bb67ae9":"2 Games in 1 - Disney Princesas + El Rey Leon (Spain) (Es+En,Fr,De,Es,It,Nl,Sv,Da)","2b560846665f5afd8b55405933ded4c1":"Mortal Kombat Advance (Europe)","2b58ab05006a99c7b075a72141c39346":"2 Games in One! - Spy Hunter + Super Sprint (USA)","2b5e0ffa2eb716e2600282842c915fc0":"2 in 1 Game Pack - Spider-Man - Mysterio's Menace + X2 - Wolverine's Revenge (USA, Europe)","2b679f61361ad3040086d8684d58e8e7":"Paws & Claws - Best Friends - Dogs & Cats (USA)","2b6b408513302519fd0e3fa72a67444b":"Battle B-Daman (USA)","2b75a8546e9faf9b404616a68f029db0":"Wanko de Kururin! Wancle (Japan)","2b9a9998d870afaec5d7b0f1a2a477f4":"BMX Trick Racer (USA)","2bbaeea4fd04e30a1ae53d91a390814a":"Final Fire Pro Wrestling - Yume no Dantai Unei! (Japan) (Rev 1)","2c00e335288a96650e34785b5e2a7588":"Pokemon - Version Emeraude (France)","2c18d1fa4d943439ca17ceef984ea7d4":"Star X (USA) (En,Fr,De,Es,It,Nl)","2c1e1db8121b8eb26a55eabbb960bd67":"Rave Master - Special Attack Force! (USA)","2c278a2282ea14997ef4202d205f91bb":"Wild Thornberrys Movie, The (USA, Europe)","2c2e9b38c21fd511b4f1871b12183416":"Adventures of Jimmy Neutron Boy Genius, The - Attack of the Twonkies (USA, Europe)","2c464384922d5a145559c61ed8664113":"Qwak (Europe) (En,Fr,De,Es,It)","2c473ca8fb6b7a76777029d1eee066fc":"Battle Network - Rockman EXE (Japan) (Virtual Console)","2c5221fbcbd75a985d68451cf7fa6c8e":"Monster Gate - Ooinaru Dungeon - Fuuin no Orb (Japan)","2c60af1c2c17377c27b2d9aac79f0cea":"Bionicle (Europe) (En,Fr,De,Da)","2c6411d76d5438da19f193b630da1c63":"Gauntlet - Dark Legacy (USA)","2c66f51bd6546fb780d52f981a57106e":"Flintstones, The - Big Trouble in Bedrock (Europe) (En,Fr,De,Es,It)","2c8ef9cce9f46b55247468ea449aeade":"Grand Theft Auto (USA)","2cc38305f62b337281663bad8c901cf9":"Castlevania - Circle of the Moon (USA) (Virtual Console)","2cd38e2e2d2bbc3eeee2833b8667e962":"Scurge - Hive (USA) (En,Fr,Es)","2ce9dc7e0e3af0be2b1d0d487555aa6a":"M&M's - Blast! (USA)","2cede728164ea50342d41a554ef36a02":"2 Games in 1 - Finding Nemo + Finding Nemo - The Continuing Adventures (Europe) (Es,It+En,Es,It,Sv,Da)","2d1ceffbc8c34e3101ab91ea49f43a44":"Nobunaga no Yabou (Japan)","2d2a6725da37285d65c34205d08754d7":"Star Wars - Jedi Power Battles (USA)","2d434f2b0392f91f7715841a122621c1":"American Tail, An - Fievel's Gold Rush (Europe) (En,Fr,De,Es,It)","2d457f68782271e833b1469ec7308502":"Sheep (Europe) (En,Fr,De,Es,It)","2d7e907c4e4741f1a2fcf4c4caae030e":"Fairly OddParents!, The - Shadow Showdown (USA)","2d8c8d7f7bb5dcfc9d7b8eb54a9281b3":"Driven (Europe) (En,Fr,De,Es,It)","2d93223a5f86759f02398226a4a8a054":"Medarot Navi - Kuwagata (Japan)","2d9d80520480dbc4872b774a80f02f07":"Bubble Bobble - Old & New (Europe) (En,Fr,De,Es,It)","2da2e4acdc19c3fcc3e66f8f4cfd3606":"Madagascar - Operation Penguin (Europe) (Fr,De)","2dc58ce50644d4029cd2a347f197973f":"Medal of Honor - Underground (Europe) (En,Fr,Es,It) (Zoo Digital)","2dd50cff5266e703e72964fa0755e0c7":"Heidi - The Game (Europe) (En,Fr,De,Es,It)","2dd75f1b7e8095ab41918fccdd64e1ae":"Cars (Japan)","2dd88e9133f723098c6e8107217ec0c4":"RPG Tsukuru Advance (Japan)","2de53bf040953ad79cc8135c37b47aa0":"Tim Burton's The Nightmare Before Christmas - The Pumpkin King (USA, Europe) (En,Fr,De,Es,It)","2dec48a670f8d26b39c538ff725e2bcf":"Monster Jam - Maximum Destruction (Europe)","2e097b1eabed460f60b4e7d10a8b5c78":"Surf's Up (Europe) (En,Fr,De,Es,It)","2e28272879ced1ffffc522c6021bf79f":"Maya the Bee - The Great Adventure (Europe) (En,Fr,De,Es,It)","2e368f0e94916e946554b8f3ade01ca5":"Top Gear Rally (Japan)","2e421c417113247f1527731dd1420e6b":"Pokemon - Sapphire Version - Gotta Catch 'em All! (USA) (Pirate)","2e4a8fc4e1724e22a890b7c41c880058":"Family Tennis Advance (Japan)","2e5497b73aee7fb5fe0a82738d084814":"Unfabulous (USA) (Beta 10)","2e6e9e3b87f99f04a1ac44b01bfa6ecd":"Pokemon - Version Saphir (France)","2e8814e664675572a43b01900bbbb16b":"Mario Golf - Advance Tour (USA)","2e9b5ec5bb6be065d2f52af20bf8aca3":"Shrek 2 (Europe) (Fr,De,Es,It,Sv)","2ea8794792b610dc216324f056000f29":"Puyo Pop (Europe) (En,Ja)","2ed6310dac14f69f72002d9a9b6fab6b":"Koutetsu Teikoku (Japan)","2efc09d371a77db996d82a06e0f71062":"Nyan Nyan Nyanko no NyanCollection (Japan)","2f14e9e9357b04ee867d837a3dd3fcdd":"Downforce (Europe) (En,Fr,De,Es,It)","2f3f8e8d7874528acac3b7b89ccf98dd":"Lara Croft Tomb Raider - Legend (USA) (En,Fr,De,Es,It)","2f660377581b7e48c06131f56c791b72":"Super Mario Advance 2 - Super Mario World (USA, Australia)","2f661853601455283f51e54fb85dea73":"ChuChu Rocket! (Japan) (En,Ja,Fr,De,Es)","2f681730742c52625d237e610ce6de7e":"Ultimate Arcade Games (USA)","2f78a6ee027003fa5472eb90fc1322a7":"ESPN Winter X-Games Snowboarding 2002 (USA)","2fb73b874bbf4119e5cbf17b8ceae9c1":"NASCAR Heat 2002 (USA)","2fcdf9b4f16219242bf5cdd34336f0e6":"2 Games in 1 - Disneys Prinzessinnen + Baerenbrueder (Germany) (De+En,Fr,De,Es,It,Nl,Sv,Da)","2fe7335773e253b83068a017c9383ed6":"Iridion II (World)","2fec47a3e958099027105fc5e77d81c5":"Coin Adventure (World)","2ff590aa635590c2f8140c88cbb19025":"Final Fantasy IV Advance (Europe) (En,Fr,De,Es,It)","3018514472c092f0603c4a77d3918304":"Celeste Classic (World) (v1.1)","3023f8b53d90af1320f5b686f0f7b868":"Hey Arnold! - The Movie (Europe) (En,Fr,De)","30333c382a0818d4293d5247ae428d11":"Yu Yu Hakusho - Ghostfiles - Spirit Detective (USA) (Beta)","3034c7101bceebdea95300ae9ecd7453":"Lilo & Stitch 2 - Haemsterviel Havoc (USA)","303e99bc49c209e554f395b674d49689":"Final Fight One (Europe) (Virtual Console)","305060aa2e1f0a854b772fa23988c2b9":"Metroid Fusion (Europe) (En,Fr,De,Es,It) (Beta 2)","3083072b9f5c85b5a002139d4df5b518":"Hudson Best Collection Vol. 3 - Action Collection (Japan)","308d1f33a1d96df55de6e16523dc9c8c":"Punch King - Arcade Boxing (World) (Evercade)","30a4cd474af1b4b156dbee4cfeb4c0d3":"Dai-mahjong. (Japan)","30af5ef768089d20ff9bc0d13effdaff":"Sabrina the Teenage Witch - Potion Commotion (USA) (En,Fr,Es)","30b77017492ad71ebb6775cca6038610":"Mandarin 2, The - Limoncello's Revenge (World)","30e7a35f23b2259b65844a667191c556":"Pac-Man Pinball Advance (Europe) (En,Fr,De,Es,It)","30f5a0d49aa5672707ac5751ebd1996e":"Incredibles, The (Europe) (Fr,Nl)","30ff41b3a469bad7ce39deb6d50f8154":"Dr. Sudoku (Europe)","30ff69a44658fcf2cc381736403e74ef":"Army Men Advance (USA, Europe) (En,Fr,De,Es,It)","3100fc5a4427a7b0cc20b861134e60f2":"Dragon Ball Z - The Legacy of Goku (USA)","31231965d6a43d935e3629a67e06e0bb":"Boktai 2 - Solar Boy Django (USA)","31628fe35cfe67066a003f045a32daae":"Barbie and the Magic of Pegasus (Europe) (En,Fr,De,Es,It,Nl)","318c35c343670efd4a35fe270092eefe":"Pipe Spin (World) (GBA Jam 2021)","318fd3dec910d491bace987795397bb5":"Land Before Time, The (USA) (En,Es)","319ae22870572aed14a1d7861e1c025f":"Fire Emblem - Fuuin no Tsurugi (Japan) (Virtual Console)","31aaa9b8c76c220356b4bed887c1a318":"2 Games in 1 - Monstres & Cie + Le Monde de Nemo (France) (En,Fr,It+Fr,Nl)","31aac9610e0d8a33469695e2c571be2e":"Pokemon - Liechi Berry Glitch Fix & Shiny Zigzagoon Distribution (Europe) (Kiosk)","31c33a781f3a6bd3af3a4497e6d88c3c":"WarioWare, Inc. - Minigame Mania (Europe) (En,Fr,De,Es,It)","31c90da4e415ff1abd4ba320f3fb4a6f":"Koinu-chan no Hajimete no Osanpo - Koinu no Kokoro Ikusei Game (Japan)","31d227735fbc8220de9f1a93da10e199":"Klonoa - Empire of Dreams (Europe)","31dd0e7efd461e004cfa6bad8e7b0e57":"Yu-Gi-Oh! Duel Monsters 5 Expert 1 (Japan)","31ede9e787e0f60729b2898f4e18116e":"Marie, Elie & Anis no Atelier - Soyokaze kara no Dengon (Japan)","3210f30e13b7bf65d4e5ab42235ad663":"Golden Sun (Italy)","323c4735d5911403cfcb810b294669a0":"Koinu to Issho 2 (Japan)","32490cd20b8e808da9c45aa82fa4800a":"Madden NFL 2005 (USA)","327f1553f9c9bc510069d9eaabb0f6fb":"Serious Sam Advance (USA) (En,Fr,De)","3287ca66e5cc285a9fe3a922051e84c6":"Legend of Zelda, The - A Link to the Past & Four Swords (USA)","32c54e1f584b3304d3dbaefdcde5aadf":"Guranbo (Japan) (Virtual Console)","32c77b409455bc4efbfde71d4ca4d256":"Ice Age (Japan)","32cbd7b3468b5f595876161a47f15895":"Card e-Reader+ (Japan)","32d74527bfe723470c2c5406c325fb59":"Crash Bandicoot - The Huge Adventure (USA)","331ce7f78b6a56fa50b9a329b56da658":"Pinball Challenge Deluxe (Europe)","333c21725d933d2bc0cc2209f70afd48":"Megaman - Battle Network 4 - Blue Moon (USA) (Virtual Console)","33402d100218cc080c24858ec2a0d7ae":"Kong - The 8th Wonder of the World (USA) (En,Fr,Es)","33492e64f810fb02f6dff879b8e0182b":"Bratz - Babyz (USA)","335d6415dad158195ee1290f4f955fa1":"Wagamama Fairy Mirumo de Pon! - Yume no Kakera (Japan)","337b64f47229b4284df404a69e9d17ae":"Spider-Man 3 (Italy)","33d83aec45345690ffe48ad9ed7a4ff8":"Harry Potter and the Goblet of Fire (USA, Europe) (En,Fr,De,Es,It,Nl,Da)","33de6e01f5d9c920fdeff251feb4d61e":"Santa's Chimney Challenge (World)","33de786f427b47750aaed814c761c5b9":"Bratz - The Movie (USA)","3414c77d76eb093abc478f67ef7ec3b9":"Earthworm Jim 2 (Europe) (En,Fr,De,Es,It)","342040b3d6e19f72e6d22d7f54a169c5":"Super Mario Ball (Japan)","34254b26f28ea5cec1463576ff474fe8":"Around the World in 80 Days (Europe) (En,Fr,De,Es,It,Nl)","342e05b38859d830e83722cda6e41409":"Tiny Toon Adventures - Wacky Stackers (Europe) (En,Fr,De,Es,It)","3433a199b6c8360c998de05f54fc25bf":"Oshare Princess 5 (Japan)","343c3ceb2cf89c5334f325edc4c4cae3":"Power Rangers - Dino Thunder (USA, Europe)","34a82a7281e62fdf2051b95dc0df0488":"Azumanga Daiou Advance (Japan)","34abc009c1c6fcc8588340c9bc04bd81":"GetBackers Dakkanya - Jigoku no Scaramouche (Japan)","34b0151cdc78a7a3b7cab3cda70bbc1d":"Kouchuu Ouja Mushiking - Greatest Champion e no Michi (Japan)","34b91944c89770903b4d04d40e3e8512":"Fire Emblem (Europe) (En,Es,It)","34bc4830fdd1cff2e33b8ac7fd3a6cbe":"Bomberman Story (Japan)","34f00ecb5b316478806eeca84cf62e55":"Big Mutha Truckers (Europe) (En,Fr,De,Es,It)","3507139cfb163b6df585bb5ef43388d7":"Mojie Qibing (Taiwan)","35132fb11ea80dba872a8edeb9ba42d6":"Choro Q Advance 2 (Japan)","354f699e95a171cf0725d3509c2579c2":"Green Memories (World) (v1.4.4)","355ad9613487d0ebc64ab75399ac075b":"Tarzan - Return to the Jungle (USA, Europe)","358c87fe02d8ce7207fb101839bbb820":"Chessmaster (Europe)","35ae64b0f27e60107c14ab956f6cdf70":"Kirby - Nightmare in Dream Land (USA)","35ca3b91976497cc24384f9367f16462":"LEGO Racers 2 (USA) (En,Fr)","35db4a2bacdec253672db68e73a41005":"Castlevania - Harmony of Dissonance (USA) (Castlevania Advance Collection)","35eb30c1013b72df8ec4a71a1fc1acff":"Legend of Dynamic - Goushouden - Houkai no Rondo (Japan)","3608b6ca5d044759903c08c8206f8ee4":"Slime Morimori Dragon Quest - Shougeki no Shippo Dan (Japan)","3636872e128f9c64c13bcb551c8566c0":"Nihon Pro Mahjong Renmei Kounin - Tetsuman Advance - Menkyo Kaiden Series (Japan)","3638075a07ad63a813dea97e6ad16d2c":"Crash Superpack - Crash Bandicoot 2 - N-Tranced + Crash Nitro Kart (USA)","36545c66bf7abdbced2b294a7dd8d419":"Zoids Saga (Japan)","365a0a06f8374809ec225ab2cfc255e4":"Scooby-Doo (France)","365bce291e2ed017ae5585489e036cb2":"Razmoket, Les - A Moi la Fiesta (France)","36663f8c81fc13e1f3eb739292af7941":"Jikkyou World Soccer Pocket 2 (Japan)","36697685f9c5d16af44b3d5172aa4187":"Mr. Driller A - Fushigi na Pacteria (Japan) (Virtual Console)","36916861e921121015366b7d5ec45f3e":"Tony Hawk's Pro Skater 3 (USA, Europe)","369aac3167d1f83c70a671b8febc2751":"Over the Hedge - Beesten bij de Buren (Netherlands)","36a7bb733c433afaf9e416e2c8c0ac9d":"Scooby-Doo 2 - Monsters Unleashed (USA, Europe)","36a92215bc1fd68f9db49c1be06fe088":"Chicken Shoot (USA)","36c04fe38ba46cff285b060907db94f6":"Lost Vikings, The (USA)","36c2ff60e03639dcef8e67d9e2aa602b":"James Pond - Codename Robocod (Europe) (En,Fr,De,Es,It,Nl,Pt)","36c8139a261f869d76292e83942e7470":"Metroid - Zero Mission (Europe) (En,Fr,De,Es,It) (Beta)","36e7d6e276c0e4f56984a2f8491b9364":"Spyro Adventure (Europe) (En,Fr,De,Es,It,Nl)","36eaf4fec9e81f3ea44869033996cedd":"Franklin's Great Adventures (USA) (En,Fr,Es)","36ed4c67ac05311bf3fbeda47f3ac608":"Motocross Maniacs Advance (Japan)","36efd004fd521bd4a03727347792ebd0":"Medarot Ni Core - Kuwagata (Japan) (Virtual Console)","3700b0ed17c59b333b19d2fbc7d37ef9":"Contra Advance - The Alien Wars EX (Europe) (Virtual Console)","370cc3b832f905a2b5511c1665e4a8bc":"Golden Sun - La Edad Perdida (Spain)","371e238e0398877bd758cc4cd4499ad0":"EZ-Talk - Shokyuu Hen 2 (Japan)","37205e649905cc4f714ffbb0f3b41307":"V-Rally 3 (Europe) (En,Fr,De,Es,It)","3730141d2551bea28ffeeded3996a62e":"Golden Sun - The Lost Age (USA, Europe) (Virtual Console)","3744dfea6f6e089c1d5128ca2467a705":"CCCP (World)","37477683a1e646431c5396164df388f3":"Metroid Fusion (Europe) (En,Fr,De,Es,It) (Beta 1)","3755c0a785a829114c543393ecf0cb4e":"Pac-Man World 2 (Europe) (En,Fr,De,Es,It)","37583a361558c4ba761f2cf5e56010a1":"Dragon Ball Z - Taiketsu (USA) (Beta)","37811411c46cf9a5ee91b418c6e67930":"Suite Life of Zack & Cody, The - Tipton Caper (USA) (En,Fr)","37a569f4b2ee0818f89117a5cc958e83":"Car Battler Joe (USA)","37a7507f1bee2baeed44adbff1b9c6c0":"Zoids - Legacy (USA) (Beta 6)","37b681295390ef9f55ee3222c761c4c3":"Butt-Ugly Martians - B.K.M. Battles (USA)","37de77b39b429bce433288987f9d278a":"Konami Collector's Series - Arcade Classics (Europe) (En,Fr,De,Es,It)","37f0505935e85c9cf7eebdae533536ef":"Tom and Jerry Tales (USA) (En,Fr,Es)","37f5b0e5b014994f923ac1e9e3300643":"Kaze no Klonoa G2 - Dream Champ Tournament (Japan)","37fe4eeab5274d244e5e6853881307ad":"Madden NFL 06 (USA)","37ff7a1de0322b72a6b41dea0ba53673":"Super Ghouls'n Ghosts (USA, Europe)","3841de81f12bb38566934a3657f09372":"Sky Dancers - They Magically Fly! (Europe) (En,Fr,De,Es,It)","385dc0869879128befc52c0b30ff03ff":"Planet Monsters (USA) (En,Fr,De,Es,It,Nl)","386358b358d4a578d7cdc195529016ee":"Gekitou! Car Battler Go!! (Japan)","387089984f98893405b805068fec89bd":"Spy Kids Challenger (USA)","38856f86a30538cbb3e4164da96002a7":"Sitafei De Chuanshuo (China) (Proto)","38aac4616bb56f14de9c0e7e8f86f0b9":"Robotech - The Macross Saga (USA, Europe) (En,Fr,De,Es,It,Nl)","38ad394329f52e5d58297b7249e732fe":"Fire Emblem - Seima no Kouseki (Japan) (Virtual Console)","38b0fa8bfd882b16813d166075b8f202":"Hunter X Hunter - Minna Tomodachi Daisakusen!! (Japan) (Rev 1)","38b69a345ed3a000e390645aaf6e51fc":"Oshare Princess 2 + Doubutsu Kyaranabi Uranai (Japan)","38be3f2ff554732e3b84003abe79e2bf":"Yu-Gi-Oh! Duel Monsters 7 - Kettou Toshi Densetsu (Japan)","38cfa461202a2b32e2ccc92cb6178af6":"Thunderbirds - International Rescue (Europe)","38d7fc6d3804b6f80557096fa2aeb1fe":"Maniac Racers Advance (Europe) (En,Fr,De,Es,It)","38f369f1ca0872790995943e8cb4a877":"Columns Crown (USA)","38f78ab97bbbb9bd210d8c96497f788a":"Flappy Bird (World)","3908543e922f3185cd0b73cb774e0738":"Incredibles, The - Rise of the Underminer (Europe) (En,Fr,De,Es,It,Nl,Pt)","393eb5846807df1f2e0f5c2fa77cde31":"Final Fantasy Tactics Advance (Europe) (En,Fr,De,Es,It) (Virtual Console)","3947e65e24c82d023b94878fbebf3bcd":"GBA AV Adapter (China)","394d582b5555937299c6b10ac0acc717":"Crash & Spyro Superpack - Spyro - Season of Ice + Crash Bandicoot - The Huge Adventure (USA)","39551d9b694cd4fec703e661ca08bd5f":"Rayman Advance (Europe) (En,Fr,De,Es,It) (Beta)","39564bb823b7286ad977d6428a020e5f":"Space Hexcite - Maetel Legend EX (Japan)","3981044ebb25a3db6b6f5da9725e4f4e":"Dogz (USA)","3992a0d8089401553ce3478bd9863aac":"SpongeBob SquarePants - Battle for Bikini Bottom (USA)","399e38ffba58fccf07950791fae00539":"F-14 Tomcat (USA, Europe)","39a754c5e3f4c7624a26e5fa97a2d178":"LEGO Racers 2 (Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","39a7715143dcb10b6e56427bea2f7333":"Home on the Range (USA) (En,Fr)","39bf2bbb87fb25e3c4df8475ee527199":"Pinobee & Phoebee (Japan)","39d7f5579beafc2d3cfb0485c5be3bdf":"Lord of the Rings, The - The Third Age (USA, Europe) (En,Fr,De,Es,It)","39de567a848af58c088c621c89007c4e":"SD Gundam Force (Japan) (En)","39e615ddc9695deb0dab06dbd98b7841":"Totally Spies! (Europe) (En,Fr,De,Es,It,Nl)","39f8a42133df444eeb7bf0b2194d6286":"Megaman - Battle Network 2 (USA)","3a1325d0afa9ec59246673fb01878a09":"Lilo & Stitch (Europe) (En,Fr,De,Es,It,Nl)","3a2206f7fdcb36034d9fff753964f201":"Midnight Club - Street Racing (USA)","3a32fd98b065283d09eeba1ce0542888":"Pokemon - Sapphire Version (USA, Europe) (Rev 1)","3a502cdb8f2d8e6e0e3b07685b50fa7e":"Bokujou Monogatari - Mineral Town no Nakama-tachi for Girl (Japan)","3a64d744d25a221e3f10099a5d55f155":"Ant Bully, The (USA) (En,Fr)","3a74fce97f1ea2b28c2a50ec3df0acee":"Dragon Ball Z - Buu's Fury (USA)","3a79fe76fefaee55cd4bea89940f5b73":"Futari wa Pretty Cure - Arienaai! Yume no Sono wa Daimeikyuu (Japan)","3a7afb15fc88683bbe93b9486abdeb21":"Superman Returns - Fortress of Solitude (USA, Europe) (Beta)","3a7de010d9d7bb209fe8c8670ed97fec":"Guru Logichamp (Japan)","3a7ebdeab05e826241cf19e3a064c664":"Hudson Best Collection Vol. 2 - Lode Runner Collection (Japan)","3a869b3d813a1ea0bb4c828b106f05b3":"Uranus Zero EV (World) (En,Fr)","3a92a2d56665a8aa1640fc276095659a":"Harry Potter and the Order of the Phoenix (USA, Europe) (En,Fr,De,Es,It,Nl,Da)","3aa4f5bd135064deba3394215d4c560d":"Dungeons & Dragons - Eye of the Beholder (USA)","3ac5633408cb7ac50247cdba396c5536":"Banjo-Pilot (Europe) (En,Fr,De,Es,It)","3b0dae8cd1dd848fe201f7cbaf94ced1":"Pac-Man Collection (Europe)","3b11e4cef56904bbd309690a3ca4f79f":"Crash Bandicoot Advance 2 - Guruguru Saimin Dai-panic! (Japan)","3b3cdb2583a22769fb80bae6b334dc81":"Banjo-Kazooie - Grunty's Revenge (Europe) (Beta 1)","3b3db67a969c970421af875adacb5efa":"Final Fantasy I, II Advance (Japan) (Rev 1)","3b4b6b130e527beffed75f5bfc66552b":"Another World (World) (Fr) (v1.2)","3b4b980b9031056501cfbfb7f8064df8":"Bionicle - Maze of Shadows (Europe) (En,De) (Rev 1)","3b4e5e2e7bea27f7f0089277670b7f2c":"MLB SlugFest 2004 (USA)","3b50b9f9e13e271ead33ee5a234650a9":"Mario & Luigi - Superstar Saga (Europe) (En,Fr,De,Es,It)","3b58275a454884b6fa70fa007544c998":"Egg Mania (USA) (En,Fr,Es)","3b6875ab215097e8210b618a2aef1a60":"Razbitume! - Restez Branches! (Europe) (En,Fr)","3b7a7175d8bdd4a54c41e7d0be54c6db":"Hikaru no Go 2 (Japan)","3b953c03dcc4276324b9bf95624f1c6e":"Incredible Hulk, The (USA)","3b9f6aee661c62a576b3d18058ebd813":"Dora the Explorer Double Pack (USA)","3bae05647bbee8565e3993fade2ca5ba":"Shining Soul II (Japan)","3bb63215dc9dc1ed394c9a4e2cd632dd":"Gyakuten Saiban 3 (Japan)","3bb6b3f488281c23460a717b71faa366":"Megaman - Battle Network 3 - White Version (USA) (Virtual Console)","3bc985416f6229eb8c51457c51a64f6d":"Casper (Europe) (En,Fr,De,Es,It,Nl,Pt)","3c1304ad6651e0e2c2d6741d949e4a31":"One Piece - Ilgop Seomui Debomool (Korea)","3c29c1a26c74b8b1511e17fdd66956a6":"Tetris Worlds (Europe) (En,Fr,De,Nl)","3c4895800d08531f190aaba0f92c6fca":"2 Games in One! - Marble Madness + Klax (Europe) (En,Fr,De,Es,It)","3c629e441d4842ccb9d05e1c91853f80":"Kim Possible 3 - Team Possible (USA) (En,Fr)","3c64ee4d89db9c12bc8f1cf329785cf8":"Hugo 2 in 1 (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da,Fi,Pl)","3c68616a3a2a29733bf1aacbebca01a9":"GBA Jukebox (USA)","3c971ea747a4bbdbd305c6f85c1c99ff":"Pokemon - Version Rubis (France)","3ca08a13ed9bcd779bf5da07645f3e38":"Tokimeki Yume Series 1 - Ohanaya-san ni Narou! (Japan)","3cc4c3494a707402f53fc6b6e770994a":"Rayman 3 (USA) (Beta)","3cc5e954f8adc6d313c44da31e3f8a5c":"Boulder Dash EX (Japan)","3cd35ae85906bfea4bb5a46a5e7879bc":"Sakura Momoko no UkiUki Carnival (Japan)","3cebd1599fbc2cbea21bc940445e8f2c":"Pokemon Pinball - Ruby & Sapphire (Japan)","3ceccc2582e3c35c5d729ae508dd465f":"Ford Racing 3 (Europe) (En,Fr,De,Es,It)","3cf63f7903dc07cc6b0aff9efab0886a":"Robot Poncots 2 - Cross Version (Japan)","3d0e221788ad9a43ba96c8b429e2cfc4":"Stepper (World) (v1.9)","3d1f1a4dbe50b9ec4c83c323ee7cca7a":"2 Games in 1 - Columns Crown + ChuChu Rocket! (Europe) (En+En,Ja,Fr,De,Es)","3d72e4064493e22aa7bd61a6e5b9e2dd":"Pro Action Replay (Japan)","3d7ebddc227ba7f37bb6c3cf473afaf9":"Bounty Hunter X (World)","3d803864b58e1f842dd7ac944a52367a":"everGirl (USA)","3d8fcfa27f2a659ab5f3ab0d70b9c99d":"Waliou Xunbao Ji (China)","3dac0a2fb322eebbdad45ecc1ec8a943":"TMNT (USA) (En,Fr,Es)","3db6fe46ecc0f553ee9bcf9ed3eadb10":"Deadly Skies (Europe) (En,Ja,Fr,De)","3dd4126b95d3796201149ecde2eeeb9d":"Premier Manager 2005-2006 (Europe) (En,Fr,De,It)","3dec7104aeceebf699f74845e95dd30f":"Ping-Pong Diplomacy Advance (World)","3dedf95b5692abf4a3487bb2500dd566":"Qui Veut Gagner des Millions (France)","3df76eb314f21144d2d68758c11dea5f":"Doom II (Europe)","3e1b2065b3837c14ffbd03fe205fdfd7":"Pokemon - Ruby Version (USA, Europe) (Rev 2)","3e25ac6ba3d53bc318e020341a271b07":"Super Mario Advance 4 - Super Mario Bros. 3 (USA) (Rev 1) (Switch Online)","3e4a2e644d21654e1e5c68baa9115df9":"Monsters, Inc. (USA, Europe)","3e7d93eab70699a9509d3d08bd71db87":"Drawing a Leviathan (World)","3e96ed2991e696db50a279e2854c0be5":"Hey Arnold! - The Movie (Europe) (En,Fr,De) (Beta)","3eac9cd691229b16662a9e124c8fbf66":"Muppet Pinball Mayhem (Europe)","3ec6b4cd475b62b2351a1b5ea6772311":"Prince of Persia - The Sands of Time & Lara Croft Tomb Raider - The Prophecy (Europe) (En,Fr,De,Es,It,Nl+En,Fr,De,Es,It)","3ecb36c34b0a441bad7a628760575e0c":"Defender (USA)","3eda36856917a9ab80b9bb7a930be834":"Pac-Man World (USA)","3edf62c20e5c70401c3fa78ef6489055":"Street Racing Syndicate (USA)","3edfda206746dbfd0fcce525b8d7684a":"Building Bomber (World)","3ee8e61dfe10bbfc15f51fd52eef8e14":"Puyo Pop (USA) (En,Ja)","3ef47e1b3a85631ffdc60483950a35dc":"Famicom Mini 12 - Clu Clu Land (Japan)","3f1cb5398649ff0c43673e73cad3010e":"Lion King, The (Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","3f2ecf77ac2a4255eef044c4ed4e2146":"Anguna - Warriors of Virtue (World) (v0.93)","3f5048ea5102f72aa65ac307f1cf8b8a":"Zoids - Legacy (USA) (Beta 3)","3f729eba45634801650d0ca02e2ad0bf":"AirForce Delta Storm (USA) (En,Ja,Fr,De)","3f78374401030fbbc41fb8b9b6d3a99f":"Arthur and the Invisibles (USA) (En,Fr,Es)","3f78d5830cd83c8c77406cf1d5b26462":"F-Zero - GP Legend (USA) (Proto 1) (Netcard)","3f8a30aa55bf6eb8ed4e7fd9528f61e3":"Medabots - Rokusho (USA)","3f925ce53e5be7627638b7d3df80947e":"Lilliput Oukoku - Lillimoni to Issho Puni! (Japan)","3f988d8651e3eb45c4f3b6f41d4373b4":"Incredible Hulk, The (Europe) (En,Fr,De,Es,It)","3f9ea1e569fc4405974537224bd522cb":"Revenge of the Smurfs, The (Europe) (En,Fr,De,Es,It,Nl)","3faf3e72406462a47821172f48f3dc0b":"Licca-chan no Oshare Nikki (Japan)","3fb865c5f142a8fc1f82105bfc6b8935":"Sonic Advance 2 (USA) (En,Ja,Fr,De,Es,It)","3fba6cb4144501bb21fd89789d21b23b":"Robot Poncots 2 - Ring Version (Japan)","3fbc7fda7d0bbaa03ec037e710cf1dd8":"Driv3r (USA)","3fda0c02e17c83b4b71487b13780816c":"Smuggler's Run (Europe) (En,Fr,De,Es,It)","3fe499f2a6b141ec2959e2d109e3f321":"Harry Potter and the Prisoner of Azkaban (USA, Europe) (En,Fr,De,Es,It,Nl,Da)","3ff6f06de88f0646e8cf85181ca2e10d":"Soccer Mania (USA, Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","400ead5c0c15be96de3ebacda5eedda7":"Creatures (Europe) (En,Es,It)","40124ea3efa3dbffe94ba752121375e1":"Duel Masters 2 - Kirifuda Shoubu Ver. (Japan)","40264b9c9eab1b8d1cdf834dbc05f16e":"Pferd & Pony - Mein Pferdehof (Germany) (En,De)","40265e0ccea58b86fa17f010a7e4d91f":"Konjiki no Gashbell!! - Makai no Bookmark (Japan)","4075c0553f360e180cf9efc899b1d8bc":"Animaniacs - Lights, Camera, Action! (Europe) (En,Fr,De,Es,It)","407870e802a39ef43d96e1b211bc6936":"Daredevil (Germany)","4081d5667d931445a0a26153100e9fc3":"Castlevania (Europe) (Castlevania Advance Collection)","4088fad3d25305c46072b8865e095eef":"Tony Hawk's Downhill Jam (USA)","408abffa368f995d122792bf1dbbcbc1":"Expedition der Stachelbeeren - Zoff im Zoo (Germany)","409d1eeb0117eba7c767be2fcf7226e8":"Work Life (World) (GBA Jam 2024)","40c8453a2289ff974114ebb0f3db4f1a":"Medarot G - Kabuto (Japan) (Virtual Console)","40f90b4f45a78c1810c59eb066201638":"Minna no Soft Series - Minna no Mahjong (Japan)","411574e9119177482dc07449962a904a":"Advance Guardian Heroes (Europe) (En,Fr)","4133d617f0a38053682fefb3ae752f6b":"Densetsu no Stafy 3 (Japan) (Rev 1) (Virtual Console)","41349a272e07ff38ff3a8009188ba326":"Himawari Doubutsu Byouin - Pet no Oishasan Ikusei Game (Japan) (Rev 1)","415ce33cab064fb6bb2961bb91ba26ea":"Sonic 3 - Fighter Sonic (USA)","41775d2c536152c8142089d692e24149":"Ayu Ayu Panic Advance (World) (v1.02)","41832956ab0723ca79d6883c4492fe84":"Crash Nitro Kart (Europe) (En,Fr,De,Es,It,Nl)","41a75032e074d588cd043cdd73bd9019":"Tiger Woods PGA Tour Golf (Europe) (En,Fr,De,Es,It)","41ae841d5771e442f7fb5393906cb898":"Gyakuten Saiban 2 (Japan)","41c45028c30a5f0241f5b479a954c745":"Earthworm Jim 2 (USA)","41cb1bcbd023024670bdadc4af092261":"2 Games in 1 - Disney Princesas + Lizzie McGuire (Spain)","41fabd164c0e4102c0187329e9f52c5c":"Megaman - Battle Network 3 - Blue Version (USA) (Virtual Console)","4206b6b611755dbc1557586f4077dd6c":"Hello Kitty - Happy Party Pals (Europe) (En,Fr,De,Es)","4209612a3d19c7b4cee87807e8f30d5d":"BeatBeast (World) (GBA Jam 2024)","420a1cf3e052ec30d3612d7d945c525e":"Broken Circle (Europe) (En,It) (Proto)","420ec4a917822cba68286448d2399390":"Green Memories (World) (v1.2.0)","42322e4ffcb66a6acfe340642bdc8705":"Garfield - The Search for Pooky (Europe) (En,Fr,De,Es,It) (Rev 2)","4235dbfac776ac1d3c391c740ce28892":"Ice Age (USA) (En,Fr,Es)","4261ad698a20c73552ba8b75d184a4c9":"Rescue Heroes - Billy Blazes! (USA)","426846f424d7463a86f637fdb1765080":"3 Games in One! - Super Breakout + Millipede + Lunar Lander (Europe) (En,Fr,De,Es,It)","426a1353d8ec1d3f2e11f1f0ee943fdc":"Dogz 2 (USA) (Rev 1)","42c232aaab6f088e339953d94a91e6bb":"Shaman King - Legacy of the Spirits - Soaring Hawk (USA)","42cca53c94c0bb8e5146631945bf0cd9":"Hamtaro - Ham-Ham Heartbreak (USA)","42d90bcebc174ad8ce7553071a881079":"Varooom 3D (World) (GBA Jam 2021)","42f9a789ccc93fb5ccfd63f086f5094d":"Bouken-ou Beet - Busters Road (Japan)","42fbeb32909935b02ce9f8826c86df03":"Misfortune Advance (World)","43265d5f7709133927133a331b55c61b":"Fantastic Children (Japan)","4328abd6ef7ffe7c75323db46b91ebdd":"Tak - The Great Juju Challenge (USA, Europe)","433ce4c6d525c74e3e60cdc197f6abfb":"Breath of Fire II (Europe)","434af1b315a2a337313ac82c3de078ff":"Disney Princess (USA, Europe)","436325c0208b757b2efd50e894d8d1c7":"Angel Collection 2 - Pichimo ni Narou (Japan)","43849ed3425271e56e183d6b6999dfb7":"Zhuanzhuanbang Tiantang (China) (Proto)","438be22c9e03529e2a03779a00d17b62":"Tak and the Power of Juju (USA)","43906c58afaf0760f62ec698ef10eafc":"Pokemon - Saphir-Edition (Germany)","4398aa3e3d1f826a99f5286efda20488":"Mickey no Pocket Resort (Japan)","43add71f5171685444fe591415ffae05":"Hot Wheels - World Race (Europe)","43ba75f70dc113f7f72c2ce2e7b639bb":"Legendz - Sign of Nekuromu (Japan)","43ccab5d3761e9964500a454fdf6776b":"Banjo-Kazooie - Grunty's Revenge (Europe) (Beta 2)","43cf1c2b7601db441295f12c538ae3a3":"Petz Vet (USA)","43d5d773bd64e23615c0b84a40a3d443":"Unglaublichen, Die (Germany)","43dca05b7766662a4fe5a46e81f3592d":"2 Games in 1 - Monsters, Inc. + Finding Nemo (Europe)","440c87000424a33d6c2a77b570d2d643":"No No No Puzzle Chailien (Japan)","4411d6ac05f6e818a16409894d1ec943":"Agassi Tennis Generation (USA)","441b09d96ad9daec72086c99639df063":"Super Street Fighter II X - Revival (Japan) (Virtual Console)","442bab94b7b3ba7e4a8799d18de52731":"Dragon Ball - Advanced Adventure (USA)","4445a111ace93ec2920a1eb1dd5accab":"Legend of Spyro, The - A New Beginning (Europe) (En,Fr,De,Es,It,Nl)","4462ba1869564537610250d522287815":"VeggieTales - LarryBoy and the Bad Apple (USA)","447bd53611ad8cf526895ccb46303f03":"Samurai Deeper Kyo (Japan)","4481174ebb5dc407f2bcb5fcb0c01bee":"Sangokushi - Koumeiden (Japan)","449832ada23c6bc79d1cd3978c5d9420":"Kidou Senshi Gundam Seed - Tomo to Kimi to Koko de. (Japan)","44a36f758c4328aa0ffc91ec118cf28d":"Crazy Chase (USA)","44a73ff6ac352c860ebb08625d1abdb2":"Tottoko Hamutarou 4 - Nijiiro Daikoushin Dechu (Japan)","44c0354067483b5378cb28ebb1e3476e":"Kawa no Nushi Tsuri 3 & 4 (Japan)","44c77bcf2a866a1a76cf46bd979b64a4":"Barbie Software - Groovy Games (Europe) (En,Fr,De,Es,It)","44ca4a4867aa57b442c43798b209f640":"Medal of Honor Advance (Japan)","44faf5ba9c3025ad59f53e82c8243631":"Spyro Fusion (Europe) (En,Fr,De,Es,It)","45101202229f4f91ac1f8ead62fcbd8c":"Groove Adventure Rave - Hikari to Yami no Daikessen (Japan)","451ad2324cce205bab6913abd02e5f1e":"Adventures of Jimmy Neutron Boy Genius vs. Jimmy Negatron, The (Germany) (Beta)","451c80dd3dc1f1455829219e3c550be0":"Double Pack - Sonic Battle & Sonic Advance (Japan) (En,Ja,Fr,De,Es+En,Ja)","45256cfa2c1f404cc91e6d5c34d1d4ce":"Monster Rancher Advance (USA)","4529b2bfb0b9a2303c45bfc7f15f466e":"Super Collapse! II (USA)","4564fc48460af11378ab12d5f181b219":"Frogger - Kodaibunmei no Nazo (Japan)","45743f2f955f66284775cb3c23cc46e8":"Little Patissier - Cake no Oshiro (Japan)","45880f41cfe125320e65b76bb05edaaa":"Ten Pin Alley 2 (USA)","458f1b31b305d4dccdab13be203411e0":"Best Friends - Hunde & Katzen (Germany) (En,De)","45b5c3afa9a3ada4b84eece117ed29b7":"NEONnoir (World)","45e326abf113e3b265c99fa031fdced0":"Tennis no Ouji-sama - Aim at the Victory! (Japan)","45e6e3088c5c9006175aaf045e8795e8":"SpongeBob SquarePants - Creature from the Krusty Krab (USA)","45f0b97050a666ce7ab4e3960929f47b":"Atlantis - The Lost Empire (Europe) (En,Fr,De,Es,It,Nl)","45fb38af8d17edd3bd14171d5fe3ab0e":"Breath of Fire II - Shimei no Ko (Japan)","4605b16d7d9162a77e26c090ab7a28da":"Frank Herbert's Dune - Ornithopter Assault (Europe) (En,Fr,De,Es,It) (Proto)","4638c9c0c1234d70aeb4f75099b46e47":"Anguna - Warriors of Virtue (World) (Patreon)","463ecb0def4606ca8f63071e3b1798ec":"GBA Grand Prix (World) (GBA Jam 2024)","46599031ef71117c587bd3666c326c07":"Advance Wars 2 - Black Hole Rising (USA)","468fba45dbd02710705e3fdbddb3a6df":"Strike Force Hydra (Europe)","469b5b94dd8e223a5fa1cd04e4e4c1dc":"Minna no Soft Series - Tetris Advance (Japan) (Rev 1)","46d2a77e4fd8429e6b7bf79c0679770e":"Klonoa Heroes - Densetsu no Star Medal (Japan)","46d567b74f28661ee1aeed38ff453285":"Winter Sports (Europe) (En,Fr,De,Es,It)","46e6cc0beebb0df7077540866ab98bf3":"Spider-Man (France)","46ed4e547f7b96a029c345870ce42380":"Doubutsu-jima no Chobigurumi (Japan) (Rev 1)","473c1f5bd97f5f96a5b19f3e18121d81":"Samurai Jack - The Amulet of Time (USA, Europe)","47433c75ddd92985b8807002136e8e9d":"Daisenryaku for Game Boy Advance (Japan)","47464b466905280cf769a6945bbac3da":"Flushed Away (Europe) (En,Fr,De,Es,It)","4754aa1e077cea418c77198270895013":"Hello Kitty Collection - Miracle Fashion Maker (Japan)","47596db5a16556c60027e7bf372ec917":"Pocket Monsters - FireRed (Japan)","4773e33b53acafe58f37c7d095c519fa":"Battle Network - Rockman EXE 2 (Japan) (Rev 1) (Virtual Console)","4781a8e513de51ab90292c321ac34374":"Banjo-Kazooie - Grunty's Revenge (USA, Europe)","478debc8b8ac10f23a67196180da8050":"Sitting Ducks (Europe) (En,Fr,De,Es,It,Nl)","479cb924baec02b8cb63a3f4838cdf17":"Premier Manager 2003-04 (Europe) (En,Fr,De,It) (Rev 1)","47cdd40b09021b6a7283e37b94185979":"Starsky & Hutch (Europe) (En,Fr,De,Es,It)","47e02ac1a4cc0d5f7441426469015dd7":"Stadium Games (USA)","47fe0fe1ee054ac37e286fb909e49be0":"Magical Quest 3 Starring Mickey & Donald (USA) (En,Fr,De)","480117b99ff0ce0934d5f4e3b5a952b4":"Pocket Dogs (USA)","482e89458d0154ec7231e98c61378c0a":"Street Jam Basketball (USA, Europe)","484128abb48b33871c909403c90b9b04":"Gadget Racers (USA)","487704c5d9978e88e8468d127561948c":"Proud Family, The (USA)","48822a0b1d0d90b842f6ee1c80ab08c1":"Sanrio Puroland - All Characters (Japan)","48910413ebae82c218f847a78463fbae":"Hudson Best Collection Vol. 6 - Bouken-jima Collection (Japan)","4891433baa0335ddfb0753d453ee65ab":"Dragon Ball Z - The Legacy of Goku II (USA) (Beta 2)","48c61d315e295f3e666a84c8d064f9e7":"S World 3 (World) (Beta 2)","48d7f169a879773bab490c4c1a9dfd5b":"Driv3r (Europe) (En,Fr,De,Es,It)","48d89fe21745e62460d22354111ea6e0":"2 in 1 Game Pack - Shrek 2 + Shark Tale (USA)","48df7cdc6444d804cedf290a6edd048f":"Pippa Funnell 2 (Europe) (En,Fr)","48f3bc6bf59c34f057bd98b29fd7b848":"Kurukuru Kururin (Europe)","48faeeb4917a9a9721d3d8769f4f4fb5":"Tanbi Musou - Meine Liebe (Japan)","49309e80a5acf7a4d452f6ad88238581":"3 Game Pack! - Ker Plunk! + Toss Across + Tip It (USA)","4959e99cbec8fec7e2144a14eae386d0":"Ultimate Spider-Man (Europe)","49682b2d7fb8a0953f7a88a7fd33eb73":"Toadally Awesome (World) (GBA Jam 2021)","496e1d4c049692f0ace43ec3eefc708e":"Disney Sports - Soccer (USA)","4984c5fc1e916516728521d4e5e16036":"Mario Golf - Advance Tour (France)","4990745ba11881cf35a4c860faa7038d":"Pro Tennis WTA Tour (Europe)","49a2135d9680e86ed881bf1458fe4746":"Lemony Snicket's A Series of Unfortunate Events (USA, Europe)","49a391deb9f730720ee93727144b0be6":"Rezal (World) (GBA Jam 2024)","49aa688745111aaa51076a345f8f18c3":"Shining Soul II (Europe) (En,Fr,De,Es,It)","49c6c446c5f7bc6b61e158994f8896b0":"Scooby-Doo 2 - Monsters Unleashed (Europe) (En,Fr,De,Es,It)","49c7089c334873020caf17da6579fadb":"Army Men - Sarge's Heroes (USA, Europe) (Proto 5)","49cbbfd3e38a5a7162e9b2aae5d56695":"Robot Wars - Advanced Destruction (USA) (Beta)","49dac3774e92dc924bd4fcee69f3f7e1":"Star X (Europe) (En,Fr,De,Es,It,Nl)","49e1af3afe0f16cd695def502120b380":"Lara Croft Tomb Raider - The Prophecy (Japan)","49ecc8ef1988e7ae81fbda1b4cf71eed":"Sonic Advance (USA) (En,Ja)","4a0e450c74e3e07f261a9a8f5624b788":"Sound of Thunder, A (Europe) (En,Fr,De,Es,It)","4a15b07b4dc292e9003c377c55372287":"Spyro - Attack of the Rhynocs (USA)","4a28daa8f0c619ad90ca97b3b941353d":"DemiKids - Dark Version (USA)","4a4a77b12b463a758a143642f96b1846":"Hamtaro - Rainbow Rescue (Europe) (En,Fr,De,Es,It)","4a56abd9722a5767b493b7e9bdb45c28":"Fire Emblem (USA) (Virtual Console)","4a5a274a7c2514b21ebb43b2ceade091":"Cubix - Robots for Everyone - Clash 'N Bash (USA)","4a5d8e686d55829d54a03fda8d6887d7":"Castlevania - Aria of Sorrow (Europe) (En,Fr,De)","4a6a7498b3be68b67c323b57fd8ac0d5":"Spyro Advance - Wakuwaku Tomodachi Daisakusen! (Japan)","4a7edee1aafebdcc97ee01909f14a7c7":"Metal Max 2 Kai (Japan)","4acb75f06293b30690e98740cf3e3f81":"Chicken Shoot 2 (USA)","4ae4e0d477327ce2c1e79373e1b1ca70":"JGTO Kounin Golf Master - Japan Golf Tour Game (Japan)","4b1a5897d89d9e74ec7f630eefdfd435":"Mario & Luigi - Superstar Saga (USA)","4b2678e47717c23ca7d27101662beaa6":"Doraemon - Dokodemo Walker (Japan)","4b4d0e642c8b299f3d7d1298acb0bddb":"Bomberman Jetters - Game Collection (Japan)","4b59ceea0351defb6eb4bad1dcfb38bd":"Rockman Zero 2 (Japan)","4b5aee04f0f61c5ef9343524bd2ac1d4":"Alex Rider - Stormbreaker (USA)","4b67d4ede1720fd4827af6e7ebf3c6e6":"Midnight Club - Street Racing (Europe) (En,Fr,De,Es,It)","4ba18d1ebadb424b3b944ae75dd322f0":"2 Games in 1 - Findet Nemo + Findet Nemo - Das Abenteuer Geht Weiter (Germany) (De+Fr,De,Nl)","4ba8bf225317bd0f51d8487b0a428460":"Oddworld - Munch's Oddysee (Germany)","4bb1d95611b7cfdada71f2b6a4bf961c":"Oriental Blue - Ao no Tengai (Japan)","4bda2a3e0249dfd09330dabc3aa20978":"Aladdin (USA) (En,Fr,De,Es)","4bf83da83d572a0b60613767bb23e0ac":"Naruto - Ninjutsu Zenkai! Saikyou Ninja Daikesshuu (Japan)","4bfccb544dc5f02581cc574859a82bcb":"Trick Star (Europe) (En,Fr,De,Es,It)","4c083f328ed63a20cd865f3b942e52e7":"Matantei Loki Ragnarok - Gensou no Labyrinth (Japan)","4c2cdf7e90226f7ead473b1a2c67fbe6":"James Pond - Codename Robocod (USA) (En,Fr,Es,Pt)","4c3f934ea0a5c9683a8c82fa57ff1c00":"Mary-Kate and Ashley - Girls Night Out (USA, Europe)","4c56e0d7fd251ab8ebe562c25e0ddfdf":"Rock 'N Roll Racing (Europe)","4c57eb408a29a61d7c0c3f9e2cfa15eb":"Metal Slug Advance (Japan)","4c5c302d02ecfcd274dae63461a1692b":"FIFA Soccer 2005 (USA, Europe) (En,Fr,De,Es,It,Nl)","4c67c2e4202fcf805e3bb006853ca677":"Quiere Ser Millonario (Spain)","4c84df7f486bf96316e73cd655c0f46b":"Blackthorne (Europe)","4c863f423cd8052bb3d780da001745b0":"Finding Nemo (Europe) (Fr,Nl)","4cba219bcca2320ebf9c33410b6becde":"Freestyle Scooter (Europe)","4cbcecf6c44ae7376dcaa446a95d6e2e":"Kessaku Sen! - Ganbare Goemon 1, 2 - Yuki Hime to Magginesu (Japan)","4ce8a88300a6d1efa22e34271c60fc64":"Pac-Man Collection (Japan) (En)","4d01ff5d60cfd19a61fd062efdbce0e0":"BB Ball (Japan)","4d3e531abcbbe530c0543c91d1d7d63f":"Pokemon - Versione Rubino (Italy)","4d424166fab5fe230b46793f8659e8a5":"Pitfall - The Lost Expedition (Europe)","4d5bd1475fb898e5be99b85aa45f77fa":"BattleBots - Beyond the BattleBox (USA)","4d5f240b6a56582f7743287726e6242b":"Power Pro Kun Pocket 4 (Japan)","4d7b955b9c19b13d1d776e35ce007f78":"Pac-Man Pinball Advance (USA)","4da06e60c419238f114ca2c632a094c5":"Castlevania (Europe) (Virtual Console)","4daf3d378d5f91277f43a5555829fdc7":"2 Game Pack! - Hot Wheels - Stunt Track Challenge + Hot Wheels - World Race (USA, Europe)","4db9e72d1867b8f4f745d54486bb6cf4":"Advance Wars 2 - Black Hole Rising (USA) (Virtual Console)","4dba5a79f79b2ce6189a02ce8a0d4fed":"Atomic Betty (USA, Europe) (Beta)","4dbf397ffdad3cf7e2b23cdadec02539":"Star Wars - Jedi Power Battles (Europe) (En,Fr,De,Es)","4dd5e72f942a921d3fe53d21a39f4cba":"Pokemon - Blattgruene Edition (Germany)","4df2176d0f881b309b9077d18a422f00":"Golden Nugget Casino (USA, Europe)","4e1565aa1f0627c2bf5e51019440cb70":"Dragon Ball Z - The Legacy of Goku II (USA)","4e17057f495446ea4ae146405a957309":"Finding Nemo - Aratanaru Bouken (Japan)","4e1b65a22eddc145fd7efecabff0282e":"Monster Force (Europe) (En,Fr,De,Es,It)","4e46dd3ae5c9c70c49587d093517049a":"Ace Combat Advance (USA, Europe)","4e4a6a088e9506b3535acde4a9f9e17d":"Extreme Skate Adventure (USA) (Rev 1)","4e55749ad0da668f02b325cb259909bb":"Ninja Tower (World) (Proto) (GBA Jam 2024)","4e5fde12dbd0441150a9c177e545f56f":"Super Mario Advance 4 - Super Mario Bros. 3 (USA)","4e641232755d9c8cf08c7d678bf7c570":"Super Robot Taisen - Original Generation (Europe)","4e6e4e85ede139a629320dcf0613f4a6":"Naruto - Ninjutsu Zenkai! Saikyou Ninja Daikesshuu (Japan) (Rev 1)","4e822c3e31350a457da3b640bc05e3ad":"Gremlins - Stripe vs Gizmo (Europe) (En,Fr,De,Es,It,Pt) (Beta)","4e83f7679affc32f23b51deecdbc1138":"Drake & Josh (USA) (En,Fr) (Beta)","4e8b17bb4b77cd5568b678596c55a8bb":"Aggressive Inline (USA)","4e9d8454de262002a97dbedbda524731":"Napoleon (Japan)","4ea4146cbd7ae1995475192de7c2fc42":"Turok Advance (Unknown) (Proto) (Bright Version)","4ea72eaad58ce47c8c914e8a72b78867":"Totally Spies! 2 - Undercover (Europe) (En,Fr,De,Es,It,Nl) (Beta)","4eaac54bc741daae77975b004376174f":"Harry Potter and the Sorcerer's Stone (USA, Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)","4eb435c43d7955e680355b94a6d39433":"Invader (Europe)","4ec51df6f2a3f65c0598827d3c757962":"Famicom Mini 17 - Takahashi Meijin no Bouken-jima (Japan)","4ec9300d15c45cf476705af1869c444e":"Onimusha Tactics (Japan)","4ee227a39ec91cb6d67a0828f999bd5e":"Final Fight One (Japan) (Virtual Console)","4ee4b6a61d28573502010df522a6ba91":"Mortal Kombat - Tournament Edition (USA) (En,Fr,De,Es,It)","4efb16f9d71758336db0afeb380859b0":"Bomberman Max 2 - Blue Advance (USA)","4f142c9621c9115d7107e7e6f02d99d3":"Mat Hoffman's Pro BMX (USA, Europe)","4f34ee4d9014cd0b9c6ae52df1f72af2":"Backyard Baseball 2006 (USA)","4f39dd42e67d2ef988336ef6d4bf19f0":"Super Street Fighter II Turbo - Revival (Europe) (Rev 1) (Virtual Console)","4f5f2463f25b4ee75b948c11d6312b91":"Ohanaya-san Monogatari GBA - Iyashikei Ohanaya-san Ikusei Game (Japan)","4f6338b585af7dd74fe5aad98e0ba176":"Antz - Extreme Racing (Europe) (En,Fr,De,Es,It,Nl)","4f69da882dd1b399cc9dda3b4681fec7":"Monster Trucks (USA, Europe)","4f6cff217f4941ee1c7e8d8cd082a477":"LEGO Island 2 - The Brickster's Revenge (USA) (En,Fr)","4f6d310cc67afaa9424269904229ea3b":"Tang Tang (Europe) (En,Fr,De,Es,It,Fi)","4f71a4e021f4b9319c9d4443dd710666":"Yu-Gi-Oh! - Reshef of Destruction (Europe) (En,Fr,De,Es,It)","4f7cbadb74dd6426f91429398eca5374":"SEGA Arcade Gallery (Europe) (En,Fr,De,Es,It)","4f7e62e01838cc6ca736a7b2e3dba495":"Tennis no Ouji-sama 2004 - Stylish Silver (Japan)","4f842f672b681abb0410464c762871c8":"Let's Ride! - Friends Forever (USA)","4f8f9ab44ef8c3503102c22dff34aa7a":"Famicom Mini 26 - Famicom Mukashibanashi - Shin Onigashima - Zen, Kouhen (Japan)","4f903fb4f60f42e8f12cf77475543738":"Slot! Pro 2 Advance - GoGo Juggler & New Tairyou (Japan)","4fb2b65a3388a137a681530ec11494e7":"Pinball Tycoon (Europe)","4fd3b43dc8d884ec63325d91eba0b384":"Minicraft (World) (v1.1)","4fe96ba189bc46167a95753e2f137b03":"Akumajou Dracula - Circle of the Moon (Japan) (Virtual Console)","4fed5f79cebfed5fdd67285074c8df3d":"Hero Core (World) (v0.1.2) (Beta) (GBA Jam 2022)","5036b4887c2a72fa5632dd4d19621cd3":"Medabots - Metabee (Europe) (Virtual Console)","503df54ce026cb71b6f6665d3ec50074":"Pia Carrot e Youkoso!! 3.3 (Japan)","5048d3110f72b4ba40f0b98936413a0b":"Open Season (Europe) (En,Fr,De,Es,It,Sv,No,Da,Fi)","504dc19d9f102f1f202ae76decb12998":"Rockman EXE 5 - Team of Colonel (Japan)","5054b1d5971b01a35e593048f5c43d49":"Angel Collection - Mezase! Gakuen no Fashion Leader (Japan)","50552a80c5d80210c941e4ad8230e814":"Barbie Superpack - Secret Agent + Groovy Games (USA)","5055f42473ed3f2977288181a460b963":"Animal Yokochou - Doki Doki Shinkyuu Shiken! no Maki (Japan)","5087e6801cf5269976968026127a3288":"Rayman - 10th Anniversary (USA) (En,Fr,De,Es,It)","508efc4282582038facdef65a57f70d9":"Tiny Toon Adventures - Scary Dreams (USA)","509139bb43b0fa487056e6068c46ab70":"Guilty Gear X - Advance Edition (USA)","509d45b60c2a974c508c428994338705":"Unfabulous (USA) (Beta 4)","509e3a1fe6284a75c84315a64bd33f43":"Tom Clancy's Rainbow Six - Rogue Spear (USA) (En,Fr,De,Es,It)","50a1089600603a94e15ecf287f8d5a1f":"Castlevania - Circle of the Moon (USA)","50a4ec7cc71ea0620629610e6306f299":"Pro Yakyuu Team o Tsukurou! Advance (Japan)","50c6dcc5065b594199d9fe8b764420a3":"ZooCube (Japan)","50c93eb8f7c477a5d5ef65c6842e5eeb":"F-Zero - GP Legend (USA) (Proto 11) (Netcard)","50d0ca20b90c0b2e46fe5a33d9ea6d8b":"Incredibles, The - Rise of the Underminer (USA, Europe)","50dc6c7ea18f906e0f1edad4dad8b442":"Avatar - The Legend of Aang - The Burning Earth (Europe) (En,De)","50f42c3690d985026252f3a90cc87517":"Pocket Music (Europe) (En,Fr,De,Es,It)","510747757a8d81422637656652be1c29":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 3)","51281c537425585fa0bcdad4cc0f9d35":"Anguna - Warriors of Virtue (World) (Retro-Bit Generations)","512dace284790f3a5ca14838459df5a6":"SSX Tricky (USA, Europe) (En,Fr,De)","5137fdf04021dc7817cb1be34b590adf":"Megaman - Battle Network 4 - Red Sun (Europe) (Virtual Console)","51455002b0daa27de8eaa5d9ad1afd6f":"Sims 2, The (USA, Europe) (En,Fr,De,Es,It,Nl)","51617256ac8453f10b9ed40e22a1aaf6":"Back to Stone (Europe) (En,Fr)","51664a136b5c9383258e58b384a8d9a8":"Tokyo Xtreme Racer Advance (USA)","5174f0efdb27136a8d2df79e8b932219":"Butano Fighter (World)","5179f3ae5ffb874cfbbd91a8940328e2":"GBA Tactics (World) (Proto) (NEO Coding Compo 2006)","517dde3abe8413fd0f7c21ca1bc222e3":"Pokemon - Aura Mew Distribution (Europe) (Kiosk)","5183d2ac230c5dbe614d96ab99c53922":"Bee Game, The (USA)","5186e20734061df457a430bbf963e5d9":"Disney Sports - Motocross (Europe) (En,Fr,De,Es,It)","51901a6e40661b3914aa333c802e24e8":"Pokemon - FireRed Version (USA, Europe) (Rev 1)","51a0ba2f158744619d486952f4ad01b0":"Super Mario Advance 4 - Super Mario 3 + Mario Brothers (Japan) (Rev 2) (Switch Online)","51cfc7008c7c32abd5a43eadf430a6e1":"X-Terminator Advance (Japan)","51f4450bcc65b30347805144b968c229":"Action Replay GBX (Germany)","521894f43a1cedd2b43210048e87c336":"GBA Asteroids (World) (GBA Jam 2024)","521d5e856a5420d69ff3b9752f106f7f":"PukuPuku Tennen Kairanban (Japan)","521f9ba996123f0ab3c4eef83754f48e":"Kawaii Pet Game Gallery (Japan)","52590c39a7c6793010ecfb9e17bb68a9":"Samsara Naga 1x2 (Japan) (Rev 1)","527153ae575aefe5e48ed9ccc191ba66":"Power Poke Dash (Japan)","528d272ae33823d8596f6471ddc411fb":"Van Helsing (Europe) (En,Fr,De,Es,It)","5294d185a38489831f0acb78aba1030b":"2 Games in 1 - Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (Europe) (En,Fr,De+En)","52b14fb6f8d3d311bc708813e742f6e8":"Globlins! (World) (Demo 2) (MAGFest 2025)","52c07da7db84b23b687cac98499a95a4":"Total Soccer 2002 (Europe) (En,Fr,De,Es,It,Nl)","52c4b51860b0d33a3a2466c77589a315":"uCity Advance (World) (v1.0.1) (GBA Jam 2021)","52ef9fe877fcf5f5271af1985a275f33":"Polarium Advance (USA) (Virtual Console)","52f25a25ca0debb6aa708a1a2867f271":"Shanghai Advance (Japan)","53148c6e8c9f06ad9b576d5b6014dcc8":"Anguna - Warriors of Virtue (World) (Evercade)","531b1f6688e0c646b23f78d4019dd42e":"Strike Force Hydra (USA)","5323f95f70f5d4f21bed6ec000332bda":"Pocket Monsters - Sapphire (Japan)","533268ac99bc27456dda1fc423c56911":"Gachasute! Dino Device 2 - Phoenix (Japan)","534033fe98697b1cfb9336d718bc7421":"Mario Kart - Super Circuit (USA) (Virtual Console)","534b46bba804c9a81e9c20472c292e87":"Jurassic Park III - The DNA Factor (Europe) (En,Fr,De,Es,It)","53750c05649f7344a5e2fc62c6172c48":"Top Gear Rally (USA)","5383a0d8c214f3fa64e5d8f672f6c4aa":"Megaman - Battle Network 6 - Cybeast Gregar (Europe)","538d0758f7d09a03f6631466b4d5a317":"Robots (Europe) (En,Fr,De,Es,It)","53af7b05f0ec9c4770be9f74b8a232ac":"Mooncat's Trio (World) (Beta)","53b9e7eadc7c00e6d70929e938ec4d4b":"ChuChu Rocket! (Japan) (En,Ja,Fr,De,Es) (Virtual Console)","53bfc207dd7320ad7db94e299adca245":"Love Hina Advance - Shukufuku no Kane wa Naru Kana (Japan)","53cf5670a528ef46d6d240e6c6c0c9e2":"Advance Guardian Heroes (Japan)","53d1a2027ab49df34a689faa1fb14726":"Pokemon - Ruby Version (USA, Europe)","53d97150443e4449dc1959da641d1a8e":"Golden Sun (Spain)","53dcb149b4593fba9955f842889445b4":"Lord of the Rings, The - The Return of the King (USA, Europe) (En,Fr,De,Es,It)","53e67f535c69e7c95b696abfe1ce1a2b":"Danny Phantom - The Ultimate Enemy (Europe) (En,De,Es)","53f5f0797e2882b7f4fc3c5b202fb02e":"Decoder Cart (Japan) (En) (Pirate)","54024eb18ad484126ce84d30843e0b59":"Card Party (Japan)","540379fc48a27baafbd1571dea34c9da":"Tokyo Xtreme Racer Advance (Europe) (En,Fr,De,Es,It)","5405a66d7b053281e4d48afb1e31c270":"Megaman - Battle Network 5 - Team Protoman (Europe) (Virtual Console)","54068c4366ce9072837003184b361a68":"Mission Impossible - Operation Surma (Europe) (En,Fr,De,Es,It)","5423d3057e1806348dd1f959f0be94f9":"Zen-Nihon Shounen Soccer Taikai 2 - Mezase Nihon-ichi! (Japan)","542c75b45890dca1f893a1f400b9824f":"CT Special Forces 3 - Bioterror (Europe) (En,Fr,De,Es,It,Nl)","5479685bbb7459ba67159cf430c4274b":"J.League Pocket 2 (Japan)","54908586f380cc73cb9a9eeb5d07dd89":"Crash & Spyro Super Pack Volume 3 (Europe) (En,Fr,De,Es,It)","54a1ea59c39ff418af3b009cd1ecc6d6":"Maliou Kadingche - Chaoji Saidao (China) (Proto)","54a50dbaea5a9154cc820f3fc13a34bb":"Earthworm Jim (USA, Europe)","54ac1def7820beed364a38edb65e22f0":"Maliou Yu Luyiji RPG (China) (Proto)","54aecbd6193fa4306c371916f00ff6c6":"Garfield - The Search for Pooky (Europe) (En,Fr,De,It) (Rev 1)","54bc72ab1f56930ddb05c66f118d7608":"Duke Nukem Advance (Europe) (En,Fr,De,It)","54c109b8887bce3ebc7ff3455646fa35":"Monster Maker 4 - Killer Dice (Japan)","54d23b56027bf5555fdac1d11f3bb2c3":"Jimmy Neutron un Garcon Genial - L'Attaque des Twonkies (France)","54d7f45ef822d7485b623d46a636f2e7":"Megaman - Battle Network 2 (USA, Europe) (Virtual Console)","54db03f65d646ff884cc1ede2bf9f2e5":"Pac-Man Collection (Europe) (Virtual Console)","54e147b32160ac117fb1fdecefe35302":"Hamster Monogatari Collection (Japan)","54f4ee802df00b77617ed7e2e75c27c6":"Summon Night - Craft Sword Monogatari (Japan)","54f8b4748e5f0233bc28216a0188c968":"Zatchbell! - Electric Arena (USA)","550247e8a3045024392bcabc0ea124d2":"Superman - Countdown to Apokolips (Europe) (En,Fr,De,Es,It)","55198b6049bbc81860889039e93b464e":"Medarot Ni Core - Kuwagata (Japan)","552871de5cb6bbffb69a567c05a7a665":"Shark Tale (Europe) (Fr,De,Es)","55354d9e3bc9c1fa682b5110e5ed1544":"007 - Everything or Nothing (Japan)","5539d5a40407f017fe2999663fe919d5":"Rock'em Sock'em Robots (Europe) (En,Fr,De,Es,It)","553e8c9a80190617ec13fa2a06487f2d":"Iridion II (USA)","553f4cc7ea38a44642874a8501553e26":"ESPN Final Round Golf 2002 (USA)","55440b63727ca5d2ba26e5fe240d97ad":"Action Replay GBX (Europe) (En,Fr,De,It) (v3.1)","5557fb798b7e5b05016d8269ddb9e20b":"Atari Anniversary Advance (USA)","555821a2c6e7e91a712eacbe92922ff5":"Lord of the Rings, The - Ou no Kikan (Japan)","55666fb3c6b7ef0c4a2ec3f77969110c":"Donsol (World)","5578b19468ea4f4281e9d299d67777d8":"Shrek - Super Slam (USA)","55b8193f7a2e96d6af029e2411fe22cb":"Zone of the Enders - The Fist of Mars (Europe) (En,Fr,De)","55c14323547aa4f83e5eede98d0417f3":"F-Zero - Maximum Velocity (USA, Europe)","55dcbe18e02f7d2934c537508de532b6":"Megaman Zero 2 (Europe)","55e2ee8dd7a4a6574a1c8545b7d53fb8":"Megaman - Battle Chip Challenge (USA) (Virtual Console)","55e5315f7c8b8dd97482e90e111a1fba":"Arthur and the Minimoys (Europe) (En,Fr,De,Es,It,Nl)","55eed735151b69ef84e673ef8dc42aab":"Sum of All Fears, The (Europe) (En,Fr,De,Es,It)","55fee8b8f0b9185853f02c9e064436a9":"Crash & Spyro Super Pack Volume 1 (Europe) (En,Fr,De,Es,It,Nl)","56301febe066a6c4402a8af346b0426c":"Shark Tale (USA, Europe)","5635c7e6414aaa49e323436b6313af3a":"Total Soccer Advance (Japan)","563f3b87205c05e7167de68a99a80c4d":"Premier Manager 2003-04 (Europe) (En,Fr,De,It)","56424a475e1171e608fdaaf3883c3cf9":"Ty the Tasmanian Tiger 2 - Bush Rescue (USA, Europe) (En,Fr,De)","565edd5751fa8ca5f78e3ab732dc8f01":"Kid's Cards (USA)","567b56a215ff295aca69ac85c4f08273":"Rock'em Sock'em Robots (USA)","567c4e75646947464920559892e5747f":"Black Matrix Zero (Japan)","567fec94e59f8e546fcf5d1bf4576744":"Dr. Muto (Europe) (En,Fr,De,Es,It)","56915d1408e0cf7842d6c65b1735b90b":"2 Games in One! - Gauntlet + Rampart (Europe) (En,Fr,De,Es,It)","56ac080c6bb6ecbf8f8c052d29ca534c":"K-1 Pocket Grand Prix 2 (Japan)","56adf74cf74d987fd2a66c608026269f":"Zoids - Legacy (USA) (Beta 5)","56ae7f3683083a70fd36eb509e68845f":"Koala Brothers - Outback Adventures (USA) (En,Fr,De,Es,It,Nl,Pt,Da)","56c434600bf895c83a485ab8cbe49500":"Barnyard (USA)","56d29cad9e26f1d7465f803ed1d1426b":"Megaman - Battle Network 6 - Cybeast Falzar (Europe)","570a28cd1d5137e4ee061a9fc7986476":"Wagamama Fairy Mirumo de Pon! - 8 Nin no Toki no Yousei (Japan)","571dbfec3908d625676669ed68a8f530":"Dragon Ball Z - Supersonic Warriors (Europe) (En,Fr,De,Es,It)","5747df74932735205d090aa2ad1cfece":"Winnie the Pooh's Rumbly Tumbly Adventure (USA) (En,Fr,Es)","57709c330edf8fe50cc52ce5fbfeb2f6":"Shrek - Reekin' Havoc (Europe) (En,Fr,De,Es,It,Nl)","577a14ef8e3646a2a8b3f39d9beb199e":"Power Rangers - Wild Force (USA, Europe)","577e264b8b907c407e8d03dac71500c6":"Taxi 3 (France)","57918e55c3470bd8cdb885e7bb769e42":"Koukou Juken Advance Series Eijukugo Hen - 650 Phrases Shuuroku (Japan)","579b17924207e422490e5a1fe4a52aaa":"King of Fighters EX 2, The - Howling Blood (USA) (Beta)","57af4ca36d8036a483ae0d98c27bf544":"Shin Megami Tensei II (Japan)","57d3ac8d32b263592b600dc69939b973":"Simple 2960 Tomodachi Series Vol. 4 - The Trump - Minna de Asoberu 12 Shurui no Trump Game (Japan)","57ee08bdf1400798318d5cfa699d6aed":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 6)","580cc4c0a87dd4c40901ddadd90ca76f":"Rampage - Puzzle Attack (USA, Europe)","581120b8e9bbe9b3409ff219ee3d1b78":"Space Invaders (France)","58180e01eae5278b9a8dc355d80d21cd":"Sims 2, The - Pets (Europe) (En,Fr,De,Es,It,Nl)","581a071396ac05540d7f25109e711480":"Battle Network - Rockman EXE 3 - Black (Japan) (Rev 1) (Virtual Console)","582ad48ed874c3707abbd0967a3cc6aa":"Minority Report - Everybody Runs (USA, Europe)","5835092510d600f89b0a9d17c0543099":"Dragon Ball Z Fusion - The Legacy of Goku III (USA) (Beta 2)","58435342d4e82a203246a8f4717f79d1":"Join 4 Together (World) (Proto)","58495bb95bd130a980821fd1e8ca38b5":"Hamtaro - Ham-Ham Games (Europe) (En,Fr,De,Es,It)","584fa297b632cff5b54c2def93c0de2f":"Metal Slug Advance (Europe)","5856c031f9a9dc4c3e395fe336858d9d":"Razmoket, Les - Voler N'Est Pas Jouer (France)","585a0f57c4db96b18dbf15f9c0c2fa6f":"Drome Racers (Europe) (En,Fr,De,Da)","5871a808af6c07d5c3aa91af5ed113fe":"Cronela's Mansion (World) (Demo 2)","5871ed8e3984e4353f892761b4920ad5":"Power Rangers S.P.D. (Europe) (En,Fr,De)","58730677c902c5d19d155a2b2ea78921":"Space Evangelion (World) (Proto) (GBA Jam 2024)","58aabff30ffd1dcba6e01f7a542acc63":"Pokemon - Aura Mew Distribution (Italy) (Kiosk)","58d312653a7291637fa09d541544de88":"Guilty Gear X - Advance Edition (Japan)","58ef389491ad50b30ac508319440f685":"Rockman EXE 4 - Tournament Red Sun (Japan) (Rev 1) (Virtual Console)","5909daf13d2b2e2ec30723777e7654f4":"Princess Natasha - Student, Secret Agent, Princess (Europe) (En,Fr,De,Es,It)","59118d9b87b1809a1cb50b1d42035c7a":"xXx (USA, Europe)","5914890e4fa2157e4df5388a038730f1":"Castlevania - Aria of Sorrow (Europe) (En,Fr,De) (Castlevania Advance Collection)","59240da663c9537307a05e0a465da198":"Powerpuff Girls, The - Mojo Jojo A-Go-Go (Europe) (En,Fr,De,Es,It,Nl)","59287f4fb8d29bdc306e7f45b362cc4a":"2 Games in 1 - Monsters & Co. + Alla Ricerca di Nemo (Italy) (En,Fr,It+Es,It)","5931b0b58d9da9b9aa1f82d28643e2f2":"Shining Soul (Europe) (En,Fr,De,Es,It)","5952ee810c9d2a1203d6873b8004d24a":"Lemony Snicket's A Series of Unfortunate Events (Europe) (Fr,Es)","5964add1d23b22f8947fc3372bd18306":"Danny Phantom - The Ultimate Enemy (USA)","5969f2b6f8f15afedcdb695fd3554133":"Garfield and His Nine Lives (Europe) (En,Fr,De,Es,It,Nl)","596df9a6f24ed99fe5e064ffd9382726":"2 Disney Games - Lilo & Stitch 2 + Peter Pan - Return to Neverland (Europe) (En,Fr,De,Es+En,Fr,De,Es,It,Nl)","59a449254974f537c73fb10ed5246cfa":"Men in Black - The Series (Europe)","59aba4bba551aa20bf7726eba3af13fe":"Meet the Robinsons (Europe) (En,Fr,De,Es,It,Nl)","59aee0a5bc39a0a026dcde89d6ccd4a4":"Noddy - A Day in Toyland (Europe) (En,Fr,Es,It,Nl,Pt,Da)","59cbd3c4aec998b58fe947682ce16fe5":"Rayman - 10th Anniversary (Europe) (En,Fr,De,Es,It,Nl,Sv,No,Da,Fi)","59d0027f066b620b643eb1cf213be967":"Juezhan Sanguo (Taiwan)","59efe4673056b6385379b83883b30e47":"Animal Snap - Rescue Them 2 by 2 (Europe)","59f5cb9f76bbed3afcfa391943c17633":"Action Replay MAX (Europe)","59facfa52dc4730f506a3fe41466f657":"Space Invaders EX (Japan) (En)","5a0bd0ec784823f2c45fdaa5dd914bea":"Super Mario Advance 3 - Yoshi's Island (Europe) (En,Fr,De,Es,It)","5a20b7af9d051a12d80986a2980fc1c2":"Little Einsteins (USA)","5a20e35f872bcd5c4698b1af8bff7bd7":"Disney Sports - Snowboarding (Europe) (En,Fr,De,Es,It)","5a2e10190ca3f9cb1d3a954185a031ed":"Waliou Zhizao (China)","5a35ad68ad0aed07d7865c94dca2f61a":"Get! - Boku no Mushi Tsukamaete (Japan)","5a3db0c384d089bda397e395df4270f8":"Gunstar Future Heroes (Europe) (En,Ja,Fr,De,Es,It)","5a45ae003854f9aa9c91b8e12fcf3e8b":"Monopoly (Europe) (En,Fr,De,Es)","5a6f98ebca34b1d19870481dbe3e3089":"Spy Hunter (USA) (En,Ja,Fr,De,Es)","5a84a1d3e9db2c0a77b66b71f62d5120":"Jurassic Park III - Advanced Action (Japan)","5ac646626d2d311aeb585bf0dfd9fd91":"Fantastic Maerchen - Cake-ya-san Monogatari + Doubutsu Chara Navi Uranai - Kosei Shinri Gaku (Japan)","5acb3e54e801c0619092593dbf2d3eed":"Zoids - Legacy (USA) (Beta 8)","5acc75848bb1ffd3d6d8705554ee333d":"Megaman - Battle Network 6 - Cybeast Gregar (USA)","5ad0ed7f2bbda3dab28d29b59f01cade":"Knights' Kingdom (USA)","5ae021d162364f781f33a96cd9775e4c":"Dragon Ball Z - Bukuu Tougeki (Japan)","5ae5f07bd435a1bab5ad2d505aaaf035":"Rocky (Europe) (En,Fr,De,Es,It)","5af6a63f85fa386c7889695308dc32a4":"Shaman King - Master of Spirits 2 (USA)","5b1177362243e94a5838a345eb2064bf":"Elite AGB (World) (v1.4.1)","5b2675fb3b642cdbeb563672e96480c7":"Tony Hawk's American Sk8land (Europe) (Fr,De,Es,It)","5b2c0b980e224fef620f02437f3c9ff0":"Egg Mania - Tsukande! Mawashite! Dossun Puzzle!! (Japan)","5b2d4704ce570d89ae956025bd1036db":"Rhythm Tengoku (Japan) (Rev 1)","5b3dc1a03011107cceccd102305d9083":"Dan Doh!! Tobase Shouri no Smile Shot (Japan)","5b3fe36c1893e41b7a0df26765e190cd":"Worms Blast (World) (En,Fr,De,Es,It) (Evercade)","5b565a961547d6d0980c57e2529130e1":"Hamtaro - Ham-Ham Heartbreak (Europe) (En,Fr,De,Es,It)","5b60a8135aa25e5f10578ebff120a9d8":"Yoshi Sample (Japan) (En) (SDK 3.0) (Tech Demo)","5b62667bed44c033a2848fc1bd00271e":"F-Zero - GP Legend (USA) (Proto 4) (Netcard)","5b6370434292ee73812d4f10f51a0d9e":"Aka-chan Doubutsuen (Japan) (Rev 1)","5b7cba28b1295c4c6e74801dba32588d":"Fire Emblem - Seima no Kouseki (Japan) (Beta)","5b8d896f82745a6f246fce996c0fc570":"Famicom Mini 10 - Star Soldier (Japan) (En)","5b8eb6080ae3de50d9734daacd6b92fe":"TG Rally (Europe)","5bdcaa0761daea0708df736a3ac68f9c":"Digimon Sapphire (USA)","5be55d42de4290babd1f2b0e0126e1d7":"F-Zero - GP Legend (USA) (Proto 3) (Netcard)","5bec89f235c7a558f7f79d1760d648da":"Kim Possible 2 - Drakken's Demise (USA) (En,Fr)","5bf98eb8cc6247b4edf7b9b5b08dbab9":"Broken Sword - The Shadow of the Templars (USA) (En,Fr,De,Es,It)","5bfcfc20061ab866890eb72ca78aa7a4":"Driven (USA) (En,Fr,De,Es,It)","5c0cc78c521fb9d43a99f76b920980ab":"2 Games in 1 - SpongeBob SquarePants - Battle for Bikini Bottom + Jimmy Neutron Boy Genius (Europe) (En,Fr,De+En,Fr,De,Es)","5c1230403a28121a7235d3cda810e96a":"Calciobit (Japan)","5c155e99f04ed8eb1f76f1597967064a":"Barbie and the Magic of Pegasus (USA) (Beta 2)","5c332a3e712b41e8cf61240034b8d4c4":"Tron 2.0 - Killer App (USA)","5c4957b6d2a4d6095c1f119c57d806d4":"Hamster Paradise - Pure Heart (Japan)","5c76354506a11fe8883783fa3bd07e62":"Franklin the Turtle (Europe) (En,Fr,De,It,Sv,No,Da,Fi) (Rev 1)","5c9a6664da79a4893895fd0c380fd020":"Battle Network - Rockman EXE 2 (Japan)","5cbca58a164385a5b256fff5c27b7f38":"Ty the Tasmanian Tiger 3 - Night of the Quinkan (USA)","5cc9b8d313d1ee5ea7c994dc18f85b95":"Gachasute! Dino Device - Blue (Japan)","5cd8df1c60618ce05bb26302defb0b7b":"Bratz - Forever Diamondz (Germany)","5ce228ed956c5ad5f0bc95ecfbefc848":"Wannyan Doubutsu Byouin - Doubutsu no Oishasan Ikusei Game (Japan) (Rev 1)","5ce8d92ac33646da7bbba3a058b4be3b":"Inheritors of the Oubliette (World) (GBA Jam 2021)","5d07cc8a45eae858bea6dfc97f63e813":"Metroid Fusion (USA) (Virtual Console)","5d29999685413c4d2bec10d3160f6ee6":"Final Fantasy I & II - Dawn of Souls (USA)","5d31ffa72fdecf556cdff2d760274967":"Bouken Yuuki Pluster World - Pluston GP (Japan)","5d4f385e4e1cfa4a057d0ac828993906":"Tactics Ogre - The Knight of Lodis (USA)","5d515cc0623632f162cb27bb28bb0509":"Jurl (World) (v1.0c)","5d6028dbcf8e0cebb7aac36b520d94dc":"WarioWare, Inc. - Mega Microgame$! (USA) (Beta)","5d71f1153e7de86254234662770fb007":"Kaeru B Back (Japan)","5d73b3d3b4d2843365c0515e4e629f47":"Scan Hunter - Sennen Kaigyo o Oe! (Japan)","5d8477952ac38e7dfea3a56f7544809b":"Cross Town Heroes (USA)","5d8788e5f864d576846c5fbf0a4c827a":"Tekken Advance (USA)","5d9223837dc976e6756616324c5cd2cb":"Megaman - Battle Network 3 - White Version (Europe) (Virtual Console)","5dcec1e7f6e1cbf5283d8b245fd8e1b7":"Kid Paddle (Europe) (Fr,Nl) (Beta 2)","5dd27560673dd339f43584f8301a7364":"Tom Clancy's Splinter Cell - Pandora Tomorrow (Europe) (En,Fr,De,Es,It,Nl)","5dd58cbb9dec966deef37ea4ef14577b":"Dungeon Tactics Advance (World)","5defefbbbb67bd8fbca428d3ad2c5031":"Minicraft (World)","5e2e52c6bc979aa50efb59d9386faf08":"Smashing Drive (USA)","5e35371eaf3ad42844654216b28937a8":"Spyro 2 - Season of Flame (Europe) (En,Fr,De,Es,It) (Beta)","5e3fdbba47b4f3d06e95c1250eff44b3":"Green Memories (World) (v1.4.7)","5e42d25ee9c5c16a7169f1c5a35b9451":"Dexter's Laboratory - Deesaster Strikes! (Europe) (En,Fr,De,Es,It)","5e5295484bb4cff6c487ae06fa4c4c69":"Corvette (USA) (En,Fr,De,Es,It)","5e7f2849199ea37e6629b35948757d02":"Mario Party Advance (Japan) (Virtual Console)","5ea39a20a2afb038555f013142a2a97a":"Charlie and the Chocolate Factory (USA) (En,Fr,Es,Nl)","5ea3eec1d71c05f46321ce090ca791ee":"Hot Wheels - Velocity X (USA)","5eac207f6584cfe026e2094c82afcf8c":"Simple 2960 Tomodachi Series Vol. 1 - The Table Game Collection - Mahjong, Shougi, Hanafuda, Reversi (Japan)","5eb3415a5410a167b8e83de86d0495c0":"Skyland (World) (Proto 2)","5eba0ef1c24f1b003b3063beb808ce6c":"Alienators - Evolution Continues (USA, Europe)","5ebc0f4becb9e921af11a46653ff6d81":"Castlevania - Byakuya no Concerto (Japan) (Castlevania Advance Collection)","5ec5893b655a76a884f3a228e906ffaf":"Anguna - Warriors of Virtue (World) (v0.91)","5ede045a084ef5eeb5d46807bdf16d57":"Twin Series 4 - Hamu Hamu Monster EX - Hamster Monogatari RPG + Fantasy Puzzle - Hamster Monogatari - Mahou no Meikyuu 1.2.3 (Japan)","5ee1ad6dc6974ecfc9dc3cc93b17fbb0":"Overstorm (Europe) (Proto)","5eed126956c06a047b7098e0facd7067":"Boktai - The Sun Is in Your Hand (USA) (Sample)","5ef96047ca7d55f0fc3ab581d0b12d4d":"uCity Advance (World) (v1.0.2)","5f3567dd3487f600dd2962c2fe73844f":"Activision Anthology (USA)","5f412f4e7ed5603152bced92f5b6884a":"Duel Masters - Sempai Legends (Europe) (En,Fr,De,Es,It)","5f745975ca8b358d15d3aeedd432de56":"Morning Adventure, The (Spain) (Promo)","5f98ec175e2c67d3ba28504c1706dc07":"Lizzie McGuire 2 - Lizzie Diaries (USA) (En,Fr)","5fcadb94eeb7dd0b0ba775d9cff2c886":"Fantastici 4, I (Italy)","5fcd171900998007031fa54fdaf55268":"Gakuen Alice - Dokidoki Fushigi Taiken (Japan) (Rev 1)","5fe47355a33e3fabec2a1607af88a404":"Wario Land 4 (USA, Europe)","603470cb171bc53491b0a8643f1302ef":"Crazy Taxi - Catch a Ride (Europe) (En,Fr,De,Es,It)","605286b3aedeffba70bf46b834b120b1":"Super Mario Advance 4 - Super Mario Bros. 3 (USA, Australia) (Rev 1)","6055deb1d8e3cf3df590588a89c24975":"Konami Krazy Racers (USA) (Virtual Console)","605b89b67018abcea91e693a4dd25be3":"Pokemon - Emerald Version (USA, Europe)","60619052b2bfde557f3b873fe29ecf21":"Dogz 2 (USA)","6073270fd16bfbaa50d87dd1204bb607":"Jungle Book, The (USA) (En,Fr,De,Es,It,Nl)","60782a90b8d365bf0dbe723034f8b3da":"Looney Tunes Double Pack (Europe)","607cc417603b39c571e851eb4b498103":"Tokyo Majin Gakuen - Fuju Houroku (Japan)","607e314dbe861a2dbe444052ba32c4b5":"Fire Emblem - Seima no Kouseki (Japan)","608121040215b0f108ad3ca1e3c9cb61":"Mechanic Mechanica (Japan) (Proto)","6090bbe71705b8d3a9be397f51d29e12":"Medabots AX - Metabee Ver. (Europe) (En,Fr,De,Es,It) (Virtual Console)","60ac7a006e8a00581b832ceb8a000305":"Namco Museum (USA)","60b681a9c1b892f12d84278b1f7732e4":"Minna no Shiiku Series 2 - Boku no Kuwagata (Japan)","60beefde1c43e81c95cc30c20d1e85c0":"Defender - For All Mankind (Europe) (En,Fr,De,Es,It)","60c622e488935541ee0d7295bde1ff85":"2 in 1 Game Pack - Shrek 2 & Shark Tale (Europe) (En,Fr,De,Es,It,Sv+En,Fr,De,Es,It)","60eb386e45d38b41fa10cd2535f681d8":"Army Men - Operation Green (USA) (En,Fr,De,Es,It)","60eca5e9057972a76361158cc7ab31b8":"Naruto - Ninja Council 2 (USA)","60f4b5b05656dc3760a3eab6ced61e31":"Rockman EXE 4 - Tournament Red Sun (Japan)","6116d8cca2087fdaacbf6f4390c21ffd":"Silent Scope (Europe) (En,Fr,De,Es,It)","6129c86f94b5c7ed3c725cf2af593e56":"Demon Driver - Time to Burn Rubber! (USA)","612ca9473451fa42b51d1711031ed5f6":"Pokemon - LeafGreen Version (USA, Europe)","612f5672ae601b796db01dce034a5548":"Minna no Soft Series - Minna no Shougi (Japan)","6134d1e8b4794e073413657c98f8c82a":"Boboboubo Boubobo - Maji de!! Shinken Battle (Japan)","61540060f79a51a0c4f56ec9a6a638b2":"Kaze no Klonoa G2 - Dream Champ Tournament (Japan) (Virtual Console)","61623a55ac0ff4cb97db7c9a78a477ad":"Pokemon - Edicion Rubi (Spain) (Rev 1)","61657d0452f6b4f1da6e3583ddd15021":"Pocket Monsters - Ruby (Japan) (Pokemon Box)","616f80f482ade86d88021b41587aa600":"Rayman Advance (USA) (En,Fr,De,Es,It)","61755fb44da912fba53f41dbcd41f81f":"Justice League Heroes - The Flash (USA)","617b2b2590e2925228dbdb162b05d6f6":"Crash Bandicoot 2 - N-Tranced (USA)","61aa3eabb062688c15ce723546dfc0e8":"Star Wars - Episode II - Attack of the Clones (Europe) (En,Fr,De,Es,It)","61c2b1e42c45705bc19cb905ae25bd2d":"2 Games in 1 - The SpongeBob SquarePants Movie + SpongeBob SquarePants and Friends in Freeze Frame Frenzy (Europe) (En,Fr,De,Es,It,Nl+En,Fr,De,Es,Nl)","61d0616b30f8e111ccb68004be97d4eb":"Harvest Moon - Friends of Mineral Town (Germany)","61d4355a0731c3150c36b5a704173c70":"American Bass Challenge (USA)","61eb8c6b8da8e0edc327c5ea7bd3a000":"WWE - Survivor Series (USA, Europe)","6207cb2c18a77cc408c6e42cc7f0cf10":"Shin Megami Tensei - Devil Children - Honoo no Sho (Japan)","621be236403fd8e2fc15bf4c25985837":"GBA Personal Organizer (USA)","6222d8990b98dc3702ea6b1ccad50183":"Butt-Ugly Martians - B.K.M. Battles (Europe) (En,Fr,De,Es,It)","622addba536f937a1c5b66dddb20c8b7":"Super Puzzle Fighter II (Europe)","624a73d3cb69e50c0a1cc9de726083ec":"Super Black Bass Advance (Japan)","625b7485ca6ef9d497b8fa392f627cd0":"Choro Q Advance (Japan)","625d77a12509cd5635e357d89aadfa02":"Shin Megami Tensei - Devil Children - Koori no Sho (Japan)","627b22d7e3c4dbce8191c7765c58e17a":"Pinball of the Dead, The (USA)","627fb1625974c4d04e9e38ced12795ce":"Lara Croft Tomb Raider - The Prophecy (Europe) (En,Fr,De,Es,It)","629729db859ae2f3f744f5dcd6937766":"F-Zero for Game Boy Advance (Japan) (Virtual Console)","62977938536a270190bcb89ecd5c207d":"Mickey to Minnie no Magical Quest (Japan)","62a40ea4f49b7dfd192696732306fba9":"Shrek the Third (Europe) (En,Fr,De,Es,It,Nl)","62b5ee4401a0eec948817a69011e71d7":"High Heat Major League Baseball 2002 (USA, Europe)","62b84a21cff0c51dbeead301010dc5ef":"Franklin the Turtle (Europe) (En,Fr,De,It,Sv,No,Da,Fi)","62e016b66f9880a918b37f6e269f4d00":"notenogram (World) (v1.1)","62e32a9ccf6c31850041555cb8151440":"Megaman - Battle Network (Europe)","62e74f9b0928b578764e8f466dac412d":"Minna de Puyo Puyo (Japan) (En,Ja)","62f96deebe82b3b3fddf29f0d433b006":"Megaman - Battle Network 2 (USA) (Beta) (Debug)","6300ac165dca85a863c5346b8a23ede1":"Donald Duck Advance (Japan)","630a51526ddb738fdc8392aa1c2e6500":"2 Games in 1 - Brother Bear + The Lion King (Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","630ea6281503e9c8f1d7632fa7871099":"Famicom Mini - Dai-2-ji Super Robot Taisen (Japan) (Promo)","63233c0e440c0b351ef902bfdbcf7b2e":"Blue Angelo - Angels from the Shrine (Europe) (Proto 1)","6332567f2823cf606d0259a586b012b4":"Detective Monroe - Murder at Sea (World) (GBA Jam 2024)","6341167e3c3212c632e7956cf0e69119":"Chocobo Land - A Game of Dice (Japan)","634c9f8f862ef0c5d3c7702db2fb252b":"Cinnamon - Fuwafuwa Daisakusen (Japan)","6385b15433d8cd369cadec45e5d5a783":"Camp Lazlo - Leaky Lake Games (USA)","638785b5576628fbd39d47756779130d":"Kong - King of Atlantis (Europe)","638f157064b6f57cc30d212068857b82":"Klonoa 2 - Dream Champ Tournament (USA) (Virtual Console)","63afe31b245c10c69e794e2a1d41366b":"Creatures (Europe) (En,Fr,De)","64082d14d8a4abe32fb8b062d9c0b9ed":"Barbie - The Princess and the Pauper (USA)","6408c0c1af0e89d5408970cfeb744644":"Tony Hawk's American Sk8land (USA)","6427ad3bb3d1617276d2fd0737e2d9e7":"Di Gi Charat - DigiCommunication (Japan)","643dadc449b6b43c78ecad898a0e0c83":"Wild, The (USA, Europe) (En,Fr,De,Es)","644712a277e801997624cece31b661a9":"Lord of the Rings, The - The Fellowship of the Ring (USA)","6449dc62cdf67c4d4d293febd38dcfda":"Zoku Bokura no Taiyou - Taiyou Shounen Django (Japan) (Rev 1)","6468bca90aacf0b1490c9f6d85de96ff":"Kid Paddle (Europe) (Fr,Nl) (Beta 1)","648d2ccd39bd233a841ceb966984fbab":"Monster Trucks Mayhem (Europe) (En,Fr,De,Es,It)","64a2d8dd1cfb869d4ad52c506819576f":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 2)","64b19adca4ba8ebfca983c39c7f21c8c":"Open Season (USA) (En,Fr,Es)","64c55e86bddba5c4671d2e90364f28bf":"Hello! Idol Debut - Kids Idol Ikusei Game (Japan) (Rev 1)","64ee9a205b96f5b2945e1594e8b6defd":"2 in 1 - V-Rally 3 + Stuntman (Europe) (En,Fr,De,Es,It)","64ffa9681130661c0d96f420da588005":"Ring Dash (World)","650140ccae6e1ab7af44c74986002375":"Metroid - Zero Mission (Japan)","65110a08ba48afa16c8693e88d62c10b":"2 Games in 1 - The Lion King + Disney Princess (Europe) (En,Fr,De,Es,It,Nl,Sv,Da+En)","6519cd2a2a4a4b35104502c3243279b2":"EZ-Talk - Shokyuu Hen 1 (Japan)","65295e47fa2bc35407211c331d8f6b7c":"Megaman - Battle Network 6 - Cybeast Gregar (USA) (Virtual Console)","6532702b7ed355f25f4ae6af3dc5ddea":"Paard & Pony - Paard in Galop (Netherlands) (En,Nl)","65389f698fd274e4b9a6b799fb6fbd2b":"Namco Museum - 50th Anniversary (USA)","653d319270776ce3b289c8bd14965c87":"Hobbit no Bouken - Lord of the Rings - Hajimari no Monogatari (Japan)","6540572ab503358a399861c909ee2012":"Golden Sun (France)","6544c0e0b23bb831ddf42895cfc6a528":"Scooby-Doo! - Unmasked (Europe) (En,Fr)","656b49e4db1a3ad6475b29c347a4fefc":"Banjo-Kazooie - La Venganza de Grunty (Spain)","656bec5f7d0e8389d7e6cd9cd95f1deb":"Tremblay Island (World) (Fr) (v1.1) (Solid State Version)","657823b16014bc265ab93757564e0be5":"Paard & Pony - Mijn Manege (Netherlands) (En,Nl)","65810971c9cc22e78f684cf9390a3d54":"Goldrunner (World)","65a9d554b74e8fbf06f3807e9d103bb8":"Mr. Driller 2 (Europe)","65f0e74f89304841252b598a708a65ff":"2 Disney Games - Disney Sports - Football + Disney Sports - Skateboarding (Europe) (En,Fr,De,Es,It)","65fb37341bb23e897deaa49e17ee3bc0":"Advance GTA (Japan) (En)","660b52e20c76807f03bb97bf49e15aa1":"Teenage Mutant Ninja Turtles (USA)","66211735e6762bdaa1213c9275877dab":"Zoids - Legacy (USA) (Beta 12)","662a615941bc1299de3f4cac0a6bec2d":"Lord of the Rings, The - The Return of the King (USA)","6632f33046615d90a891259d0b2678f9":"bit Generations - Soundvoyager (Japan) (En)","663bae5c5eb52177530b339441d48baf":"Ratatouille (Europe) (Es,Pt)","663ca15a48bbbc8303d52fa4664a012a":"Gem Smashers (USA)","6648a0484a56097ca75d6af87ebce225":"Pokemon - Feuerrote Edition (Germany)","665cd847efecf2a893ee74a9c42c26eb":"2-in-1 Fun Pack - Shrek 2 + Madagascar - Operation Penguin (Europe)","665f0fd0df241841961123ecf2ca73ba":"Mario vs. Donkey Kong (Japan)","6664b43c51935ea8f06f5b37ce83feca":"Sonic Advance 2 (Europe) (En,Ja,Fr,De,Es,It)","6667961aeaa0ea3e8211aa83cd1bcd11":"Action Replay GBX (Europe) (En,Fr,De,It)","6674a36645a801ce159766827ca6d8f0":"Ring Dash (World) (v1.0c)","66900cc9e3051638d89b364150b31acd":"F-Zero - GP Legend (Europe) (En,Fr,De,Es,It)","669c6124171c3dd81b5663fecae2376c":"Fancy Pocket (Japan)","669fbbd100f67d864a2028be1217719d":"Disney Princess - Royal Adventure (Europe) (En,Fr,De)","66b9f4c2c0025de207e1dc3a71340d5e":"From TV Animation One Piece - Mezase! King of Berry (Japan) (Beta)","66c0b2e21872f8e9af56292d881c1516":"Boktai 2 - Solar Boy Django (Europe) (En,Fr,De,Es,It)","66c238ea31904c09e2ee06bc465a8342":"Gremlins - Stripe vs Gizmo (Europe) (En,Fr,De,Es,It,Pt)","66e896522a91ecd1e45fde5e93920bf7":"Mighty Beanz - Pocket Puzzles (USA)","66ee915843d7f71dc99419cf589e7ae1":"iQue Video & Audio (China)","66f4a5a101822a779fdfecf366e73c96":"Snood (USA)","66f92eb2e15ba332fc613fbbecb5ffa5":"MazezaM (World) (v1.1) (NEO Coding Compo 2013)","6700959ee0f02eac47a8e273787efaae":"Super Real Mahjong Dousoukai (Japan)","6710e9e70fc995f7f7a7b8d66aa1863b":"Fairly OddParents!, The - Clash with the Anti-World (Europe) (En,De,Es,Nl)","6714ce5d3c2f6988776ec92e36b9ddda":"Sabre Wulf (Europe) (En,Fr,De)","671fc2e004f346eabf8d06c24daedd28":"2048 Pool (World)","67453491be57a22f8ddfb33c83b56ea9":"Medabots - Rokusho (Europe) (Virtual Console)","6745d2318412926b3e1118e83b8b1990":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 16)","677a6cc065d29722f5ce39cfecf863ec":"Robot Wars - Advanced Destruction (USA)","677bf7d4f8788fa5c505d5dd79309d69":"Isseki Hatchou - Kore 1ppon de 8shurui! (Japan)","678cff8d9901d9c7abedb2272968a74e":"Looney Tunes Double Pack (USA)","67a1411ea622631f469733ec01c89a01":"Yuujou no Victory Goal 4v4 Arashi - Get the Goal!! (Japan)","67b770405f7b87589e0342513b25fe9b":"Pokemon - Edicion Esmeralda (Spain)","67b7e6fab2a954aba194be3c60aeacee":"Super Donkey Kong (Japan)","67c69e7391f3a801e3f4f434206dd261":"Mike Tyson Boxing (Europe) (En,Fr,De,Es,It)","68101b735cdaf42c9eb51118b7f0d339":"Dog Trainer (Europe) (DS Cheat Cartridge)","6834ba555490be1dedae5b13f9be238d":"Simple 2960 Tomodachi Series Vol. 2 - The Block Kuzushi (Japan) (Rev 1)","6838eb5df807a0f3299ad76066d59d26":"Metal Slug Advance (USA)","68500bcbb838a9d361272f34fa20ce1a":"Finding Nemo - The Continuing Adventures (USA, Europe)","68616fe40d21d0a0d9d4b27659fc1faf":"Final Fantasy IV Advance (Japan) (Rev 1) (Virtual Console)","68817204a691449e655cba739dbb0165":"Megaman - Battle Network 3 - White Version (USA)","6889044339203f0bec9f20c478772079":"Strawberry Shortcake - Sweet Dreams (USA)","688caad7531ec6956aebbca88f07e857":"Backyard Baseball (USA)","68999d263abcf3274b5c7c7f95814b70":"2 Games in 1 - Disney Principesse + Il Re Leone (Italy) (It+En,Fr,De,Es,It,Nl,Sv,Da)","68a460a4face41897d483d3de367d809":"Backyard Sports - Football 2007 (USA)","68bdd417dd5bf3d1c88fd0b2a800e17c":"Tales of Phantasia (Japan)","68c38c871cb58802077d3ac695113f15":"Tsuukin Hitofude (Japan)","68d45d576023082a099526d5b384dd1c":"Virtual Kasparov (USA) (En,Fr,De,Es,It)","68d79f7c8f41f7c8009f3b85119cb1c6":"Megaman - Battle Network 5 - Team Colonel (USA)","68e4aa0650d2bec28c9ecc5bce7202bf":"Tristam Island (World) (v9) (Digital)","6912a215f310fa708f18e22c640cf221":"Galactic Quest (World) (Proto) (GBA Jam 2024)","69198ba531e06fa1cd9014d6d41ac0d4":"Fruits Mura no Doubutsu-tachi (Japan)","691ea58d7b3c1adb7c6e01792bd2d140":"Over the Hedge - Hammy Goes Nuts! (USA)","693bbcab772317e7e295a2b52dca175d":"Jazz Jackrabbit (USA, Europe)","6946574d398ca3ab0056af834bcb2bb3":"King of Fighters EX, The - NeoBlood (USA) (Rev 1)","6957bac168ff27f70df74629751b3f5c":"ChuChu Rocket! (Europe) (En,Ja,Fr,De,Es)","695db30277493070eb57d61c254cd2a6":"Bakuten Shoot Beyblade - Gekitou! Saikyou Blader (Japan)","69662d33f665b2e00e4f95aa75b16a6a":"X2 - Wolverine's Revenge (USA, Europe)","69a9f59169766cda7ebc29be820a78a3":"Prince of Persia - The Sands of Time (Europe) (En,Fr,De,Es,It,Nl)","69c1871ad475586884f8f438c8fdfa68":"Pitfall - L'Expedition Perdue (France)","69ce1adb9a8be5c49ca2044c97fa24cb":"Super Donkey Kong 3 (Japan)","69e2667db46cc5249bb26b6741b22519":"Get's!! Loto Club (Japan) (Proto)","69fa9eaec8026edb3eaeac72ade14457":"Mario Golf - Advance Tour (USA) (Virtual Console)","69fc21c7cebb4e81d0c9068fddd7b309":"American Dragon - Jake Long - Rise of the Huntsclan (USA, Europe) (Beta 5)","6a06b7c152538ce846fbdf523902a000":"Barbie in the 12 Dancing Princesses (USA)","6a0d1dd9bc181792f61f7c92262392c4":"Cruis'n Velocity (USA, Europe) (Beta)","6a1b056d8a006e069466c08c69de56c0":"Shining Force - Resurrection of the Dark Dragon (USA)","6a496546576101291a97a93846f0d9dd":"Spyro Orange - The Cortex Conspiracy (USA)","6a4f0c3e9d9024ebcaebc29cc3692559":"Rockman Zero 3 (Japan) (Virtual Console)","6a52067a659df5e992f4323965c06c27":"Relaxuma na Mainichi (Japan)","6a987dc5a8f0e87e1e055ee65f7e99c9":"Lion King 1 1-2, The (USA)","6a9f7047118ac9b10de1b570a9b8ea77":"Tennis no Ouji-sama 2004 - Glorious Gold (Japan)","6aa8f04421ad88f8f854fd0525b5a1a0":"Mahjong Keiji (Japan)","6abb6f0cae01053f54f2015bff2f3c0d":"Diddy Kong Pilot (USA) (Beta 1)","6ac288a44178e8061005f00fe2e564bc":"Nos Voisins, les Hommes (France)","6af04804f4fae08202becbbfc1cc9e98":"Harry Potter to Kenja no Ishi (Japan)","6b00a4d7d88bb4b78fc014cc50bce319":"Double Pack - Sonic Pinball Party & Sonic Battle (Japan) (En,Ja+En,Ja,Fr,De,Es,It)","6b0b7e5eea8bf6e981621da45d59163a":"Travis Pastrana's Pro MotoX (USA) (Proto)","6b0da7e87963d644d4ddaabe107f09bf":"Magical Quest Starring Mickey & Minnie (USA)","6b423fd7f0b4cc280a6208f66671a9c1":"Star Wars Trilogy - Apprentice of the Force (USA) (En,Fr,Es)","6b611dc9657c75d06808c198c4b51aac":"Whac-A-Mole (USA)","6b618c3fa5f38736632781b0a1ed2d23":"Backyard Skateboarding (USA)","6b658df91f3ffc3a97db7e2bf9753a16":"Polarium Advance (Europe) (En,Fr,De,Es,It)","6b69abb89c7b213ee1e864c99349f1b5":"Shiruike II - Yu Meiren (Taiwan)","6b77b1be67aecdb8964b4528573bcfc5":"Strawberry Shortcake - Ice Cream Island - Riding Camp (Europe) (En,Fr,De,Es,It,Nl,Pt,Da) (Rev 1)","6b9533f53075390cbb31078ba5d13346":"ESPN X-Games Skateboarding (Europe) (En,Fr,De,Es,It)","6b99728fa21d6c6442bd1ebe919affa7":"WinX Club - Quest for the Codex (USA)","6bcd924eec542998cc12b6c3533efb58":"Robopon 2 - Ring Version (USA)","6be741eea41598baeed52e4dd7ddb9f5":"King of Fighters EX 2, The - Howling Blood (USA)","6c03328f60bebf5b8444558c45a6eec3":"Dog Trainer 2 (Europe) (DS Cheat Cartridge)","6c09cbd11ae826b83fe54e3f99a17477":"Titeuf - Ze Gag Machine (France)","6c1359c2f5c4386c41b93eaf5534119b":"American Dragon - Jake Long - Rise of the Huntsclan (USA, Europe) (Beta 2)","6c1cd0e60faebda42b2804d749e351e2":"2 Games in 1 - Disneys Prinzessinnen + Der Koenig der Loewen (Germany) (De+En,Fr,De,Es,It,Nl,Sv,Da)","6c1de42661ca9ca859620753d8e12083":"Rocket Power - Beach Bandits (USA, Europe)","6c36961dc125f8507c941888640a0272":"Phantasy Star Collection (Europe)","6c3b602d9f8db3d36afb5c0046d01ba9":"Mario & Luigi RPG (Japan) (Virtual Console)","6c44b49d69e6c0576197742f20250c40":"Star Wars - Episode III - Revenge of the Sith (USA) (En,Fr,Es)","6c46a8915417f065ed1e209a02a4b1f5":"Dragon Ball Z Fusion - The Legacy of Goku III (USA) (Beta 1)","6c4adc19a909f934c7c01c4f889a12d9":"Dogz - Fashion (USA)","6c653de4749981579252e59fcae956d5":"Megaman - Battle Network 4 - Blue Moon (Europe)","6c6910864be012d8afe00364d6ddaa05":"Mirakuru! Panzou - 7-tsu no Hoshi no Uchuu Kaizoku (Japan)","6c8460b00a7dcade834b0579116771db":"Hachiemon (Japan)","6c8d2bdd88fd5778e3a84a51ef3f6c10":"Tremblay Island (World) (En) (v1.1) (Solid State Version)","6c923128bbe3baf6b242f58b8b1e4154":"Cinnamon - Yume no Daibouken (Japan)","6cb4dc8b610a4238a159a7037185540d":"Crouching Tiger, Hidden Dragon (USA) (Beta 3)","6cb83eee0a7d64542ce166cd6d50081a":"Digimon - Ruby and Sapphire (USA)","6ce00cd216c0b7c3d3abe895540480a9":"Zettaizetsumei Dangerous Jiisan - Shijou Saikyou no Dogeza (Japan)","6ce6741e0a522351047b79851cd2d651":"Mission Impossible - Operation Surma (USA) (En,Fr,Es)","6ce88b00f7ccf862f6386866dcc91558":"2 Games in 1 - Sonic Pinball Party + Columns Crown (Europe) (En,Ja,Fr,De,Es,It+En)","6ce9bb835428a17300fd191c7b9d8ece":"Prehistorik Man (USA, Europe) (En,Fr,De,Es,It,Nl)","6cf0014cf59609e976d4a82b01db90be":"SpongeBob's Atlantis SquarePantis (USA)","6cf0aca170ffe4141657c904f3924b9b":"Back to Stone (Europe) (En,Fr,De) (Beta)","6cff8b06c18dfafdc44a2c5725f6efe2":"Prince of Persia - The Sands of Time (USA) (En,Fr,Es) (Rev 1)","6d0aef7b4a8ab01db3c27284df771a81":"Colin McRae Rally 2.0 (USA) (En,Fr,De)","6d36b3e2ea32702bbe2c9ff16426a644":"Tron 2.0 - Killer App (Europe)","6d61c02022243c2f815e071f4a209f08":"Harlem Globetrotters - World Tour (USA)","6d676a8cb2d528a647e62110653418a8":"Summon Night - Craft Sword Monogatari - Hajimari no Ishi (Japan)","6d7d6cd0d1bde4855b230ad510e16771":"Iron Kid (Korea)","6d820b583b6ab2cc5c901d56b43e38cb":"Prince of Persia - The Sands of Time (USA) (En,Fr,Es)","6d8f418e5b5ef1929ca9518c34d0bde6":"Bratz - Rock Angelz (Spain)","6d9c1a92c3b43e833676e7a2fbc0c5fe":"Tekken Advance (Europe)","6da3b3fbe2049ecb796fc7486a7e140e":"Tantei Gakuen Q - Kyuukyoku Trick ni Idome! (Japan)","6db14ec7d0443807ecd615e72e12e0cd":"Formation Soccer 2002 (Japan)","6dbd1f78af20f0034a05c396db83b86f":"CT Special Forces (Europe) (En,Fr,De,Es,It,Nl) (Beta)","6dd162a103fb55ddf99b6e688019354f":"Kirby - Nightmare in Dream Land (Europe) (En,Fr,De,Es,It)","6dd36759f4b1229d2d66f1c28511417d":"Charlotte's Web (Europe) (En,Fr,De,Es,It)","6ddc7f2d8949448c198fc1183bcbcb0b":"Dragon Ball - Advance Adventure (Korea)","6decd38b78a1aab5b895c85a1d380bcf":"LEGO Bionicle (Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","6defee926d517f2821dfb5e7e16eb565":"Sweet Cookie Pie (Japan)","6e1d30aec9ab1cc56a3740129d5ad75c":"Tennis Masters Series 2003 (Europe) (En,Fr,De,Es,It,Pt)","6e2fc7fc2915afb2c0f3a833c62f4c20":"Phalanx (USA)","6e39bac68382b18dbfe5c7dd548c9a16":"Biene Maja, Die - Klatschmohnwiese in Gefahr (Germany)","6e634bc67ce8e9afdaec1801e6c08b30":"Pokemon - 10th Anniversary Distribution (Italy) (Kiosk)","6e6a8f38f19cf0f98bc52c324143aa64":"Dragon Ball Z - Supersonic Warriors (Europe) (En,Fr,De,Es,It) (Beta 2)","6e76914fa33b3436079ac16ecf778d15":"Ecks vs Sever (USA) (En,Fr,De,Es,It)","6e7cab07891a9b580c228401120e8dd4":"Rockman EXE 5 - Team of Colonel (Japan) (Virtual Console)","6ea2c5e69ef027c80c54a6b231706fab":"Uno - Free Fall (USA)","6ea428eabf05d2c51ed21b5608c5db21":"Spider-Man (USA, Europe)","6ea5fc0e4b56a232ac3cbdab4b4a6bcd":"Final Fantasy Tactics Advance (Europe) (En,Fr,De,Es,It)","6ea76fbfa326b0b7fd31c5f6050f23ff":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 14)","6eb4a3639f10155ad9a09bbaf46144d5":"Final Fantasy I, II Advance (Japan) (Rev 1) (Virtual Console)","6eca1c34b7a0c04c78341687e5079717":"Famicom Mini 30 - SD Gundam World - Gachapon Senshi Scramble Wars (Japan)","6f152b5eb5292f837b2d75b101ee9d55":"Dual Blades (Japan)","6f16195283a6f16fc73c95c69f131b68":"Gradius Galaxies (USA)","6f1edd8d1a8091636a1685def759e602":"2 Games in 1 - Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (USA)","6f31f72e340681f2bb742097b7c593e8":"Cocoto - Kart Racer (Europe) (En,Fr,De,Es,It)","6f3245a38bb2eba60fd4af25429f1122":"Keroro Gunsou - Taiketsu! Gekisou Keronprix Daisakusen de Arimasu!! (Japan)","6f4148477f8d456c00c4099e990c2fb0":"Urban Yeti! (USA, Europe)","6f77e7bfa48f13113ed42aaafc791368":"2 Games in 1 - SpongeBob SquarePants - SuperSponge + SpongeBob SquarePants - Battle for Bikini Bottom (Europe) (En+En,Fr,De)","6f95dd3e97e52d41c5ba69adf8e506af":"2 Games in 1 - Disney Princesse + Le Roi Lion (France) (Fr+En,Fr,De,Es,It,Nl,Sv,Da)","6f9802a7094757a4e535f763ff9b7de4":"Medarot G - Kabuto (Japan)","6fd5903fb649cb05007052999f2bdbf3":"Tarzan - Rueckkehr in den Dschungel (Germany)","6fe31df0144759b34ad666badaacc442":"Megaman - Battle Network 3 - Blue Version (USA)","6ff16e52b08129b6bb1a650f9adfd603":"That's So Raven (USA)","7021a7a902f4b18d08839322d8bd9166":"Rick Dangerous (World)","70245e4d52cfb1af2533fedc6191dcb5":"Aladdin (Japan)","702adceec8c8ab1ee27917e75448bbf6":"Tringo (Europe) (En,Fr,De,Es,It)","7031e05fea8257a2658683436b0e3db1":"Cars (Germany)","7032afec42057ec6f0c8850d5d7531a9":"American Dragon - Jake Long - Rise of the Huntsclan (USA, Europe) (En,Fr,De,Es,It) (Beta 7)","70351a87511a012d5985d525cfc7baf2":"Himawari Doubutsu Byouin - Pet no Oishasan Ikusei Game (Japan)","704943bd18075740bc9157a34d8c612f":"Lode Runner (Japan)","70541c3e9c5d18b151a5d41c79134cc9":"Aleck Bordon Adventure - Tower & Shaft Advance (Japan)","706163c6ecdd4e595eb49cce8107d0fc":"Frogger - Mahou no Kuni no Daibouken (Japan)","70799d419a58f1055b3271587c04e204":"Forever RPG (World) (GBA Jam 2024)","70a33b660d40faeb7b43766cea189030":"Fanqiejiang Wangguo Da Maoxian (China) (Proto)","70a5faaf9b9bfe3bebd8ccff75a6155b":"Power Pro Kun Pocket 4 (Japan) (Rev 1)","70ed2328306fa863bf144b7fdcdbfdfd":"Boulder Dash EX (Europe) (En,Fr,De)","70f0e0ba86c9bc154a32e9d583963825":"V-Rally 3 (Japan)","70fa9e5d34134d1b46d9abdb43fea624":"Tales of Phantasia (USA, Australia)","7109869b364d162a673b25b5604ebb57":"AirForce Delta II (Japan) (En,Ja,Fr,De)","710ac1eb3062a922652505e055ecb7b1":"Shimura Ken no Baka Tonosama - Bakushou Tenka Touitsu Game (Japan)","71259fb2bf7adeb9b5d8c84619a2531e":"007 - NightFire (USA, Europe) (En,Fr,De)","7146102bb4d37865198dbe6881d2af9a":"Super Robot Taisen - Original Generation (USA)","7154c6dbd189d69598d1f50b533a3019":"Driv3r (Europe) (Es) (Beta 2)","718285dfbe8b0f7278b024762b5899f7":"Ougon no Taiyou - Ushinawareshi Toki (Japan) (Virtual Console)","71876e289c249135a87d326251bfe85b":"notenogram (World) (GBA Jam 2022)","7194f25da6be4548f7e0c80f73e3f628":"Sonic Battle (Europe) (En,Ja,Fr,De,Es,It)","719a2e779f51cbc92a5a81b1de6a99d4":"Metroid Fusion (Japan) (Virtual Console)","71b00ba406c522d3cec48311bd7bc760":"Megaman - Battle Network 5 - Team Protoman (USA)","71b728433530fd17f4a7f86e15309734":"Mario Golf - GBA Tour (Japan) (Virtual Console)","71c5d8e089d0c1b15b4e376515bd4f18":"Strawberry Shortcake - Summertime Adventure (USA)","71d13db41e98b9798e9aea3ab8867be4":"Brush Rush (World) (Proto) (GBA WinterJam 2023)","71dc8aef347427313f5cfa63986337b4":"Weekend Miljonairs (Netherlands)","71dffd1adcef71adf9d4ca089b08b6b2":"Famicom Mini 08 - Mappy (Japan) (En)","72018660652b494d553d41d5b1767f7e":"Jurassic Park III - Park Builder (USA)","720a562a8174c520ff1571c5e3223b39":"Monster House (USA) (En,Fr)","722051662ec02aa9ce30b934616063c2":"Super Street Fighter II Turbo - Revival (Europe) (Rev 1)","723ee616e311bd9f8584405637d9128c":"Bomberman Max 2 - Blue Advance (Europe) (En,Fr,De)","725464612806a42c2c15e455005a4ef9":"GT Racers (Europe) (En,Fr,De,Es,It)","725e49b6955589696462e8b65f62c2ef":"Winning Post for Game Boy Advance (Japan) (Rev 1)","72602c894450147ced8161ef48f784d8":"Tom and Jerry in Infurnal Escape (Europe) (En,Fr,De,Es,It)","728d2ba4fb710cc696e401f797ff1397":"Metal Max 2 Kai (Japan) (Rev 1)","729069ee00dad63007eb77cb892e4627":"Premier Manager 2004-2005 (Europe) (En,Fr,De,It)","729bf3ff498b73f09885ba38735a2858":"Bionicle Heroes (Europe) (En,Fr,De,Es,It,Da)","72f072d0e26a9e3d12b6107598cbaf69":"Yu-Gi-Oh! - Dungeon Dice Monsters (Japan)","7331deea4c627b772d7b271b3eabb7af":"Hamster Paradise Advanchu (Japan)","7335165118ee0eb99c3a911bd2f73ce3":"Contra Advance (USA) (Beta)","733e976fd06d65e9f5635b836a14a81b":"Super Mario Advance 4 - Super Mario Bros. 3 (Europe) (En,Fr,De,Es,It) (Rev 1) (Virtual Console)","735502d07870f82fd78fe07badeeb33b":"Kikaika Guntai - Mech Platoon (Japan)","7357dacd671dd3af8bd4a528d0f85493":"Battletoads (USA) (Proto)","739dd0f3a4dc829600643fd2c00fc23c":"Titi et les Bijoux Magiques (France)","73a3d8f718dd371836632b8e30df4de0":"Ochaken Kururin - Honwaka Puzzle de Hotto Shiyo (Japan)","73d90562373b2b0882354986aabdd61f":"Bruce Lee - Return of the Legend (USA)","73ddea9abd509f650addd4998e86976f":"Rockman EXE 4 - Tournament Blue Moon (Japan)","73eff6b21373100b28cc2f70f052a7d5":"Chip Advance (World) (En,Fr) (v2.1)","73f3cd746bca7763fa0452ffe04556f5":"F-Zero - GP Legend (USA) (Proto 6) (Netcard)","7406c224589f1a2f57feff5eb3c177c3":"Need for Speed - Porsche Unleashed (USA)","740f84915f53447d3afb111acdfb0677":"Shifting Gears - Road Trip (USA)","74439cfebabb5616fbc00c8f7f9f747e":"Three-in-One Pack - Sorry! + Aggravation + Scrabble Junior (USA)","74443f278fdf9931255035430632da3c":"4x4 Off-Roaders (Europe) (Proto)","7452f7a8e88435a3c4010262a78037e6":"Spider-Man (Germany)","74673493300b2e927c2a4198e7996a7a":"Super Mario Advance 3 - Yoshi's Island (USA) (Virtual Console)","747b6e33299deed3e9fe71c4352f5966":"Sitting Ducks (USA) (En,Fr,De,Es,It,Nl)","74965e4a985f8a27ae12d526c032daea":"Jajamaru Jr. Denshouki - Jalecolle mo Arisourou (Japan)","74d3fd11921e0cd02955a6b59fe75e0f":"Punch King - Arcade Boxing (USA)","74ea076a8976acc454312f8ecd40e566":"Hello Kitty - Happy Party Pals (Europe)","74ea809aea3e45d9638c2997bb5d0a3d":"Unfabulous (USA)","74eb3f183512c83c72473a6a03662e03":"Turok - Evolution (Europe) (En,Fr,De,Es,It)","7506c14af1c1e6b6e64a3ac393c4004d":"Jet Set Radio (Europe)","75119296de2c0024af1ae9c5542ab80a":"Ratatouille (Europe) (Fr,De,Nl)","7512e1d5b00d7d5feb8ec02d2e835ed1":"Dora the Explorer - Super Star Adventures! (Europe) (En,Fr,Nl)","7527b877dbfd93ab0466520ea58d6407":"Mr. Driller 2 (USA) (Virtual Console)","752ca5b3a76784e3261cb60af80a84e7":"Guranbo (Japan)","753971af89a797d2c0bad3198d56963c":"Cross Town Heroes (Europe)","756d21329f1f1f6d64001af203ff42b4":"Unfabulous (USA) (Beta 6)","759281beed4bfa975262fd49028efebb":"Megaman - Battle Network 5 - Team Colonel (USA) (Virtual Console)","75af521c08dea3eed23d31c002a3e47f":"Frogger's Adventures - Temple of the Frog (Europe) (En,Fr,De,Es,It)","75c1c26d74bf1ecd4e8c2d1e84db804f":"Salt Lake 2002 (Europe) (En,Fr,De,Es,It,Nl)","75ec8b0b1bc187f559b3571a0f0dfa4d":"Dogz (Europe)","75fca6eeccf730d5b9883fa333f6b268":"2 Games in One! - Gauntlet + Rampart (USA)","760490d2224d727b149eb47617d02a5e":"Final Fantasy Tactics Advance (Japan)","7612ee1da917451f53e634c09a7fe838":"Mr. Driller 2 (Japan)","761668b5d01ee9b8e52174eadb5fd2cf":"Super Mario Advance 4 - Super Mario Bros. 3 (Europe) (En,Fr,De,Es,It)","7618d824c146a521ecaad69d4b8443ea":"Deal or No Deal (USA)","762e95819d0ea7039df160ae6e8c5635":"2 Jeux en 1 - Titeuf - Ze Gag Machine + Titeuf - Mega Compet (France)","7637dee40a006fdb2fb47192ea203a04":"CHEESYchords (World) (GBA Jam 2024)","763fc686e0e12ddb53e0cf9c0f27854a":"SEGA Smash Pack (USA)","76418e6aafecfdf46400a6582ed1cd9b":"Army Men - Sarge's Heroes (USA, Europe) (Proto 2)","7642f18e0d52aaa52245d20692827de9":"Starsky & Hutch (USA)","76471b9410d123fe28bab047a4e4841e":"Whistle! - Dai-37-kai Tokyo-to Chuugakkou Sougou Taiiku Soccer Taikai (Japan)","765178ed4d402033ef7ed6b82d059f5a":"Pokemon - Edicion Verde Hoja (Spain)","766f6e0b917707f098faf6501207a94c":"All-Star Baseball 2004 (USA) (Beta 2)","76759e14e1a4072397c105419d702735":"Famicom Mini 24 - Hikari Shinwa - Palthena no Kagami (Japan)","76873c9aaaf31d1b6e520145bdd9a8a6":"Pro Mahjong Tsuwamono GBA (Japan)","7692b7d8c05131be5a632b043497b1d3":"Fuzz & Rocket (USA) (Proto)","76a7ea795f7797923016e348972195e7":"Skyland (World) (Proto 4)","76aad0726be3ac24f3c5a7a8e64379d3":"Spyro - Season of Ice (USA)","76bd3ac13808b1d6abea377815b10adb":"ChuChu Rocket! (USA) (En,Ja,Fr,De,Es)","76c21df8ccd134c578dbfdd2bf139479":"Pokemon - Doel Deoxys Distribution (Netherlands) (Ja) (Kiosk)","76cb4acb0c2a8076429e32ef4aa475d5":"Dragon Ball Z - Supersonic Warriors (Europe) (En,Fr,De,Es,It) (Beta 1)","76cccc133899422854687e672f335cbd":"Sangokushi - Eiketsuden (Japan)","76cdc3ec8b886f378ebc6de368399220":"Disney Princess - Royal Adventure (USA)","76cf35708da4293e14ba6bee572597e3":"SpongeBob's Atlantis SquarePantis (USA) (Beta)","76deaaafe8cd89891c8fb2d4e1b5deaf":"Dokodemo Taikyoku - Yakuman Advance (Japan)","76e7dac53db04f2b4fbc792659954c7d":"Tongqin Yi Bi (China) (Proto)","76ee3d4939d436a42c5982de9081b54d":"Castle Master (World)","76ff10072fbe28737918120c9021c741":"Next Generation Tennis (Europe) (En,Fr,De,Es,It,Pt)","76ff83e819c83f27f02fd4d59af155d7":"International Superstar Soccer (Europe)","776ae8434c5a946b19b91264b1f7da86":"Kawaii Pet Game Gallery 2 (Japan)","777aae9f6cb431fa3f2654bd1e3b1ef0":"Scurge - Hive (Europe) (En,Fr,De,Es,It)","778283248de1ae090a006f59e8596ba4":"Famicom Mini 29 - Akumajou Dracula (Japan)","778eb070e354caa92a1ba7e8b5d5df29":"Fairly OddParents!, The - Clash with the Anti-World (USA)","77b95f886779b5c82c726679c498ce09":"Crazy Taxi - Catch a Ride (Europe) (En,Fr,De,Es) (Beta)","77cf6a578131f4ccb2d94532a80e12ae":"Wanko Mix Chiwanko World (Japan)","77d05464a1ac01ef466f784c701828fe":"Winning Post for Game Boy Advance (Japan)","77e321bc21cbe892780d34863354116a":"Yumemi-chan no Naritai Series 3 - Watashi no Makesalon (Japan)","77edf4f506b3343e15efe61d64944eba":"Super Monkey Ball Jr. (USA)","77fdfc944c31ccb0270c73e801cc20b0":"Moto Racer Advance (USA) (En,Fr,De,Es,It)","7812b2e8a0ac8f77e8347d6499ab0160":"Rebelstar - Tactical Command (Europe) (En,Fr,De,Es,It)","78141df5f1af636a7f8225d15b14fc31":"Kong - The Animated Series (USA) (En,Fr,De,Es,It,Nl)","782ecbf2e6b30ea684b34ce3e21310da":"Famicom Mini 28 - Famicom Tantei Club Part II - Ushiro ni Tatsu Shoujo - Zen, Kouhen (Japan)","783fc5f14f1fc83a32a57f8a16a3ca8f":"Metal Warrior 4 - Agents of Metal (World) (v1.1)","7844309a174e721757f6149fc7de3af0":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 11)","784a036ff1aae709e90167186639b75e":"Mario Kart - Super Circuit (USA)","784b6d3c7eeb2c98078f5b7d7d637f75":"Castlevania - Akatsuki no Minuet (Japan) (Castlevania Advance Collection)","784e266e768506888dd0f656fd7cf715":"Foster's Home for Imaginary Friends (Europe)","78672ead9f35f00e467f8c7d308acdfc":"Contra Advance - The Alien Wars EX (USA)","786f7eb410874f57bc800117a172879c":"Famicom Mini 07 - Xevious (Japan) (En)","786fc5aff6a10efd3e3585ba10ebc863":"Manic Miner (Europe) (En,Fr,De,Es,It)","78724b3f7e5de9f1c931d5b196e7f19b":"Worms - World Party (Europe) (En,Fr,De,Es,It)","7875568eabab6210267bea6215306b22":"Lau Gurpil (World) (Demo 2)","78c34b8026991ab7b0a4990e1af5d9b5":"Beyblade G-Revolution (USA)","78db66a92f5f4405266e154de49eea8d":"Medal of Honor - Infiltrator (USA, Europe) (En,Fr,De)","78decb6a1cbed75cd7939884d2c52101":"Black Sigil - Blade of the Exiled (USA) (Proto)","78e7ff46ee220f8b6cff4a73c0439eb4":"Mortal Kombat - Deadly Alliance (USA) (En,Fr,De,Es,It)","78fda8ce4a49d92f1a7ef3cfd6ae7dfb":"Archer Maclean's 3D Pool (USA)","790e80ab14b2bfba6e4b18954f5ac5d6":"Dokodemo Taikyoku - Yakuman Advance (Japan) (Rev 1)","7914ea9bed5d6936cec9b1c240247bda":"Spider-Man 2 (USA, Europe)","79250ef146cefc22695aea4c80244649":"Famicom Mini Collection (China) (En) (Proto)","794c177c712c030bce32a85dda73cb36":"Bratz - The Movie (Germany)","799a13e6df8c577e5e49fb1f0b217a0b":"One Piece - Going Baseball - Haejeok Yaku (Korea)","79a3a7d6a5546e381de2ab17db6adb13":"Woody Woodpecker in Crazy Castle 5 (Europe) (En,Fr,De)","79aef9bbe1378adfbd688cd66e11a7be":"Bomberman Tournament (USA, Europe)","7a0a429dc61a06bbaf62d867910e50cb":"ATV - Thunder Ridge Riders (Europe) (En,Fr,De,Es,It)","7a36a7486ef2c534111ee417b8acf9b7":"Super Street Fighter II Turbo - Revival (USA)","7a5b0f8f5ccc714dc754cef30190159e":"Salt Lake 2002 (USA) (En,Fr,De,Es,It,Nl)","7a69b9897a61950f9acab26329a788e6":"Ab durch die Hecke (Germany)","7a710c9d170d28397cf36002cce4734d":"Nicktoons - Freeze Frame Frenzy (USA)","7a7d4faca339a80bf99e96df67c9ff24":"Men in Black - The Series (USA)","7a91b281a98eabf2150c0cee965a3066":"Perplexus Diodomin (World) (Proto)","7aa1b08460265c63d7807ebd3493082c":"Legends of Aereven Advance - Sleeping Azure (World) (GBA Jam 2024)","7aa3d0f0c73456c7500f1628767eceb7":"Classic NES Series - Metroid (USA, Europe)","7aa675f783554e6734239df89e2b7cbe":"Piglet's Big Game (USA)","7aa882a970083c9998f52bba98108d9a":"Ultimate Card Games (USA) (Rev 1)","7ab12db7382122998aaf2756dcbac498":"Shingata Medarot - Kabuto Version (Japan)","7ab3a2b98ce6a85bfa23bc8bb6ecadef":"Metal Slug - Super Vehicle-001 (Japan) (En) (Proto)","7ab8dcd02c665b442b6ddf6b3556e4e4":"Rockman Zero (Japan) (Virtual Console)","7ab9b3d99be1723ecedde1ed8d0f359b":"Bubble Bobble - Old & New (Japan)","7afcf95672d0652c09f77ccc1afcaf02":"Dragon Ball Z - Moogongtoogeuk (Korea)","7b002b8b76e19bfa13e4fd999f9cf9e4":"Chinmoku no Iseki - Estpolis Gaiden (Japan) (Virtual Console)","7b06540616a35ca1cf4465f1fabe50b6":"Rayman - Hoodlums' Revenge (Europe) (En,Fr,De,Es,It,Nl)","7b11c22d6e264000b10c49c6b8c3e15f":"Magic & Legend - Time Knights (World) (Beta)","7b17e51d5a61780f9823203c6254ed8f":"e-Reader (USA)","7b1b404ab1baa7ec549a29629c328153":"Yu-Gi-Oh! Double Pack 2 (USA) (En,Fr,De,Es,It)","7b279ff2f8f00274542386674384b1fc":"Contra Advance - The Alien Wars EX (Europe)","7b32379f139798165e161623745b7451":"Ultimate Card Games (USA) (Rev 2)","7b434547ef9ea4f55ad3885181d3cdd4":"Pferd & Pony - Best Friends - Mein Pferd (Germany) (En,De)","7b4572515ba81a85366a95383b785cad":"F-Zero - Climax (Japan) (Virtual Console)","7b7560f2c5d48e3a922d9637ae9e50a9":"Maya the Bee - Sweet Gold (Europe) (En,Fr,De,Es,It)","7b7889cf526b800182964798c7e3345e":"Bibi und Tina - Ferien auf dem Martinshof (Germany) (Rev 1)","7b79ad84814d56986566f49ab9de6423":"Max Payne (USA)","7b7a43f3ac4a3facc65aa6b616c0b887":"Fire Emblem (Europe) (En,Fr,De)","7ba10bec1582dc62d0a1ac742af9ab7b":"Defender of the Crown (USA)","7bb1cf407570534b2fb976792a2bbdda":"Dungeons & Dragons - Eye of the Beholder (Europe) (En,Fr,De,Es,It) (Beta)","7bb739ba35535f79bdb44e7161349ec1":"Elevator Action - Old & New (Japan)","7bbd6798acfbe798d1e458938afc7a1a":"Tales of the World - Summoner's Lineage (Japan)","7bce16d42e091bf43cdaa01054db6757":"Toukon Heat (Japan)","7bd5ae371d67113ad2c01109607b418b":"2 Games in 1 - Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (USA) (En,Fr,De+En)","7bf03505899917879800ed8a4a6768b9":"Unfabulous (USA) (Beta 12)","7c1ac3a3b9f0948bbcc6d5b2afac860c":"Miteluode - Lingdian Renwu (China)","7c3dda9b4e34c5551e6413458792b9b3":"Dragon Ball Z - The Legacy of Goku II (USA) (Beta 1)","7c8e479f4c4e46f406b1da5e786358c0":"Onimusha Tactics (USA)","7c90ce3ef159fd17feca4c0f25de13f2":"Animal Yokochou - Doki Doki Kyuushutsu Daisakusen! no Maki (Japan)","7c970129793c2987574cbba45e12871b":"Spider-Man 3 (France)","7c9e0824a12cb0263330c43381791d64":"NFL Blitz 2002 (USA)","7cb3748cbf790d4e8b50926b28299153":"Madden NFL 07 (USA)","7cbfedc28a27fe3aee703b2444946946":"2 in 1 Game Pack - Tony Hawk's Underground + Kelly Slater's Pro Surfer (USA, Europe)","7cc95cffcb5835b1cde52c805be8461a":"Power Pro Kun Pocket 5 (Japan)","7d098e6eab2ee1cfebdb12e60ac609be":"Juka and the Monophonic Menace (Europe) (En,Fr,De,Es,It)","7d2c4f995b82825aa63fe224733d769b":"Spider-Man 3 (USA)","7d2e6bb7047468ed61f9c31c48c27eea":"Pferd & Pony - Lass Uns Reiten 2 (Germany) (En,De)","7d43ba3c4d15ebb5f45e6100c096fdf8":"Gekitou Densetsu Noah - Dream Management (Japan)","7d630c14f3b2c59e3a956be2ed1bc05a":"Elite - The New Kind (World) (v1.7.1)","7d7032d0e64b277f99c11f6c2d3a2289":"Lord of the Rings, The - Nakatsukuni Daisanki (Japan)","7d8682e1193f8c6d1b0eb9e182d3165e":"Ultimate Winter Games (USA)","7ddcf8a78366ad89e82fa8aa62b18777":"ESPN Winter X-Games Snowboarding 2 (Europe)","7dde4a9d879bad9a898a3e32903d406c":"Cars - Motori Ruggenti (Italy)","7df46d6dc76d9d84dbed120655d5f69e":"Crouching Tiger, Hidden Dragon (Europe) (En,Fr,De,Es,It)","7df5064abf8a26ee1733f98cbe146e7e":"Nebulus (World) (v1.2)","7e43ee7b00269d5f0fddb55e8bb747cc":"Payback (Europe) (En,Fr,De,Es,It)","7e4b22c8a115d33a30a3e130884cde5d":"Duel Masters - Shadow of the Code (USA)","7e7015a37c1a5aa3d1b626b2255d0b01":"Lilo & Stitch (Japan)","7ec49ec0fc1b5b53226d36cd9c0a646a":"Bakuten Shoot Beyblade 2002 - Ikuze! Bakutou! Chou Jiryoku Battle!! (Japan)","7ed736155cc3cc6b0efb314ffe7d2aae":"Minna no Shiiku Series 1 - Boku no Kabutomushi (Japan)","7f22c443ec71a696d84ae46a9fe61980":"SpongeBob SquarePants - Creature from the Krusty Krab (Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","7f45b79856db3c928f25b30040b200de":"Crayon Shin-chan - Densetsu o Yobu Omake no Miyako Shockgaan! (Japan)","7f6bf3b4d84f113aa454136e5b53fd77":"Final Fantasy VI Advance (Europe) (En,Fr,De,Es,It)","7f92ca61a904f2902fa44b622ce2601a":"Babar to the Rescue (Europe) (En,Fr,De,Da)","7f9a6636189a1c57276ca6e0a352565b":"Tony Hawk's Pro Skater 2 (France)","7fa04c2a15d3561c9d2641aab6946d6a":"GameShark GBA (USA) (Alt)","7fc2aff8e9663f1613336ca662f5a112":"Sugar Sugar Rune - Heart Ga Ippai! Moegi Gakuen (Japan)","7fc96f1c2565f244c7dd561b6cbe43bf":"Crazy Chase (USA) (Beta)","7fca5f2c94769db36cacf8bc599f659e":"Scooby-Doo (Europe)","7fd1ec249c6145adb5c2e284513b8078":"Mahou Sensei Negima! - Private Lesson - Damedesuu Toshokan-jima (Japan)","7fee20a09c485433f51a97bfb468446c":"Fire Emblem - Rekka no Ken (Japan) (Beta 2)","8002d7d8251f8a200a9d50f107d48ffd":"Jimmy Neutron - Boy Genius (Europe) (En,Fr,De,Es)","80112ba773c8b8072502f46c1781561f":"Brother Bear (Europe)","80177651fac95135f205c00a5f8ae922":"Momotarou Dentetsu G - Gold Deck o Tsukure! (Japan)","803352465687ba57b7cce41ff7facb20":"X Zhan Jing (Taiwan)","80355c831a7a25b0f70dc021ebd344f1":"Harvest Moon - Friends of Mineral Town (USA)","803ff345f4df60a7f00db44fd25730bc":"Scooby-Doo! - Unmasked (USA) (En,Fr)","80648fa0cb4fbf49a68c810fc64edaaa":"Hi Hi Puffy AmiYumi - Kaznapped! (USA)","80826c4afcbad51231c8721118f13223":"King of Fighters EX 2, The - Howling Blood (Europe)","80acbed66f2f7a2fc88357f9a2028458":"WinX Club (USA)","80afdbf1fb3a1287b7745f1a7aa473b9":"Neoromance Game - Harukanaru Toki no Naka de (Japan) (Rev 1)","80e03339cd076a4f89c8b89653b45d8c":"Hunter X Hunter - Minna Tomodachi Daisakusen!! (Japan)","80e5dcfab9437202bb6e745095e78c95":"Cardcaptor Sakura - Sakura Card Hen - Sakura to Card to Otomodachi (Japan) (Rev 1)","8105a6012737aac2907b27e4a05ad794":"Sonic The Hedgehog - Genesis (USA)","81421240b15b1299416fe431074b571e":"Glacia Dungeon (World) (En,Es,Ru,Ro) (v1.5.2)","814cd6fb465041da0c39c40d89993339":"Magical Vacation (Japan)","81528aa0f4ababa9d4a6e1c71f6be3f5":"Gumby vs. the Astrobots (USA)","8158ab44dd56ea9fe8f1f1a582467e74":"Duel Masters (Japan)","816db888cae935e71a74a4ae6c461bee":"Super Dodge Ball Advance (USA)","8174d9620184763725f25e149b228e79":"Futari wa Pretty Cure Max Heart - Maji Maji! Fight de IN Janai (Japan)","819bb55012849a897b86237fa5114799":"World of Zoink (World) (GBA Jam 2024)","819c5498a8d6acfb847764e296ed9cdd":"Manga-ka Debut Monogatari - Akogare! Manga Ka Ikusei Game! (Japan) (Rev 1)","81a78ebff4713c80857482ac6956f52f":"CT Special Forces (Europe) (En,Fr,De,Es,It,Nl)","81cc6d957b21d039716751268f402fa8":"2 Games in 1 - Monsters en Co. + Finding Nemo (Netherlands) (En,Es,Nl+Fr,Nl)","81d2da1095b485ce783fe1acc144cefe":"American Dragon - Jake Long - Rise of the Huntsclan (USA, Europe) (Beta 3)","81df4456e398f87e893c522810cc8cda":"Dora the Explorer - Dora's World Adventure! (USA)","820a03dcd47b4d8aec4b09b6d0f95d56":"Virtua Tennis (Europe) (En,Fr,De,Es,It)","8220c6b2243aa64a2bd30e09c1d0436d":"With the Last Moonbeam (World) (v1.0.1)","822168fb70fd023a6e6008a59d54f99f":"Minna no Soft Series - Numpla Advance (Japan)","822cd888edfe00dea8cf75a848c64988":"Scrabble Scramble! (Europe) (En,Fr,De,Es,It,Nl)","822d86df5f0e5a04b051142a53f16820":"Twin Series 1 - Mezase Debut! - Fashion Designer Monogatari + Kawaii Pet Game Gallery 2 (Japan)","8246b72cb4b6872724836776c123cb55":"Dragon Ball Z - The Legacy of Goku (Europe) (En,Fr,De,Es,It)","82507fd4f17734ae8f48072cbd5ef4e2":"2 Games in 1 - Findet Nemo + Die Unglaublichen (Germany)","825bdd7778a8740bf04421164e233c39":"Famicom Mini 25 - The Legend of Zelda 2 - Link no Bouken (Japan)","82794e16ef8da4fe070d06b6aca248f8":"Unfabulous (USA) (Beta 1)","82f6103c5fc2315e7f11128b9940602f":"Super Dropzone - Intergalactic Rescue Mission (USA)","830d34040be2289d156228addc5972dd":"Doubutsu-jima no Chobigurumi (Japan)","83319d4f9e32e0ef5a5c1fc423f174d5":"Castlevania - Aria of Sorrow (USA) (Virtual Console)","833c3fac4ba420d0a3e4ade9184e2bf0":"Spider-Man - Battle for New York (USA)","833e55b181ac9b4da56b6341c1f4e09a":"Megaman - Battle Network 2 (Europe)","834c59c74efdd616ceb429832c06de31":"Captain Tsubasa - Eikou no Kiseki (Japan)","83511ed734d5bf842b9062ebc574a434":"Pac-Man World (Europe) (En,Fr,De,Es,It)","8364f53c818449f93687ec490cd90120":"Bionicle - Maze of Shadows (Europe) (En,De)","836c290e70dd96db342b73d92b758b57":"Revenge of Shinobi, The (Europe) (En,Fr,De,Es,It) (Beta)","836d614be32cd350de5e05a175db6da7":"Global Star - Sudoku Fever (USA)","8384aa8735b5a036fdddb5da430cb25b":"Donald Duck Advance (USA)","838911e3c706d4f4377e0ad318676d2d":"Shaman King Card Game - Chou Senjiryakketsu 2 (Japan)","839f44aec4456b2be03a1bdec90ae7f7":"Dogz 2 (Europe) (En,Fr,De,It)","83b01697dd2e80ec4f662a1486122b70":"Feline (World) (GBA Jam 2021)","83c4994b6edb5ace03864f96ddeb54af":"Greatest Nine (Japan)","83d2a27e2eedf08ec8e8174417021594":"Famicom Mini 18 - Makaimura (Japan)","83db8a484f48d8fab9638fde47853800":"Scooby-Doo (Germany)","83f6af032b753b0bc5fc287fca6b3b3b":"Unfabulous (USA) (Beta 8)","842f50e8321d16d33566839d76635448":"Goemon - New Age Shutsudou! (Japan)","84426f2886283b640fb7974ef68396d4":"Uranus (World)","8451b02ab3fcb7cda5c2da3170bb6002":"Frogger Advance - The Great Quest (USA)","845dc86c7d1869bbe0b984d19d9ba01f":"Power Pro Kun Pocket 7 (Japan)","847b141aada46a0ac4818fe05210177a":"American Dragon - Jake Long - Rise of the Huntsclan (USA, Europe) (Beta 1)","84a1007a744a784bb16c98f1ce04f94e":"Hardcore Pinball (USA, Europe)","84b222956de83bd53d37d9c3e0ee3af1":"ESPN Great Outdoor Games - Bass Tournament (Europe)","84c0b60d9fb6c9d94e057a0f67c31cf6":"Fire Emblem - The Sacred Stones (USA) (Virtual Console)","84e3389b9a4a120959b37c15b5bcc460":"Adventure of Tokyo Disney Sea (Japan)","84fc5415c6a687b656ba79df90cfc6a7":"Blue Angelo - Angels from the Shrine (Europe) (Proto 2)","8517049ce498d84530c953d6a8b3112e":"Yu-Gi-Oh! - World Championship Tournament 2004 (USA) (En,Ja,Fr,De,Es,It)","852976ef728c7e33e4e9ec089380ecff":"Super Mario Advance 4 - Super Mario Bros. 3 (Europe) (En,Fr,De,Es,It) (Rev 1) (Switch Online)","85299edc639a2d1a158455e92af573ca":"Barbarian (USA, Europe) (En,Fr) (Proto 1)","8537579863758cead65406c13ab40ec0":"Battle X Battle - Kyodai Gyo Densetsu (Japan)","8547cfd31103f0e855e2d6267e230c06":"Dragon Ball Z - The Legacy of Goku III (USA) (Beta)","8557791a1f72183a1ab451df4ad032b9":"Spider-Man 3 (Spain)","855cdf29fc72a4c55026aeaca8480bb9":"Texas Hold 'em Poker (Europe) (Rev 1)","85853646ee8ed8269a442a13bffc6e0d":"Yggdra Union - We'll Never Fight Alone (Europe)","859a2612f2229bd78c74fadfeddcc852":"Petz - Hamsterz Life 2 (USA)","859cb3dd653228060cc3aae3d1a39333":"Jinsei Game Advance (Japan)","85b02ee02e0ffda069ccdc9531248cb6":"Tom and Jerry Tales (Europe) (En,Fr,De,Es,It)","85b9ee894ac4a5d21f3f9dd473edebdc":"Madagascar - Operacion Pinguino (Spain)","85bbf8a6f95b9d2d463d0a55f2b69d35":"Barbie Diaries, The - High School Mystery (USA)","85c6ef88ad57e0af9778c68880295351":"Zipline Zapper (World) (GBA Jam 2024)","85cc314417d8f96798248507629eaa8b":"Garfield - The Search for Pooky (Europe) (En,Fr,De,It)","85eb280639d3c2bab9fa8444e861e461":"Oshare Wanko (Japan)","85f8893a2c07ead2a164f823d665f415":"E.T. - The Extra-Terrestrial (Europe) (En,Fr,De,Es,It,Nl)","85fa9b30552bcf2b5cffa86f669da0a1":"Mobile Pro Yakyuu - Kantoku no Saihai (Japan)","860cf4411b691593d06bc2bfbe29187c":"Digimon Rury (USA)","860ed03009d656568ea20d98436574c8":"Naruto - Saikyou Ninja Daikesshuu 2 (Japan)","8620aeb89f00dd3e3c2a500ba75ce2de":"Scorpion King, The - Sword of Osiris (USA)","863bb2f057959ec7b21aa0174c817fa9":"Jackie Chan Adventures - Legend of the Dark Hand (USA, Europe)","863eb1e5b1c35555a892883d0748b1f6":"Toll Runner (World) (Demo 1) (GBA Jam 2024)","8643fe7632d4895dcaaca230475e70fb":"Fire Emblem - Fuuin no Tsurugi (Japan)","864d9a4e885f1f32a9072a606c739006":"Alex Rider - Stormbreaker (Europe) (En,Fr,De,Es)","8653d5731f4effd21e435b9a274023a4":"Boulder Dash EX (USA)","865b424538c65f2e5a96255408752eef":"Riviera - Yakusoku no Chi Riviera (Japan)","866719fa99283d111b0ff914a7685999":"Rockman EXE 6 - Dennoujuu Falzar (Japan) (Virtual Console)","868cafba6f72113d4473a171e9ee4d24":"World Advance Soccer - Shouri e no Michi (Japan)","86a1c5aae8afe04acaf1ae475249e9ba":"Donkey Kong Country 2 (Europe) (En,Fr,De,Es,It)","86ae492f7c964724de06f7cbebe6437a":"2 Games in 1 - SpongeBob SquarePants - Battle for Bikini Bottom + The Fairly OddParents! - Breakin' da Rules (USA)","86dca228afc2d455e958c4e52787d91e":"Greg Hastings' Tournament Paintball Max'd (USA)","86e18db544ff6281728b472e4f5de317":"Hime Kishi Monogatari - Princess Blue (Japan)","86e6497272f39b19af6750d699569531":"Pac-Man World 2 (USA)","86f3a374af80e633531c538d9aeaf396":"It's Mr. Pants (USA, Europe)","86f5da57ec34ecf1c2710befa3d2c5de":"Juka and the Monophonic Menace (USA) (En,Fr,Es)","86f872eafa573d4535e5f536ab7f5d2b":"Disney Sports - Football (USA)","87097e92087ede6f94cad64c847542a3":"Famicom Mini 27 - Famicom Tantei Club - Kieta Koukeisha - Zen, Kouhen (Japan)","870aaedb84a214fa52b167a37c94b591":"Stuntman (USA) (En,Fr,Es)","870cfbf9950eea5db33c118564233db3":"Rayman 3 (Europe) (En,Fr,De,Es,It,Nl,Sv,No,Da,Fi) (Beta)","871133b4e4e8b172f7538b0250c9bb45":"Board Game Classics (USA)","8734c1f1bb86042c40696786825181eb":"Doraemon - Midori no Wakusei Dokidoki Daikyuushutsu! (Japan)","8735e3aaab28d157cd5cb0b0c6666b0d":"Titeuf - Mega Compet (France)","873b5e4111c0cbbc5224b590e845ba21":"2K Sports - Major League Baseball 2K7 (USA)","874aa5c4c6217febec6405a22d7bc9ef":"Bratz - Rock Angelz (USA, Europe)","875112adceb14c80ef4e67fdb4d37826":"LEGO Star Wars - The Video Game (Japan)","875524c19ada69a0c9f3e585e6bedaa2":"Yu-Gi-Oh! - Destiny Board Traveler (USA)","875c78f20ab82d8b8e72b18d4b1fe4cc":"Jurassic Park III - Dino Attack (Europe) (En,Fr,De,Es,It)","877d6658ae7e469b946f44a1f7c0980f":"Ratatouille (Australia, Greece) (En)","878dc37944b93347e220ca68936402e0":"Shikakui Atama o Maruku Suru. Advance - Kokugo, Sansuu, Shakai, Rika (Japan)","87913c168eae9f2187119becb03ad598":"Croket! 4 - Bank no Mori no Mamorigami (Japan)","8797dad370b36d51899f2652946431a6":"Hikaru no Go 3 - Senyou Joy Carry Cartridge (Japan) (Rewritable Cartridge)","87a1bd6577b6702f97a60fc55772ad74":"Castlevania - Circle of the Moon (USA) (Castlevania Advance Collection)","87d4626c1736b29a0e1f81cb6f3306a6":"Bionicle Heroes (USA) (En,Fr,De,Es,It,Da)","87da43aaad7b9fd2b8af57e8e3c71283":"Madagascar - Operation Penguin (USA)","87dd60f33b342bc878a05bdb4ca8e753":"Battle Network - Rockman EXE 2 (World) (Ja) (Mega Man Battle Network Legacy Collection)","87faeacbfe02c12d1fa89b41ef1d676e":"Dave Mirra Freestyle BMX 2 (USA)","881dd5c2d845a8fef7fc7badcf47d617":"Inspector Gadget - Advance Mission (USA)","882e200550d6addafdc0f9aa2b03deb1":"Eggo Mania (Europe) (En,Fr,De,Es,It,Nl)","885cfe05f516278be9678a6345c8f485":"Super Robot Taisen D (Japan)","88792ae1fbc74f4a5425d0c6f0482023":"Megaman & Bass (USA)","8893dcd52c5e4c3a7b8991a4ca7fb73e":"Slot! Pro Advance - Takarabune & Ooedo Sakurafubuki 2 (Japan)","889fbc49115ce1f21e89490e0a2fe457":"Hikaru no Go (Japan)","88a5225f93074c0445ec912523da4538":"Silk to Cotton (Japan)","88bbe65da38eda5082175fa13f092311":"Derby Stallion Advance (Japan)","88c5a2ccaa61459b21715255220b87dd":"Unfabulous (USA) (Beta 5)","88d46cdf27d866f82a26bb2a1a98588c":"Globlins! (World) (Demo 1) (GBA Jam 2024)","88d6eff7ccac003b7ccb50878aa8e209":"Kami no Kijutsu - Illusion of the Evil Eyes (Japan)","88de1a21af5663ef1f85f5445e559562":"Shark Tale (Italy)","8905016d29e691975ebb176dec1dce4e":"Genseishin Justirisers - Souchaku! Hoshi no Senshi-tachi (Japan)","89073fce9c0d5b25acdfdf8a1d7b9d9d":"Pokemon - Aurora Ticket Distribution (USA) (Kiosk)","8942d8c65e680853e1407108857bb732":"Star Wars - Episode III - Revenge of the Sith (Europe) (En,Fr,De,Es,It,Nl)","8957506ac2d72a332e04d6f94ef5ae39":"RoboCop (USA) (Proto)","89579f4dfe1ed24a7cd16a6a61a72a17":"WarioWare - Twisted! (USA, Australia)","897fbe03b12147f9daf55519d90402cd":"Dragon Ball Z - Buu's Fury (USA) (Beta 1)","898100fd892e820942867d94939f8505":"Medabots AX - Rokusho Ver. (Europe) (En,Fr,De,Es,It) (Virtual Console)","898914fe623432c8cf062764cab39b9e":"Digimon - Battle Spirit 2 (Europe) (En,Fr,De,Es,It)","8989a8830651ca9705c676676aaf4894":"Amazing Virtual Sea-Monkeys, The (USA)","8996cf047c0c920127c7dd4d840b4cd7":"Crash & Spyro Superpack - Spyro Orange - The Cortex Conspiracy + Crash Bandicoot Purple - Ripto's Rampage (USA)","899b136ff8391f574b52be34ddb683fc":"Castlevania - Aria of Sorrow (USA) (Castlevania Advance Collection)","89a8ea77fc2169dd5aa0209e4c485b7c":"Medabots - Metabee (Spain)","89b14322fdd974ac1fe06c7b77c9dbff":"Onmyou Taisenki - Zeroshiki (Japan)","89b9f7d5d4ecdf933981aa6f9f05c53e":"Pocket Monsters - LeafGreen (Japan) (Rev 1)","89bbc0e48966feca4f22e2b31caad638":"2 Games in 1! - Dragon Ball Z - Buu's Fury + Dragon Ball GT - Transformation (USA)","89bd27cd7228736d9c00461abd20c208":"Game & Watch Gallery 4 (USA)","89bea97ec8d4f11274784afc125de6c8":"Zettaizetsumei Dangerous Jiisan Tsuu - Ikari no Oshioki Blues (Japan)","89c23bad78a30d9d1065262da512594f":"Megaman & Bass (USA) (Virtual Console)","89c2af08fb993266d8cd79af28aabce2":"Finding Nemo - The Continuing Adventures (Europe) (En,Es,It,Sv,Da)","89c947c27346212a2ff412b5d46a51af":"Super Bubble Pop (USA)","89edab9880ff7a18657398e75c6d7462":"Wagamama Fairy Mirumo de Pon! - Nazo no Kagi to Shinjitsu no Tobira (Japan)","8a0577dfea5fdb41b8b8c0554ac877c8":"Pocket Professor - Kwik Notes - Volume One (USA)","8a0e456a01130c8f4b800a0376681782":"Super Chinese 1, 2 Advance (Japan)","8a12b6c9298e5f9874df68f62cc23b48":"Barbie - The Princess and the Pauper (Europe) (En,Fr,De,Es,It,Nl)","8a23378fdcecaca9a648d378c1d9609d":"Ripping Friends, The - The World's Most Manly Men! (USA, Europe)","8a46b929f0dc1522fc0cc378685d8337":"American Dragon - Jake Long - Rise of the Huntsclan (USA, Europe) (En,Fr,De,Es,It)","8a65cc927274981d1b431bc005fe185d":"Animal Snap - Rescue Them 2 by 2 (USA)","8a6795c788c97627e06a987cf25b4d2b":"Gachasute! Dino Device 2 - Dragon (Japan)","8a8d50c9710ad287d2691546cf40348f":"Jikkyou World Soccer Pocket (Japan)","8a8dc5dc9bc9a49d35ba263e1ba9f4a7":"Shin Megami Tensei Devil Children - Yami no Sho (Japan)","8aa4f88927f3c5bf1aaed1562742a64d":"Blender Bros. (USA)","8aa503fd9f7ba80dc0b0a7f46716f5ad":"ZenF (World) (GBA Jam 2024)","8aa75eb2e94320c942e8c71cedcec97c":"Dexter's Laboratory - Deesaster Strikes! (USA) (En,Fr,De,Es,It)","8aabd68732a738c01a07ae606e0eb3b6":"Field of Nine - Digital Edition 2001 (Japan)","8abea930d7eec394f3a7f65c6206a865":"S World 3 (World) (Beta 1)","8ad8a16c66c9a755137635d84b08d5e9":"Tweety and the Magic Gems (Germany)","8b0fe9b5156781d1686b0add2a31b9b3":"Golden Sun - Die Vergessene Epoche (Germany)","8b525f6d0d80a287df61ec99a97c6c08":"Backyard Basketball (USA)","8b6236aad7ba63e05547146528cea8a9":"F-Zero - GP Legend (USA) (Proto 12) (Netcard)","8b68e98da32fcee8c235c3c283c20a4c":"Aero the Acro-Bat (USA) (Beta 1)","8b7a6c21e2619dbfb5064c76d074f582":"Denki Blocks! (USA) (En,Es)","8b7a8c1e315ccf6132afb5bcd7aa4136":"Metalgun Slinger (Japan)","8b809080a689886e7877ec89eb82ae99":"Bratz (USA) (En,Fr,Es)","8b898cdf54095d09d9be2cfcb43ea040":"Motocross Challenge (USA) (Proto)","8ba0f025aa7acbfa1376ab140685b234":"Lau Gurpil (World) (Demo 1)","8bac13cf55656a7d66ab32482fd7a323":"Premier Action Soccer (Europe) (En,Fr,De,Es,It)","8bb88f20d166d7f6c3806c0c761fb54d":"Rockman & Crystal (USA)","8bccfacf3366c63b84770f68dfeb89ff":"Lord of the Rings IV, The - The Fellowship of the Ring (USA)","8bcf4e0da6be539f2099c683ff897b43":"Crazy Taxi - Catch a Ride (USA)","8bd140d7a98757926e62b6f6b6cdb02a":"Wakeboarding Unleashed Featuring Shaun Murray (USA)","8c130964502931ba6c3d14e1f719a986":"Tom Clancy's Splinter Cell (Europe) (En,Fr,De,Es,It,Nl) (Beta)","8c2a7e2605a29f88349e9a91fb773557":"Spy Kids 3-D - Game Over (Europe)","8c40604a9a39f081408cbe3991ac0626":"SEGA Rally Championship (Europe)","8c48059bf2c40a78b9739edf5ea411cb":"Batman Begins (USA, Europe) (En,Fr,De,Es,It,Nl)","8c5c04d6559a700903c7186e0baee2fe":"M&M's - Break' Em (USA) (Rev 1)","8ca5aeb726f65ae584bc74b546c294bf":"CHEESYchords (World) (v1.1)","8cacc135e731b3b3e268676a8d2fc2fc":"Madagascar (Italy)","8cad01d7436766cda2734af52189c056":"Majesco's Sports Pack (Europe)","8cbbfc4bac6a08f33e91d7cd6408a660":"Extreme Ghostbusters - Code Ecto-1 (Europe) (En,Fr,De,Es,It,Pt)","8cc1dd1718b63c9675a5e5d28c14936b":"Muppets, The - On with the Show! (USA, Europe) (En,Fr,De,Es,It,Nl)","8ce34b50e1b658b4c69e6ba4a100f71e":"Jurassic Park Institute Tour - Dinosaur Rescue (Japan)","8d1ba7381342eb5d4786cabe67eb8632":"Prehistorik Kart (USA, Europe) (Proto)","8d27b349bca44d938b67f9a28712f6c9":"F-Zero - Climax (Japan)","8d2f6a78e9cf3210ae22c5f111624e55":"Justice League - Injustice for All (Europe) (En,Fr,De,Es,It)","8d3004602c8c0cbb734c8aa781c425cd":"Aventures de Jackie Chan, Les - La Legende de la Main Noire (France)","8d37b40ccbfed23e7a2b677ced5bde2f":"Pippa Funnell - Stable Adventure (Europe) (En,Fr)","8d4b0e1203548601a7c34c20680c0b75":"FightBox (Europe)","8d51b71a3ae3d1646c368725abd0b1ed":"Duel Masters - Kaijudo Showdown (Europe) (En,Fr,De,Es,It)","8d5b5381539fcad4df2bc7902a432dee":"Astro Boy - Omega Factor (Europe) (En,Ja,Fr,De,Es,It)","8d76ff1a5411fbd8ba0010dbcd0e5aa2":"SpongeBob SquarePants Movie, The (USA)","8d7c792d3c715f48833d0390b4eebc45":"Puyo Pop Fever (Europe) (En,Fr,De,Es,It)","8d8d61533ee0ebf56ab63ed4bebf1ccd":"Top Gear Rally (Europe) (En,Fr,De,Es,It)","8d9bf4766bcc96c79dbab427fc75a2a6":"Ghost Trap (Japan)","8d9fbf8bde7941ca97dcba7757d60e81":"Spyro 2 - Season of Flame (USA)","8daee9fe02459c2084d461d4f2e8e481":"Mahou no Pumpkin - Ann to Greg no Daibouken (Japan)","8dbd6bfdff54f2fc0f1bbde11706a803":"Disney's Party (USA, Europe) (En,Fr,De,Es,It)","8dc907977f47486569f863f99b81f567":"Strawberry Shortcake - Summertime Adventure - Special Edition (USA)","8dc9eb3c6a76fe563bdd7b7d10f2b72c":"Sitafei De Chuanshuo 2 (China) (Proto)","8dd015022218c0df89bdd4a1a1fc4e7b":"Phil of the Future (USA)","8dd342a81937540bb7aea1521cb11d1c":"Fear Factor - Unleashed (USA)","8dd93526e6568b174355153fe946bd0c":"Shaman King - Legacy of the Spirits - Sprinting Wolf (USA)","8ddb166cf79606f116f6bdf3e4bdbbe2":"Akumajou Dracula - Circle of the Moon (Japan)","8e066c35a484308421c3eebcc45ec329":"Mortal Kombat - Deadly Alliance (Europe) (En,Fr,De,Es,It)","8e11c9e996e0fcae6d95483b4a2adfdc":"Frontier Stories (Japan)","8e1c2672225640d441932424b5e11243":"Barbie Diaries, The - High School Mystery (Europe)","8e2766a5595c4916decf99b300583d16":"Who Wants to Be a Millionaire - 2nd Edition (Europe)","8e4687980914d70581c376f084ed8e06":"Tweety and the Magic Gems (Europe)","8e5b4bb736b5030cf13052634d01ef69":"Toy Robo Force (Japan)","8e825b6048a72649a9b672858bfc388c":"Tower SP, The (USA)","8ea169d37c038ea5f0cf9a1fb39554b7":"SpongeBob SquarePants Movie, The (Europe) (En,Fr,De,Es,It,Nl)","8eabc44961b0e153f9e3da94ca011847":"Knights' Kingdom (Europe) (En,De)","8ebf0a1c78ab2a874057d32d238303ff":"Monster Jam - Maximum Destruction (USA)","8ec1a2fee7a9cc9508bf13dc423d424d":"Banjo-Pilot (Europe) (Beta 1)","8ecb24e6711df71241e4d52c7d1d07e0":"Minna no Soft Series - Shanghai (Japan)","8ed216f4ec3342e7d27b420bfe3b4e53":"World Reborn (USA) (Proto)","8ed4304e943b553f8ff3abc1e66ea91e":"Aladdin (Europe) (En,Fr,De,Es)","8ee261b598c4c1189dfaaa3361697c5f":"Dragon Ball Z - Collectible Card Game (USA)","8ee6c58527204e7ba8eb54f397dd15b0":"Super Puzzle Fighter II (USA) (Rev 1)","8ef10e6b20930b83f2ef3c11a1752793":"Hot Wheels - Burnin' Rubber (USA)","8ef186d8565c1408e653bfe5341a5ffb":"GT Racers (Europe) (Beta 1)","8efd494b80bca668b4f19c5f3c0b9f13":"Super Mario Ball (Europe) (Virtual Console)","8efe8b2aaed97149e897570cd123ff6e":"Golden Sun - The Lost Age (USA, Europe)","8f0dad780f01ce002331693f4733f27e":"Fire Emblem - The Sacred Stones (Europe) (En,Fr,De,Es,It)","8f0fdaeda361783ee74abd980b418388":"Simpsons, The - Road Rage (USA, Europe)","8f254384c3b1aa8ff118b4782d089267":"Planet Monsters (Europe) (En,Fr,De,Es,It,Nl)","8f289129beefd40717718c7ab8baa447":"Zelda no Densetsu - Kamigami no Triforce & 4tsu no Tsurugi (Japan)","8f380c11bd958656afbeca39b80c83c9":"Minna no Ouji-sama (Japan)","8f3d9095c1d0b281ba12a4bac17c29d1":"Shin chan contra los Munecos de Shock Gahn (Spain)","8f71cc21f97599f376b71a0953db1847":"Ninja Cop (Europe)","8fa0ca30575846480a1bba06dcfd6508":"Danny Phantom - The Ultimate Enemy (Europe) (En,Fr,Nl)","8fa81eb18f711ce98792b8aea919e2f4":"Mijn Dierenpension (Netherlands) (En,Nl)","8fb4f7b39bd8f82661ede4a32773de65":"Tsuukin Hitofude (Japan) (Beta)","8fc1dfad1ccd02c8563bc2767e73276e":"American Dragon - Jake Long - Rise of the Huntsclan (USA, Europe) (Beta 6)","8feee07008288e4df451d639168bf1d0":"Muppet Pinball Mayhem (USA)","8fef2a90bef400616bfe5788d1c68f09":"Medabots AX - Rokusho Ver. (USA) (Virtual Console)","9003c10fd78cc0bb83c83cbbdbe03911":"Wings (USA)","901d68257b8beda85240d55725529fe2":"Street Fighter Alpha 3 (Europe)","903cfc3391a05624c48b8ded7d6b2efd":"2 Games in 1 - Power Rangers - Ninja Storm + Power Rangers - Time Force (Europe) (En,Fr,De+En)","904299e3d5ec737c17efdac25126016d":"Double Game! - Golden Nugget Casino & Texas Hold 'em Poker (Europe)","904f77bb71669ae4e525857af2c0d23c":"Tootuff - The Gag Machine (Europe) (En,Fr,De,Es,It) (Proto)","905067b56274608b4be2e805491b624d":"Spy Muppets - License to Croak (USA) (En,Fr,De,Es,It,Nl)","9085dd5a5ef4b2820a838c375301fec2":"Backyard Football (USA)","90cb614e8695745f288bf2a7de4b5922":"Kingdom Hearts - Chain of Memories (Japan)","90d5887eaefd16478525478410155dec":"Castlevania Double Pack (USA)","90f1dfb87a2c47224d43c8f09eda0841":"Boku wa Koukuu Kanseikan (Japan) (Rev 1)","90f6a072681959f117b4901feb5b2cb7":"Disney's Game + TV Episode - Lizzie McGuire 2 - Lizzie Diaries (USA) (En,Fr)","9106c7adba0ab281a29f5af7caa9cdad":"Mummy, The (USA) (En,Fr,De,Es,It)","913a49ea66a349fec2ac793a4eeb93b9":"Kunio-kun Nekketsu Collection 2 (Japan)","91410132c661fce4074eba939915d543":"Animal Mania - Dokidoki Aishou Check (Japan)","9145ded7c7fb57275b6bd23ac1e93fd5":"Guilty Gear X - Advance Edition (Europe)","914bd4b83ad1a0b426cb183132526431":"Sennen Kazoku (Japan)","9175a1771a550ed2237de4231aebc1f1":"F-Zero - Falcon Densetsu (Japan)","9178687e7327cbb77458e1093d95cf1f":"2 Games in 1 - Rugrats - Go Wild + SpongeBob SquarePants - SuperSponge (Europe)","917fdbc9cb798c6ee3831a27e6a2af6a":"J.League Winning Eleven Advance 2002 (Japan)","91874d50834cc7b752922f917f9cd8f7":"Galaxy Angel Game Boy Advance - Moridakusan Tenshi no Full-Course - Okawari Jiyuu (Japan)","919041d04ce811a6060044d579180c66":"Puzzle & Tantei Collection (Japan)","91926690793d2a63cd382797eb1b35c2":"Tony Hawk's Pro Skater 3 (Germany)","91ba6a4571e20dd9c7604d685d134607":"Babar to the Rescue (USA) (En,Fr,Es)","91c56cd17442041af081d5a74d71e941":"Monster Farm Advance (Japan)","91cc97b4023b7876f4ac783c2c4de2bd":"Hot Wheels - World Race (USA)","91d5986bcb918e636f17e99eb73b923b":"Street Fighter Alpha 3 (USA)","91e86d6adb495236293e75d5f0fa82b8":"Yoshi no Banyuuinryoku (Japan)","920882439cd994c2f0ab63d32a64eb80":"Asterix & Obelix XXL (Europe) (En,Fr,De,Es,It,Nl)","923410c2a52decb781a381f399f2dd2b":"Game & Watch Gallery Advance (Europe) (Virtual Console)","923a3437fcf84a5ca26158f7faada412":"Karnaaj Rally (USA, Europe)","926bebf30f7fecd6b9fa30cfd353dfee":"Global Star - Sudoku Fever (Europe) (En,Fr,De,Es,It)","92751433cb0290a86d0bd57a1a150423":"Ochaken no Bouken-jima - Honwaka Yume no Island (Japan)","928c0bd4cf82b3fd6f34b53d4fd02e69":"Mario Tennis - Power Tour (USA, Australia) (En,Fr,De,Es,It)","929f06f714454b66cec42585462db598":"Street Fighter Zero 3 Upper (Japan)","92ae5e0ee6ee2056f65f5c52672c2ff6":"Lindsi Luna Blast (World) (v1.01)","92bc0ac04f898054f18d061fd806ae47":"Famicom Mini 04 - Excitebike (Japan) (En)","92eacc3f576688e87403cc1b1d582a3c":"Cat-Venture (World) (Demo 1) (GBA Jam 2024)","92eecf93f1ab828bdf2a83daddacf3e5":"Pocket Monsters - Emerald (Japan)","9307c9034ab5e6effa2323297e493363":"Battle Picross (World)","93539207be7d05e2ef8e3e9b44a82c2e":"Zhuanzhuanbang (China) (Proto)","936a8172335ffc3391d182e909942d76":"Dokapon - Monster Hunter (USA)","9372681ce36402acc4d131245e13e3d5":"F-Zero - GP Legend (USA) (Proto 2) (Netcard)","937fa6b7ddd554370405f13b93632715":"GetBackers Dakkanya - Jagan Fuuin! (Japan)","938429cc09e41c9c1a4de39f9dcf17c1":"Hexa Virus (World)","9397ee8e46cd0357d49af1cff6fd97b3":"Magical Quest 2 Starring Mickey & Minnie (USA) (En,Fr,De)","93a2f28339858e955e4f17060e038bcd":"Sonic Advance (Europe) (En,Ja,Fr,De,Es)","93b32287d60cf7d220b479bf976c2746":"Cornucopia (World) (Proto)","93c6a92b841b2f3cad5cdc4e62112e61":"GT Advance 2 - Rally Racing (Europe)","93cf91ff53f2b52f1da030902f74d208":"Jixie Ren Dazhan - Zhongjie Ban (Taiwan)","93d1ba78096704c5dcfa993337469542":"Rockman & Forte (Japan)","93f18a489a5bd7129152a9e6dd42ac19":"Mario & Luigi - Superstar Saga (Europe) (En,Fr,De,Es,It) (Virtual Console)","941590a0d3e5de3e46cd2e9242349f56":"Kirby & The Amazing Mirror (USA) (Virtual Console)","94194788e55c1d3c256d816601ee7530":"Who Wants to Be a Millionaire Junior (Europe)","941e3164cd26480ed03eeb997c7d95c3":"Magical Quest 3 Starring Mickey & Donald (Europe) (En,Fr,De)","942f5468a3d6ea6613674a1de3040a3e":"Flood (World) (Proto)","9455cef784b0e4d3b3e706037c552892":"Zen-Nihon GT Senshuken (Japan)","9457a51730ada0ea9ccdbaab51d93613":"X-Men - Reign of Apocalypse (USA, Europe)","9476b0a926165be6a5cb30378beece99":"Oshaberi Inko Club (Japan) (Beta)","9485f273f4e97e9e8f21966407f2e782":"Fire Emblem - Rekka no Ken (Japan)","94b847814fee8e4e5d9fdbf1d3d25107":"Lady Sia (USA) (En,Fr,De,Es,It,Nl)","94bdc794be9af6ec327e2df9394891fd":"King Kong - The Official Game of the Movie (Europe) (En,Sv,No,Da,Fi)","94c6ec2dad53ef7d7ec44b7e438833b8":"Top Spin 2 (USA) (En,Fr,De,Es,It)","94cda1aa3381f457186908ac3fe82f24":"Cars (Europe) (Fr,Nl)","94ce0a59f8a6a0ec40b51ef13cfe0aa0":"Medabots - Metabee (Europe)","9530a3e226b2fdfbfb8fd72242793635":"SD Gundam Force (USA)","9589f5c6bd150e73a4b4427643b9f46d":"Pocket Monsters Diamond - Pocket Monsters Pearl - Manaphy Present Campaign Senyou Cartridge (Japan) (En)","959f4e677160366f356742016427595d":"Shaman King - Master of Spirits (Europe) (En,Fr,De)","95a6ed2862986666933b0ad73291c5da":"Spy Hunter (Europe) (En,Ja,Fr,De,Es)","95abf2bd63a3758b6d86e278ee1fca6e":"Ballistic - Ecks vs. Sever (USA)","95b8cb63649f7bb62a2f9a6a39bf7388":"Revenge of Shinobi, The (USA)","95c545bf05c4348881b0bfa85c951fb9":"Titei Senki Advance (World) (v1.02)","95ce5443198044f4546a42d9d67be0e2":"Sonic Pinball Party (Europe) (En,Ja,Fr,De,Es,It)","95ecb39a21e97ba21b1a992ead24767e":"Rugrats - Go Wild (USA, Europe)","95ef9bda30e0392f319ee8617bd2dca0":"Star Wars Trilogy - Apprentice of the Force (USA) (Beta)","9630eae3565e47174448d3380850c7a9":"Rayman - Raving Rabbids (Europe) (En,Fr,De,Es,It,Nl)","9636918db9f7489630bb8bff049f8ae3":"Daisuki Teddy (Japan)","963c095c626a5dac37251853d406597f":"Gadget Racers (Europe) (En,Fr,De)","968c5daa71e6b41c71143852b27ae0b5":"Shrek the Third (USA)","96b1fe74b2d1ae2b36973acce0ac0bc2":"Wannyan Doubutsu Byouin - Doubutsu no Oishasan Ikusei Game (Japan)","96dbd1bef3587b60b612f0d30fc94415":"Chaoji Maliou Shijie (China)","96dd9b5b227a30c25db3265a2c755d6a":"ESPN X-Games Skateboarding (USA)","96e56b4cf97be08b81750164890df648":"Naruto - Konoha Senki (Japan)","96ec0f9e34ce0a2c2d0a50f793b30c26":"Ignition Collection - Volume 1 (Europe)","971a2979e6e04942e61271ddd563f480":"Final Fantasy IV Advance (Japan)","971e4440cb014dc10c4c834efaef5114":"Shaman King - Master of Spirits 2 (Europe) (En,Fr,De)","972ef647fbbbbb4d53a38dc9f56079b6":"Lemony Snicket - Una Serie di Sfortunati Eventi (Italy)","973128ad4bba6fca4a1764ca9f6d1226":"Sleep Paradox (World) (GBA Jam 2024)","976a59eb7378eb92ed184969ca428db2":"Spyro Advance (Japan)","976bb334f76277357ceb33548d5e03df":"Mermaid Melody - Pichi Pichi Pitch - Pichi Pichi Party (Japan)","9771bfaa4a2182872b3050808d14afba":"GBA Movie Player - 2nd Version (World) (V2.00)","978953379422ea0eef46ed02253fe77a":"Cinnamoroll - Koko ni Iru yo (Japan)","978e59b7362c79193131a35c277e07c0":"WinX Club - Quest for the Codex (Europe) (En,Fr,De,Es,It)","978f10569b0a00b023016fb5f287c0b6":"Angelique (Japan)","97af9c00a5718832b7e5e46f9e434820":"Madagascar (USA)","97c3b138b9797675dfb2135118347992":"Rockman EXE 4.5 - Real Operation (Japan) (Virtual Console)","97cc2aeb06142aedc38b672e90e04a11":"Incredibles, The (USA, Europe)","97e46f72ce3ccdaa76bee1eb60342bc7":"Reign of Fire (USA) (En,Fr,De,Es,It)","97e977d6bb8b2e45a5ad6952dd9a5481":"Classic NES Series - Super Mario Bros. (USA, Europe)","97fa8d3dec6cad0b75ea8063992be6a6":"Gradius Generation (Japan)","980f809ccc92dd1868ab151acd8a9a82":"Fruits Mura no Doubutsu-tachi (Japan) (Rev 1)","9824d54e798f7985d620b41abd722993":"Herbie - Fully Loaded (USA)","9837da1fdfe900c52f2109d9718d4e85":"Pokemon Mystery Dungeon - Red Rescue Team (Europe) (En,Fr,De,Es,It)","9861ab21a881684a50ec5ceaef04558c":"Tetris Worlds (Japan) (Rev 1)","986ff7d285a6c161ccfd2eaef4f8cb18":"XS Moto (USA)","98711bc267ca910024398a1f8c078160":"MotoGP (Europe) (Beta)","987308f23cea98609a77629cc1bfb23a":"Cruis'n Velocity (USA, Europe)","989135c9dd288d2c5731c2563c7863ea":"Peter Pan - Return to Neverland (Europe) (En,Fr,De,Es,It,Nl)","98b3619a09eb08c2c6816c6cd2747527":"Double Dragon Advance (Japan)","98b421421f79e774231b65df7b1b3c47":"Pokemon Pinball - Ruby & Sapphire (Europe) (En,Fr,De,Es,It)","98e8fb1e888bcfc82f5a876f52bd83a3":"Life and Adventures of Buscon de Tormes (World) (En,Es) (Proto) (GBA Jam 2024)","98f96e81826945fad686b08fe7d10e0c":"Spider-Man 3 (Germany)","9937b1fd45c37eec09188c1516da4cea":"Hoshi no Kirby - Kagami no Daimeikyuu (Japan) (Rev 1)","99581023cbb348a577d461e328646218":"Cars (Europe) (Sv,No,Da,Fi)","9964136d79b1d6560e1e87957a845f3a":"Mario Golf - Advance Tour (Spain)","998875b640543e2e9207101b18a5f517":"Shin Nihon Pro Wrestling - Toukon Retsuden Advance (Japan)","99c318243f594c4d84a793519a50a679":"Inuyasha - Naraku no Wana! Mayoi no Mori no Shoutaijou (Japan)","99c8ad779a16be513a9fdff502b6f5c2":"Wario Land Advance - Youki no Otakara (Japan)","9a2cb830688554be22077f7337a0b614":"Spirit - Der Wilde Mustang - Auf der Suche nach Homeland (Germany)","9a3589d2dd7fe1641201098ebd4bba28":"Wing Commander - Prophecy (Europe) (En,Fr,De,Es,It)","9a3db7e1fe781945df44eb6be8713567":"Final Fight One (Japan)","9a56bc96339193e7c198c20d2ca11afe":"Magical Quest 2 Starring Mickey & Minnie (Europe) (En,Fr,De)","9a5a3fb9c4b8e1b82f6584baa7962a2b":"Famicom Mini 05 - Zelda no Densetsu 1 - The Hyrule Fantasy (Japan)","9a5a6c940bbf141d8c2838cf7c818080":"SpongeBob SquarePants - Lights, Camera, Pants! (USA)","9a5d5ac7a142a38c31de819f8e059cca":"Power Pro Kun Pocket 5 (Japan) (Rev 1)","9a5ee5bda6c5d01032ce459a8dbd2b57":"2 Games in 1 - Sonic Advance + Sonic Pinball Party (Europe) (En,Ja,Fr,De,Es+En,Ja,Fr,De,Es,It)","9a7d740691276d4f33cf090bc62ba379":"All-Star Baseball 2004 Featuring Derek Jeter (USA)","9a819e0ce5e550bff890f8329b6986da":"Ed, Edd n Eddy - Jawbreakers! (Europe) (En,Fr,De,Es,It)","9a83e6571c9543a1a4d658564f02be4c":"Zapper - One Wicked Cricket! (USA)","9a8a6131e217cb00b270648ee1697a55":"Stadium Games (Europe)","9a8abbb9e95ad1ead235e3ade9b7b429":"Yu-Gi-Oh! Duel Monsters International - Worldwide Edition (Japan) (En,Ja,Fr,De,Es,It)","9a8ffd8345f88ca90683691aa1456c87":"Zoids - Legacy (USA) (Beta 1)","9aa6ac6fd369a686373a2e1bf8bb6aa3":"Pokemon - Rubin-Edition (Germany) (Rev 1)","9ac5ddef9be27d933d366e224fba4163":"Ed, Edd n Eddy - The Mis-Edventures (Europe) (En,Fr)","9af9f7652dfbd45d06b50a6925ee18f6":"David Beckham Soccer (USA) (En,Es)","9afd02f295a96e5e918c2a67621ad79c":"Hamster Monogatari 3 GBA (Japan)","9b067d0ee54caad2171a00c50e3c35cd":"Golden Sun - L'Age Perdu (France)","9b4f26154fa4cd9501dfe75fb155207e":"Titeuf - Mega Compet (France) (Beta)","9b4f449213d1cbc9a5bfe572b5e7f135":"Mythri (USA) (Proto)","9b59d6954b81dbc01838673c7053c5c5":"Pokemon - 10th Anniversary Distribution (Germany) (Kiosk)","9b5b46ff73e5746f753747b79d2afd66":"Spirit - Stallion of the Cimarron - Search for Homeland (USA)","9b699ec2ec65f4153adda3ea55522bb2":"Zoids - Legacy (USA) (Beta 9)","9b6a43ca9da8b177895f66420b208eca":"2 in 1 Game Pack - Spider-Man & Spider-Man 2 (Europe) (En,Fr,De+En,Fr,De,Es,It)","9b71cc4b1e11fe39ced0c3e41061a117":"Gang del Bosco, La (Italy)","9b72e0259be5e4adddd2fed212c9fde7":"Turbo Turtle Adventure (USA)","9b7b3e2567fe71b6f488ee254209e25e":"Super Mario Advance 4 - Super Mario 3 + Mario Brothers (Japan) (Rev 2)","9b8016741dad6774241ccc78571df4da":"Street Racing Syndicate (Europe) (En,Fr,De,Es,It)","9b809f779a41a24258aa9dbb34263d85":"Minna no Soft Series - Hyokkori Hyoutan-jima - Don Gabacho Daikatsuyaku no Maki (Japan)","9b9b31e30d7ebcc22bcbd7132e142292":"Puyo Puyo Fever (Japan) (En,Ja,Fr,De,Es,It)","9ba9ba05be9bff52143e07cdf962d0ad":"Tiny Toon Adventures - Buster's Bad Dream (Europe) (En,Fr,De,Es,It)","9bb3381caedebff8da5304112fc9039d":"Three-in-One Pack - Connect Four + Perfection + Trouble (USA)","9bb9e68ca6d9a2f0c4bc9052321fbee8":"One Piece - Going Baseball - Kaizoku Yakyuu (Japan)","9bc1ee3d43963364ad25e687ec867d26":"Yu-Gi-Oh! Duel Monsters International - Worldwide Edition (Japan) (En,Ja,Fr,De,Es,It) (Rev 1)","9bc2b765ca6997175fac51e6cdc29089":"Pokemon - Sapphire Version (USA, Europe) (Rev 2)","9bcd687293600451abdd0f181b2427e8":"Celeste Classic (World) (v1.2)","9bf9cd93bf32f6f6661b266e8adf9f2e":"Pink Panther - Pinkadelic Pursuit (Europe) (En,Fr,De,Es,It)","9c0aaa7779635954923940d47165af14":"Shadow - A Parable (World) (Audio)","9c2ddd136b3b893db31b806142d20b8c":"Metroid - Zero Mission (USA) (Beta)","9c62897f2997c1fb8919533e7af3f1c5":"Manga-ka Debut Monogatari - Akogare! Manga Ka Ikusei Game! (Japan)","9c6a3c4c14ff9d8ca6df08f3f251c63f":"Britney's Dance Beat (Europe) (En,De)","9c7546d2fd1399614b035ead1d66aa8d":"Legendz - Yomigaeru Shiren no Shima (Japan)","9cc426f1ccbb18f1e156f6f9ee28d2fc":"Crash Bandicoot Advance - Wakuwaku Tomodachi Daisakusen! (Japan)","9cc7dcf1d0f07687abeec84995c226b2":"Madagascar - Operation Penguin (Europe)","9cdc062badfcb4d0993c4455a4cf3c52":"Sonic Advance 2 (Japan) (En,Ja,Fr,De,Es,It) (Virtual Console)","9ce73ff9aa1473f250d103c1bdbbd738":"Megaman Zero 3 (Europe)","9cef2ca9fba8a4532629f8c7e7c9ddf8":"Another World (World) (En,Fr) (v2.1)","9cf2886c15142660da7f70954b182f1f":"Fantastic 4 (Europe)","9cff0577973c0219738da5995edcf3ae":"Scooby-Doo! - Mystery Mayhem (Europe) (En,Fr,De)","9d01c59abe3149ca2a9c0900571e6914":"Samurai Deeper Kyo (USA)","9d0d27345bf88de8b025aa24d54d6bad":"Mario Party Advance (USA)","9d33a02159e018d09073e700e1fd10fd":"Pokemon - LeafGreen Version (USA, Europe) (Rev 1)","9d3a663de5228414d7e6cda7244c5d91":"Anguna - Warriors of Virtue (World) (v0.95)","9d419bfa53e1c4241e076686bf9646cc":"Meitantei Conan - Nerawareta Tantei (Japan)","9d4af1ce1b242538b52bdfdf30b5b257":"Sister Princess - RePure (Japan)","9d7dba1bb70888a163318cb7015cde66":"Wario Land 4 (USA, Europe) (Virtual Console)","9d816b369343d39b94af9a8b0ce7f63b":"Pokemon - Saphir-Edition (Germany) (Rev 1)","9d84ad590d1dffa33b1b1e2e1d64fb4d":"Ougon no Taiyou - Ushinawareshi Toki (Japan)","9dc72587c935d493a4363f598faea56e":"Castlevania - Harmony of Dissonance (Europe) (Castlevania Advance Collection)","9e02f1c9f26f40905d43188b2bd2d98e":"Sonic Advance (Japan) (En,Ja) (Rev 1)","9e3c1af23ea83cc4852c632525bea1c5":"Ed, Edd n Eddy - Jawbreakers! (USA)","9e6ff628db81caa74dca356eaadadac9":"Crash Nitro Kart (USA)","9e7798abbd16a87548c380891accae28":"Rugrats - I Gotta Go Party (USA, Europe)","9e86774cc5246458cf3f32d64501f56c":"Dokidoki Cooking Series 2 - Gourmet Kitchen - Suteki na Obentou (Japan)","9e95f7804e3b8011b89048f68e541db8":"2 Games in 1 - Hot Wheels - Velocity X + Hot Wheels - World Race (USA)","9ed82843cc54876362be56faccb15d75":"Final Fantasy V Advance (USA)","9edaad5e2b87cf196443a996a0bdf0e2":"Rockman Zero 4 (Japan) (Virtual Console)","9edc43748f363213ceef64b3f3aa4cda":"Peter Pan - Return to Neverland (Europe) (En,Fr,De,Es,It,Nl) (Rev 1)","9edf4f6e19d901d470aa1117cb0372b3":"Legend of Zelda, The - A Link to the Past & Four Swords (Europe) (En,Fr,De,Es,It)","9eecb3d524fe8bc2362b3f0b1045f4ab":"Hamtaro - Ham-Ham Games (Japan, USA) (En,Ja)","9ef8e30824db751f3d42e048514a3624":"Shrek 2 (USA, Europe)","9ef9715f14ae656bbc4a11f5d2cb7480":"Boboboubo Boubobo - 9 Kyoku Senshi Gag Yuugou (Japan)","9f06bd310c8d20249b745e38104067d9":"Duel Masters 3 (Japan) (Rev 1)","9f0877f89cb43331c36f7edbe8c9ba46":"Super Mario Advance 3 - Yoshi's Island + Mario Brothers (Japan)","9f1c1202ed1d856c5836cee6818a171e":"Bokura no Taiyou - Taiyou Action RPG (Japan)","9f22c000f0134489e952348213557f0d":"Mario Golf - Advance Tour (Germany)","9f39a0635363f9e534a4b48c64d52322":"Drome Racers (USA)","9f511c25d8d14ffea0f381e157dab483":"Asterix & Obelix XXL (Europe) (Fr) (Beta 1)","9f6e382bc3600b9a27ba31fabcd78ac3":"Blender Bros. (World)","9f738e440d5a6ebbe5e5dcf8b727bbb3":"Double Dragon Advance (USA)","9f966d8f9f2865e96a42eed33a201cde":"Zook Man ZX4 (Taiwan)","9f9e47a8b37fb27c2f387654797c95a3":"Kill Switch (USA)","9facd164f8558a699b6676868216af91":"Combat Choro Q - Advance Daisakusen (Japan)","9fb5863a15e8504667328d24365b31e2":"Gegege no Kitarou - Kikiippatsu! Youkai Rettou (Japan)","9fd0815a6c2ca0d787952ffbc0a42de1":"Gensou Maden Saiyuuki - Hangyaku no Toushin-taishi (Japan)","9fee0cf88cb21f2009636b0581a3a502":"Kotoba no Puzzle - Mojipittan Advance (Japan) (Virtual Console)","9ff40cf640575211202b7bda5487abbb":"Megaman - Battle Network (USA)","a005c0d182f08177f732f4e03f3eeb68":"Minna no Soft Series - Shanghai (Japan) (Rev 1)","a0451dbc9fabbd40a86b76c30e60794a":"Hikaru no Go (Japan) (Rev 1)","a05c86d8c5291049ebd22304ad9c2029":"Little Mermaid, The - Magic in Two Kingdoms (USA, Europe) (En,Fr,De,Es,It)","a06268ee41dfe596990c1916a6ea0eca":"Chicken Little (Japan)","a06ad4812edb8d042602fcde222f7ab7":"Groove Adventure Rave - Hikari to Yami no Daikessen 2 (Japan)","a08c51144b35f3a09ba1c65b583feddd":"Game & Watch Gallery Advance (Europe)","a0a932c70a245ed923125d7e62b10f01":"Smashing Drive (Europe) (En,Fr,De,Es,It)","a0b6c2fd85ba0fcde92a15daf7aaceab":"European Super League (Europe) (En,Fr,De,Es,It)","a0c9f4034bb720aab33b356b002e8a55":"Doubutsu-jima no Chobigurumi 2 - Tama-chan Monogatari (Japan)","a0ef6d6f6346d5fa888348012eb4f6c2":"J.League Pocket (Japan)","a0f246a1b1516cbc0ce8e8158e221fd4":"Turok Advance (Unknown) (Proto) (Earlier)","a0f41d368e75924c642553e61311416d":"Iridion II (USA) (Beta)","a104896da0047abe8bee2a6e3f4c7290":"Legend of Zelda, The - The Minish Cap (USA)","a160e317dcbd117035214cb47f35c466":"2-in-1 Fun Pack - Shrek 2 + Madagascar (USA)","a1662b3b7ea35cf59070d98b0e7f7ffc":"Kawaii Koinu Wonderful (Japan)","a177481ebdc538ad11692b49367ce18d":"Medabots AX - Metabee Ver. (USA) (Virtual Console)","a18eb28fa9f1ed0afe5248ff2afab896":"WWF - Road to WrestleMania (USA, Europe) (Beta)","a1ac9ff0ab98c1a85204a73fcc750f79":"Ninja Five-O (USA) (Limited Run Games)","a1ae1feaf8199f7c6e2dc368382890ba":"Best Play Pro Yakyuu (Japan)","a1b0a5ba65f8287f7474e984bbfe8561":"Justice League - Injustice for All (USA) (Beta)","a1b8d71fa43915d37b955a2b1a0ed80a":"Megaman - Battle Network 5 - Team Protoman (Europe)","a1be57cb0f1acc812f46657bbfe5904b":"Golden Sun - L'Era Perduta (Italy)","a1d050c200887e57004413a62dcc5d89":"Pazuninn - Umininn no Puzzle de Nimu (Japan)","a1d5334b1b3dd31431eb232716ec8519":"2 Games in 1 - Monsters, Inc. + Finding Nemo (USA)","a1ece5ce4fe328f0c0240fc281de4f4b":"Z.O.E. 2173 - Testament (Japan)","a1f160ee30ed36edea341a6f1c6a4efc":"Donkey Kong Country 2 (USA)","a202eea1b2801421714260d5e02a7492":"Micro Machines (Europe) (En,Fr,De,Es,It)","a217dda835c51021e8b2e68b773e1170":"2 Games in 1 - Finding Nemo + Finding Nemo - The Continuing Adventures (Europe) (Fr,Nl+Fr,De,Nl)","a219b3042eb65899baafa5143c53560c":"Sonic Advance 2 (Japan) (En,Ja,Fr,De,Es,It)","a21ec24a3a55bb2fd02dc419ebb3cb36":"Master System 106-in-1 (World) (Pirate)","a234f8b94fafc111ab29f235361baf50":"Hey Arnold! - The Movie (USA)","a245175357335daa1f2cdf4b9e50ed64":"Apotris (World) (v3.4.5)","a2492ca979c2c616ad38e81e5dc3e655":"Rockman EXE 4 - Tournament Red Sun (Japan) (Rev 1)","a2589a40c3f92a539969124cecc9b828":"Chaoji Maliou 2 (China)","a267752542eea07127e53d6179db760d":"Cyberdrive Zoids - Kijuu no Senshi Hyuu (Japan)","a26c440065d89f56275644ffa34140ef":"Advance Guardian Heroes (USA)","a27db836275aa6f0ba559c6fcfbcde0b":"SpongeBob SquarePants and Friends in Freeze Frame Frenzy (Europe) (En,Fr,De,Es,Nl)","a2bd14f0b57836fe7288e03a6fc154fa":"Sonic Advance 3 (Japan) (En,Ja,Fr,De,Es,It)","a2d26dc774cec9a0b47388a5dd727b03":"WarioWare, Inc. - Mega Microgame$! (USA)","a2d535d55174ec253309d922ca9e594f":"Bakuten Shoot Beyblade 2002 - Gekisen! Team Battle!! Kouryuu no Shou - Daichi Hen (Japan)","a2f0659905664d9a6aafcf9e7a80fcac":"Let's Ride! - Dreamer (USA)","a2f94ded0e81af7cdb36e675e09a60ec":"2 Games in One! - Marble Madness + Klax (USA)","a31d19d40a70646eaeaa233ac46fe8d7":"Rayman - Hoodlum's Revenge (USA) (En,Fr,Es)","a3201407f7988a563f4dfb243db02bcb":"I Spy Challenger! (USA)","a32b069277e1752cda224153fde5a24a":"Medarot G - Kuwagata (Japan) (Virtual Console)","a32d78cb1d76eb097760417f232b4b76":"Megaman - Battle Network 5 - Team Colonel (Europe) (Virtual Console)","a340d5d4d96a0f49d66112ad25820118":"Dragon Ball - Advanced Adventure (Europe) (En,Fr,De,Es,It) (Beta)","a3658157b02a6f5618866af93c9b771d":"Mario Tennis Advance (Japan)","a378742dd5e02c8511198bcf1cb551cb":"Barnyard (USA) (En,Fr,De,Es,It,Nl) (Beta)","a37aace8fef3098138b045eb26493730":"Twin Series 6 - Wannyan Idol Gakuen + Koinu to Issho Special (Japan)","a3827342698bd0ff407e2d805bfc27ad":"Bleach Advance - Kurenai ni Somaru Soul Society (Japan)","a3add916e37dc978a45853703d67d48d":"Bakuten Shoot Beyblade 2002 - Gekisen! Team Battle!! Seiryuu no Shou - Takao Hen (Japan)","a3b2dd184e80764a1a3c0d7799089327":"Ford Racing 3 (USA)","a3dca1a3167cb855aacdca650c4ce39f":"Mario vs. Donkey Kong (Europe) (En,Fr,De,Es,It)","a3dd3b98ad5049503af18f80c84731fc":"Atomic Betty (USA, Europe)","a3e8563f64ae52332c7a7eceec73f5ff":"Polarium Advance (USA)","a3ee8987d717a94353c05462639b1946":"Tottoko Hamutarou 3 - Love Love Daibouken Dechu (Japan) (Beta)","a3f7ef5c049c16a450037d5aa51f25e7":"Tantei Gakuen Q - Meitantei wa Kimi da! (Japan)","a4078f38dbb47ab22a9c74b725f3e481":"Doom (USA, Europe)","a40e7bbd268202da470950335a6793f5":"3 Game Pack! - The Game of Life + Payday + Yahtzee (USA)","a40e90f68309ad1fd0b9efe33dcc6ba8":"Pokemon - Edicion Zafiro (Spain) (Rev 1)","a413cf9036c03eac937539a255ac6949":"Breath of Fire (Europe) (En,Fr,De)","a44251198e1c9087c40262c34531a5a3":"Yu-Gi-Oh! Duel Monsters GX - Mezase Duel King! (Japan)","a455d815cdb8cbc740961bb72bec4475":"Ecks V Sever (Europe) (En,Fr,De,Es,It)","a458d8cf99ee5dbf244b0900e7df0588":"Nakayoshi Pet Advance Series 3 - Kawaii Koneko (Japan) (Rev 1)","a45e4c70fa05008d3e90f2bfc1f6dc93":"Croket! 2 - Yami no Bank to Banqueen (Japan)","a46846238a4e41ab301f44a3e34d1779":"2 Games in 1 - Scooby-Doo + Scooby-Doo 2 - Les Monstres Se Dechainent (France) (Fr+En,Fr,De,Es,It)","a476526adc63d7e287d905eb7251d120":"Gyakuten Saiban (Japan)","a479748cb20e4ed3d72a829dc5a870fd":"B-Densetsu! Battle B-Daman - Moero! B-Damashii!! (Japan)","a4837934ffe072aa692d7bdb1100e34d":"Action Replay (Europe) (En,Fr,De,It) (v3.3)","a48cfab18f650815c7152f55d9727946":"GB-A TV Tuner PAL (China) (v1.3)","a491402dd313a7c2cdd06f9ef072c0f3":"Skyland (World) (Proto 5)","a4a45873932ec855d0a96fca52fe81ea":"Ninja Cop (Europe) (Limited Run Games)","a4bf3aa27a7c5c3ffd0dcaf27da99486":"Hardcore Pool (Europe) (En,De,Es,It)","a4da40efe56a8ca4190b4f8f6b7b4f60":"Robot Wars - Extreme Destruction (Europe) (En,Fr,De,Es,It,Nl)","a4de2d3cbdc2bd88946ff2ead5d80d5d":"2048 (World) (GBA Jam 2024)","a4e3e4754c7bd16e5e2a52ee83ab2be1":"Digimon - Battle Spirit (USA)","a4e4230baf0e3b819c84eae58097cdb0":"Ultimate Muscle - The Kinnikuman Legacy - The Path of the Superhero (USA)","a4f50dc3b3cdd6b3d688e1b89b34703d":"Mickey to Donald no Magical Quest 3 (Japan)","a4fe285e6e4c0248d9d2fd9ae22590cd":"bit Generations - Dialhex (Japan) (En)","a505bbbc5a97c174d861fe450f0865a4":"I-Ninja (USA) (Proto)","a509c1b5fa74f70550ee81386c7fe4b9":"Kien (World) (Incub8 Games)","a515e58baf034344f78076025c3c99c9":"Youkaidou (Japan)","a52ce4e5e4dd8761a15521712c7dddd1":"Metroid - Zero Mission (Europe) (En,Fr,De,Es,It) (Virtual Console)","a5618debdd650074cdebee32a2d58704":"Tremblay Island (World) (En) (v1.1) (Kickstarter Edition)","a573f9a77a0a118f111e63880569bf1d":"Trollz - Hair Affair! (Europe)","a5775a65801ccdd6c88778262d9a4d0a":"Totally Spies! 2 - Undercover (Europe) (En,Fr,De,Es,It,Nl)","a57dd211881c6fbb7b92487ab6e3b9af":"Justice League Heroes - The Flash (Europe) (En,Fr,De,Es,It)","a581264601cbd608bd19922de4dc871e":"EZ-Talk - Shokyuu Hen 3 (Japan)","a5968bc058ea60a1e389bcd9306d9c7d":"Tekken Advance (Japan)","a5a84ac11de577f929c19996fa15a25e":"Super Robot Taisen A (Japan)","a5ae01eda1b2ff6c16c9f69dbbdae488":"GBADoom (World) (v2.7)","a5b5b2b18363d37560f48a2fff83f471":"Tower SP, The (Japan)","a5b75829debc9262b08076a94c8473eb":"Gunstar Super Heroes (USA)","a5baa0d069192da6eff1944876b50b03":"Powder (World) (v1.18)","a5bf85cd40533d76a1fb2b0b2f8d5b19":"Popeye - Rush for Spinach (USA, Europe) (En,Fr,De,Es,It)","a5c6b967e5d7c35d2aba50bbf4c5657c":"Aka-chan Doubutsuen (Japan)","a5c7e848777e487bb762131146c5e0ec":"Turok Advance (Unknown) (Proto) (Dark Version)","a5f4c03f31988a0bd97569372e1f826d":"Bouken Yuuki Pluster World - Densetsu no Plust Gate (Japan)","a601f5dcf364cced8eba00f68b8d3938":"Barbarian (USA, Europe) (En,Fr) (Proto 2)","a62155a1c3dd4bad9e260a2bf527b69f":"Monster Guardians (Japan)","a64cd7fa9c84da61a4a358c321f248df":"Chicken Little (USA, Europe) (En,Fr,De,Es,It,Nl)","a6523df3d20921b3fb37bd53bb1a026e":"Super Panda (USA)","a668a8f0847a99d34463661563b4fc0f":"Powerpuff Girls, The - Him and Seek (Europe) (En,Fr,De,Es)","a6c6879b9dcf9a67991f4cf81462498c":"Tony Hawk's Downhill Jam (Europe) (En,Fr,De,Es,It)","a6c803e0887f46db78bdf095628ed7de":"Casper (USA) (En,Fr,Es)","a6cc5b4377dc7396fa275113e1b958b4":"Star Wars - Flight of the Falcon (USA)","a6e3e17f96065a33c8ad3b540583fb64":"Medabots AX - Rokusho Ver. (Europe) (En,Fr,De,Es,It)","a6e8aa4c79ad8c68922c749ab7de7829":"Chaoji Maliou DX (Taiwan)","a6fe988a31724789a21bae6b65cd79b2":"Defender of the Crown (Europe)","a7050cb081978c01421677d386933512":"Davis Cup (Europe) (En,Fr,De,Es,It)","a7265630754bd040cb54f7fb27fdb9f9":"Driv3r (Europe) (Beta 3)","a72a1d999e9c607144fa7f3c2145eb75":"Wizardry Summoner (Japan)","a73253d79628d92c2fee1e9d2bbd6ff5":"Flintstones, The - Big Trouble in Bedrock (USA)","a7511d8a3982f175adf8ef683b96b24b":"SpongeBob and Friends - Attack of the Toybots (Europe) (En,De)","a7589564716d173192e290e9c97e040a":"Made in Wario (Japan)","a7763d58c7fd18307cefd9bcb6391d89":"Aero the Acro-Bat - Rascal Rival Revenge (USA) (Beta 2)","a7ad5647f3788ae37870e6dffe2122e7":"Konchuu Monster - Battle Master (Japan)","a7b49de9ab6230d8077bbef4d906497b":"Bratz - Babyz (Europe) (En,Es,It)","a7f1cc981555e953032a5444f2b2e0e6":"Akumajou Dracula - Circle of the Moon (Japan) (Castlevania Advance Collection)","a7f1f118df6437e4dc1d2906dbb2109b":"Castlevania - Akatsuki no Minuet (Japan) (Virtual Console)","a80377600d682074b81b97c9f616dcd5":"Metroid Fusion (Europe) (En,Fr,De,Es,It) (Virtual Console)","a80a447ebde7c4bac73caf9d6910f9ee":"Fruits Mura no Doubutsu-tachi (Japan) (Rev 2)","a8110c3928caffb9a73b48a009f9044f":"Rockman Zero (Japan)","a822bdf8301f00b392627f7e3476510c":"Double Game! - Quad Desert Fury & Monster Trucks (Europe)","a822dd94ad89ea5fe660a2564d6558a5":"Advance Rally (Japan) (En)","a827b6305c196589c0fa6ed2f9ec0e3b":"CT Special Forces 2 - Back in the Trenches (USA) (En,Fr,De,Es,It,Nl)","a8285fd50dde50dc2c37fc0375dc03cf":"Banjo-Pilot (Europe) (En,Fr,De,Es,It) (Beta 2)","a82bd152baf314b0d69a12a47c38e60f":"Shantae Advance - Risky Revolution (World) (Limited Run Games)","a82de7e0ffe0dc709205706b5293dc1a":"Toadally Awesome (World) (GBA Jam 2021) (Unlocked)","a85abd253b9716a6266442b6f26362c4":"Power Rangers - La Force du Temps (France)","a85ba35d880113d4f92163e899948c04":"Double Pack - Sonic Advance & ChuChu Rocket! (Japan) (En,Ja,Fr,De,Es)","a88efbbba70ec2bb2a9a82ea127a17d1":"Super Mario Advance - Super Mario USA + Mario Brothers (Japan) (Virtual Console)","a894d51e4c9ae34b398b7dfcddffc074":"CIMA - The Enemy (USA)","a8adfb32c1d57a1071acc7b9a47733ce":"Tennis no Ouji-sama 2003 - Passion Red (Japan)","a8af304d0a9a60911018847cdea41eb8":"Pac-Man Collection (USA) (Virtual Console)","a8c8ff92a6b366fc0e363eb80201c367":"Rayman 3 (USA) (En,Fr,Es)","a8d1fd87ad24b27327f3974881bfc193":"Tir et But - Edition Champions du Monde (France)","a8e39c39ef1e7d2005adb624c6b0fa2f":"Shimura Ken no Baka Tonosama - Bakushou Tenka Touitsu Game (Japan) (Rev 1)","a8efef99521a3267779262aa1249d3c8":"Stepper (World) (v1.7)","a93c24b102f9ffbd5676e18f2e4cb33c":"Pokemon - Rubin-Edition (Germany) (Debug Version)","a9572991316ac2e105abfec80aaeb02e":"Snood (Europe) (En,Fr,De,Es,It)","a980189cfb6200a8a092eca53c85af80":"Tom Clancy's Splinter Cell (USA) (En,Fr,Es)","a9a2f5d60ea44e08901abdfe69f2438a":"Densetsu no Stafy 3 (Japan)","a9bcc7b2c3dd026b28d442d7c73891e4":"Alice Sisters (World) (En,Ja,Fr)","a9c50293ac1c9c2fc59308f0ec1ba892":"Snap Kid's (Japan)","a9c93a07964aa816a8e226ae0c735a41":"Crash Bandicoot Purple - Ripto's Rampage (USA)","a9cb22cd3729b8116c00de9881bb9cae":"Rocket Power - Beach Bandits (USA, Europe) (Beta)","a9ed5e9ce8b27136133af666474fd42d":"Cars - Mater-National Championship (USA) (En,Fr)","aa12b4cf5078876a16bbfacde46d4bc0":"Shoot for the Moon (World)","aa1d5eeffcd5e4577db9ee6d9b1100f9":"Megaman Zero 3 (USA)","aa4acde4d4147725f74efbd03a1c65e4":"Max Payne Advance (Europe) (En,Fr,De)","aa571c3f25128f4b1cbfac89a7ae5d99":"Tiger Woods PGA Tour 2004 (USA, Europe)","aa78b66d1c1fd334587c0ebe7932d006":"Wings (Europe)","aa99d027561a92eb5a5af4e48f6e560c":"Madagascar (Spain)","aa9aeea52de34b25351e76d70bfbe2b8":"Rockman Zero 3 (Japan)","aaa5acb5b94fccc8f3de8fef3f1a22cb":"Cars - Mater-National Championship (Europe) (En,Fr,De,Es,It,Nl)","aacbdc2916c5941607b0b2d6d68512ed":"Fire Pro Wrestling (USA, Europe)","aaf042d4aa5852a653ea4416cc798101":"2 Games in 1 - Scooby-Doo + Scooby-Doo 2 - Desatado (Spain) (Es+En,Fr,De,Es,It)","ab0999e2d7c13ada9cf374cd0aa47f97":"Mech Platoon (USA)","ab1bb302ca8dbbb2066491e686f32d3e":"Ultimate Brain Games (USA, Europe)","ab1c6c1e37df4c3dacf88a1ecbe59afd":"F1 2002 (Europe) (En,Fr,De,Es,It)","ab1caa14f56ce349b95216816a2dbb62":"X-Man - Armour of Might (Russia)","ab2a7f46b0c806429ce56ff53df10620":"Crash & Spyro Super Pack Volume 2 (Europe) (En,Fr,De,Es,It,Nl)","ab6251b0f54cf6787fd4a6b5d5d4c5b6":"Nakayoshi Pet Advance Series 3 - Kawaii Koneko (Japan)","ab74d01622e145a4687ffc3e8af5f86b":"Tak and the Power of Juju (Europe) (En,Fr,De)","ab7b66435bcecb60a786fd62a532e4ab":"Tom Clancy's Splinter Cell (Europe) (En,Fr,De,Es,It,Nl)","ab9f346110d5b97afa4e3e10347d1000":"Daredevil (USA, Europe)","abf042be32e2aeab1b926efe6d4b8b8b":"Pocket Monsters - Sapphire (Japan) (Rev 1)","abf8a36e5cb2ef2c989ac44b5ebe68ea":"Chou Makaimura R (Japan)","abfa372f860d0f10037bf28cc78de409":"Summon Night - Swordcraft Story (USA)","ac0311b3923d45b89a2db746280c7915":"Yu-Gi-Oh! Duel Monsters Expert 3 (Japan) (En,Ja,Fr,De,Es,It)","ac2b848b30e70d73fa2695f9aed54624":"Unfabulous (USA) (Beta 2)","ac4f3b73a920ddaabc9f9e003c92e02b":"Vattroller X (Japan)","ac593798dfb4a39c4502ba3ea9092680":"Recca no Honoo - The Game (Japan)","ac693d395395405b5cc902877025e675":"Classic NES Series - Xevious (USA, Europe)","ac7714ceeab8964ea40cfac5c52afd5f":"Spirit - Der Wilde Mustang - Auf der Suche nach Homeland (Germany) (Beta)","ac79eaa4c54cec46f8d6d9878c11a390":"Magical Houshin (Japan)","ac807e619878b8219240d908bd7d5ed6":"Sea Trader - Rise of Taipan (USA)","ac9b62069b180da5ddf1646d4e142d59":"Megaman - Battle Network 4 - Red Sun (Europe)","acac2e3c7752f2407d787f084c0bf6f8":"Rocket Power - Zero Gravity Zone (USA)","accb22e06c37f68b55d8fa34853f885b":"Bratz (Europe) (En,Fr,De,Es,It)","acce7ee3388d135aaa8c5ec88e568182":"Super Hornet FA 18F (USA, Europe)","ace5dff7d63fb765515b43e6950a455c":"Nicktoons - Attack of the Toybots (USA)","aceaffd0c62017a1bb4df5817b61a0a7":"2 Games in 1 - Buscando a Nemo + Los Increibles (Spain) (Es,It+Es)","acefebbe5fdf25ae83a386a6d1c09bca":"Yu Yu Hakusho - Ghostfiles - Tournament Tactics (USA, Europe)","acfd5c0223a5719665d464d72b6d1b33":"Game & Watch Gallery 4 (USA) (Virtual Console)","ad0952bfb34dfedb56b1a009ea1656de":"Top Gear GT Championship (USA)","ad4cf738f97416827baf17d6c43576d7":"Advance Wars 2 - Black Hole Rising (Europe) (En,Fr,De,Es,It)","ad56e4df06d70f83548f2ec92dcc15ed":"Chi Vuol Essere Milionario (Italy)","ad5bc8554ad143698f62be566789c519":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 8)","adc583b26cef3920fb9ffd152aeb98dd":"Back to Stone (USA) (En,Fr)","ade79cc8fac2f433648fb95ca8c51164":"Yu Yu Hakusho - Ghostfiles - Spirit Detective (Europe) (En,Fr,De,Es,It)","adf1ac69caf510176ee1028ecf6f7adf":"Cat in the Hat, The (USA)","adf9efca75fad810c13a5fb3326dddd2":"2 Game Pack! - Matchbox Missions - Emergency Response + Air, Land and Sea Rescue (USA)","ae17a09073dc708469e6a77c537d3f21":"Tennis no Ouji-sama 2003 - Cool Blue (Japan)","ae1ab2aeeda397fb25536a6851f43fe1":"Kiss x Kiss - Seirei Gakuen (Japan)","ae34e324b26f0d693ee73f6a4b8b995e":"Fire Pro Wrestling 2 (USA)","ae35fb67a74c92a3f063408fd0bc4a29":"Custom Robo GX (Japan)","ae5ee35f0aadf386cb6918a2d83f5a3b":"Lunar Legend (USA)","ae77f77fe5879abfa3a15d4422dac2db":"Battle Network - Rockman EXE 2 (Japan) (Rev 1)","ae89bfb0fe9892c92c061013be4619a2":"Minna no Soft Series - Zooo (Japan)","ae8af6b539d509019bdd06565c10804a":"Super Mario Advance 4 - Super Mario Bros. 3 (Europe) (En,Fr,De,Es,It) (Rev 1)","aea3115b6ce9a25aa574c9754f4fedfb":"Guilty Gear X - Advance Edition (Japan) (Beta)","aee29c76808d8debcfb3b7945270861b":"Dora the Explorer - Super Star Adventures! (USA)","aee485056bb727880ab4f4056b7da477":"ESPN International Winter Sports 2002 (USA)","aef559ca2b6f1ee37c423b46bb4ff909":"Lizzie McGuire 3 - Homecoming Havoc (USA)","af4d91a53dd51e98e6c5249502897904":"Mario Party Advance (Europe) (En,Fr,De,Es,It) (Virtual Console)","af5040fc0f579800151ee2a683e2e5b5":"Metroid Fusion (USA)","af76bcb446cfc602c856a1e03c6bcf38":"Famicom Mini 01 - Super Mario Bros. (Japan) (En) (Rev 1)","af7e218eb4a7f28f1887b3504647854e":"Phantasy Star Collection (USA)","af8b0b175f7ec8914cb87b3161ba1aaa":"Mother 3 (Japan)","afa41ce5b29fae6464ca878691edb46b":"Contra Advance - The Alien Wars EX (USA) (Virtual Console)","afa8a9e3d7a2cd86c6ce8331532825b0":"Terminator 3 - Rise of the Machines (USA)","afbd8a5d314391d9731692cc1131dc6c":"Bratz - Forever Diamondz (USA)","afcd7bcfdc31ae934333da25db6107c0":"Thunder Alley (USA)","b0118c3619b732c172ce9770393d8a06":"Paws & Claws - Pet Resort (USA)","b01251955731bf7509cb09af8f49ad1d":"Sushi the Cat (World)","b038a9370b9a3924d38faa4eae6254d3":"Madagascar - Operation Penguin (Europe) (It,Nl)","b03e618d511a7ed9ec3adc43bd58aa96":"Megaman - Battle Network 5 - Team Protoman (USA) (Virtual Console)","b05e5030da8f059ce836a594e16309b5":"FIFA Soccer 2003 (USA, Europe) (En,Fr,De,Es,It)","b06f2e981aa7702e7a13602f8e5013d1":"Madagascar (Europe) (Fr,De,Pt)","b075dcf2b63a992e10204b553800ff40":"Pokemon - Versione Zaffiro (Italy) (Rev 1)","b09c14c35eeef27b30398ac7ac81e6fc":"Hero Core (World)","b0a0c0fd729544c7fd786a6a4d4b419f":"Cabela's Big Game Hunter (USA)","b0c2d1eea6b076c167fd74ce79538d91":"Phantom, The (Italy) (Proto)","b0c8edeae511c647f9617b32ddc37594":"Barbie Horse Adventures - Blue Ribbon Race (USA)","b0cb6dc69206ed9b20496e49ae2840cc":"Downtown - Nekketsu Monogatari EX (Japan)","b0d1a5d5633e521dc9116f866b3e3cd4":"Scrabble Scramble! (Europe)","b0f1054d5177dd8ec5f90b63fb1c6e09":"Motocross Maniacs Advance (USA) (En,Es)","b106f85e2f6c3a460e8ca5cc2261c90b":"Kill Switch (Europe) (En,Fr,De,Es,It)","b107d6671edc1721663b451836df0753":"Medabots - Metabee (USA) (Virtual Console)","b10afb07357cb31ac7c77d431894ea61":"Quake (USA) (Proto)","b10d956c9e9dd247b9602d4960db9557":"Rushed Adventure (World) (Proto) (GBA Jam 2024)","b1318e5c93aaef441fc5e596996df870":"Hyper Sports 2002 Winter (Japan)","b13292b1d67976f9abf8a318743e88d5":"Shrek - Smash n' Crash Racing (USA)","b14194832a55a7197916edb0bb92bea3":"Rocket Power - Dream Scheme (USA, Europe)","b14872072d464be5df4f1a1d09c158f6":"Acrobat Kid (Japan)","b152f47bf277560ecc1054ae8981a775":"Denki Blocks! (Japan)","b15b6cb642868b1b92031a10e5a68dd7":"Ice Nine (USA, Europe) (En,Fr,De,Es,It)","b169016486294d9d9eb61bbf96d30400":"Mat Hoffman's Pro BMX (Europe) (Fr,De)","b186a9ba291a156c45640cb3c6b8a710":"Medabots - Metabee (USA)","b19314e2b31266364a7a12d9d4b00b85":"Hot Wheels - Velocity X (Europe)","b1c3362836665e8cbc70afbc258078ed":"Kirby - Nightmare in Dream Land (Europe) (En,Fr,De,Es,It) (Virtual Console)","b1ca40e6e5815da256890ecaab1b5d73":"Advance GT2 (Japan) (En)","b1ca9871a584ee4da0176e3f43cb9846":"Goodboy Galaxy (World) (En,Ja,Fr,De,Es,Pt-BR,Zh,Ar) (Evercade)","b1e538380c4c0595ac47ee8059f5a614":"Go! Go! Beckham! - Adventure on Soccer Island (Europe) (En,Fr,De,Es,It)","b21129cb55d887d0ef4481c699feed99":"Yu-Gi-Oh! - World Championship Tournament 2004 (Europe) (En,Ja,Fr,De,Es,It)","b21148257d0aeadaf9c6cb35b857473e":"Samurai Evolution - Oukoku Geist (Japan)","b2436c0b6e02d17771b48cdcf24bee66":"Diadroids World - Evil Teikoku no Yabou (Japan)","b24a17d080a01a404cbf018ba42b9803":"Megaman Zero (USA, Europe)","b282e479e10aea057e762de7b9d4ca4b":"Crash Bandicoot XS (Europe) (En,Fr,De,Es,It,Nl)","b288c64ec50625b6b80bc6730efbf190":"Yu-Gi-Oh! Double Pack (USA)","b295f02a07f00f80669352767242268f":"ATV - Quad Power Racing (USA, Europe)","b2b2642e49ce5518aafc19f27aa2d8ec":"Mandrake the Magician (Italy) (Proto)","b2c954ccf09e408c55886b6686d39c6f":"Justice League - Injustice for All (USA)","b2e1c0de1d83068b2daa90efc543bd29":"CT Special Forces - Back to Hell (Europe) (En,Fr,De,Es,It,Nl)","b32cb8feed35b03fd6a49d50dc9223c7":"Mario DX (USA)","b33f6d3a7151f15cd10f71a7e2b3dfdd":"Croket! 3 - Granu Oukoku no Nazo (Japan)","b354078c54b943bdc6d2227e4686ea0f":"Mario Kart Advance (Japan) (3DS Virtual Console)","b35d9966fe8138e00473690bc522e99e":"Famicom Mini 02 - Donkey Kong (Japan) (En)","b3806462180cda73d1f8f48d72236394":"Donkey Kong Country (USA)","b3a719f647a84f5496c0ad97d5de6370":"Santa Clause 3, The - The Escape Clause (USA)","b3c187c391a4a75c257ecc83abab30a8":"Meitantei Conan - Akatsuki no Monument (Japan)","b3f65540eea88983c63e454b34d3028e":"Cartoon Network Speedway (USA)","b3f6ea2a0876d9b706ef7f79a0479a32":"Hoshi no Kirby - Yume no Izumi Deluxe (Japan)","b41973fcaf82c8ea2bb216027d89cba6":"With the Last Moonbeam (World)","b41a755562a4128829c6dc12c8aba3e3":"Shikakui Atama o Maruku Suru. Advance - Kanji, Keisan (Japan)","b433dca158d3bc3d73cb0ba6e831b258":"High Heat Major League Baseball 2003 (Japan) (En)","b4430351ceee3856e9b0f4da194f24a2":"Grim Adventures of Billy & Mandy, The (USA) (Beta)","b44aacbfe0a64d73b466f8f7bcca4577":"Card e-Reader (Japan)","b468236a140da4ee89286878a0964e9f":"Poke Inu (Japan)","b46ab3d1332497978488243d762ef5b8":"Monster! Bass Fishing (USA)","b47db8937426d5a23fba3c51acd5fe69":"Mijn Dierenpraktijk (Netherlands) (En,Nl)","b4863030186e7e1da0a6009dada06cd5":"Super Dodge Ball Advance (Europe)","b488acd6e738bce4ce01bfb3e41f94e1":"Danny Phantom - Dschungelstadt (Germany)","b48c238ac77b2b56dd3f32a470f2a2fb":"Final Fantasy Tactics Advance (Japan) (Virtual Console)","b48cfda5bd9b7efe4f0c23f5e65d2c95":"2 Games in 1 - Disney Princess + Brother Bear (Europe) (En+En,Fr,De,Es,It,Nl,Sv,Da)","b48f441dc1d55a69a325ad812aef764f":"Penny Racers (Europe)","b4b64ffa04795ef56f3925702a2be291":"From TV Animation One Piece - Mezase! King of Berry (Japan)","b4b8e9fbb47a947850f127465c8bee40":"Sabre Wulf (USA)","b4d933095f1be113f2b64f61e21b4055":"Grand Theft Auto (Europe) (En,Fr,De,Es,It)","b4da8d96a5701f91ef8934ee84b8358f":"Shin Sangoku Musou Advance (Japan)","b501e065253565e69f7bee03fc67b2e8":"Notebook Adventure (World) (v1.3)","b504e9661ab08f4afd15ead4c1bedb67":"Rayman IV (USA)","b50707ad72a97b131f4d620483287f95":"Space Channel 5 - Ulala's Cosmic Attack (USA)","b51533d78e10faa7d17774adbbb03f44":"EZ-Talk - Shokyuu Hen 6 (Japan)","b5170bf7f64f0a75c33a17dc63d69a52":"Xploder Advance (Europe)","b517b393437faa7b1dfb65ba5dca7baf":"Spyro Superpack - Spyro - Season of Ice + Spyro 2 - Season of Flame (USA)","b5296cda1c554337e684d880d7573b99":"LEGO Star Wars II - The Original Trilogy (Europe) (En,Fr,De,Es,It,Da)","b529df3eeff903b24a6d6f4f5541ec99":"Konami Krazy Racers (Europe) (Virtual Console)","b52a72e07155057e21e6519472f5a2aa":"Disney Sports - Basketball (Europe) (En,Fr,De,Es,It)","b5509a24acd58ddcb3d2e251a074f494":"Need for Speed - Underground 2 (USA, Europe) (En,Fr,De,It)","b5518f9500708791a1fe10de6b8c3522":"All-Star Baseball 2004 (USA) (Beta 1)","b56902772665713f80ac9fcf28975913":"Chou Makaimura R (Japan) (Virtual Console)","b56f85ff2f37c51acd2e2561abbccb64":"Atlantis - The Lost Empire (USA, Europe)","b57e44b1f52647510caa08f09cfb8e1b":"Serious Sam Advance (Europe) (En,Fr,De)","b5826ea94a5b01ab8362eb5b50aaec2c":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 10)","b5862d95089400c28594a1f5fd09aaa9":"Stuart Little 2 (Europe) (Rev 1)","b5aaa0329d150452520aa0dec5599aad":"Dave Mirra Freestyle BMX 2 (Europe) (En,Fr,De,Es,It) (Rev 1)","b5be468e85618343bc7ab78588cb5163":"Cosmo & Wanda - Wenn Elfen Helfen! - Das Schattenduell (Germany)","b5da52577265dbb1d98977da249c4e20":"Secret Agent Barbie - Royal Jewels Mission (USA)","b60abac7fdbf012de5a3c9403ece89e8":"Dragon Ball GT - Transformation (USA)","b618fdd6303b5fa0f38c472e7ba6cc26":"Famille Delajungle, La - A la Poursuite de Darwin (France)","b62f11b1d014d5c5c2dd703676cb443d":"Sonic Advance (Japan) (En,Ja)","b63010010c4ad6877209b5cc41d368f2":"Classic NES Series - Dr. Mario (USA, Europe)","b63b2244edc2385ae1eab9c8ee448c6f":"007 - Everything or Nothing (USA, Europe) (En,Fr,De)","b658a9b8641db5c1a94d61b6fcc05da5":"Tony Hawk's Pro Skater 2 (USA, Europe)","b697e95bb90b9dc670ca4872c72bd36c":"Shinyaku Seiken Densetsu (Japan)","b6984ca369145367ab79eb33f2f3480e":"F-Zero - GP Legend (USA)","b6af8c28bcb17fb7564aa638eda471ef":"Kim Possible (Europe) (En,Fr,De,Es)","b6d0bdfb98d0ab084087e7284cb53bb6":"3 Games in One! - Breakout + Centipede + Warlords (Europe) (En,Fr,De,Es,It)","b6e949610feec32108b4bdc62d1be4dc":"Ice Age (Europe) (En,Fr,De,Es,It)","b6ef26112e4fbb50aabae5bf84250260":"Pokemon - Aura Mew Distribution (Spain) (Kiosk)","b6f2c552e3282344a81d8da3cdcb7041":"Dragon Quest Characters - Torneko no Daibouken 2 Advance - Fushigi no Dungeon (Japan)","b705e04f4571cc9e8801900b4e0243fd":"World Tennis Stars (USA)","b70a1cfd17b2194ad99b2abf558aadf2":"Curious George (USA)","b7112785daa196847e610783cc2e9d8a":"Star Wars - The New Droid Army (Europe) (En,Fr,De,Es)","b714f4fa916ca53e24434eb7dbfed73b":"2 Games in 1 - Hot Wheels - Velocity X + Hot Wheels - World Race (Europe)","b71bd7d6765ead8c9c657006735cf70d":"Super Mario Bros. (Japan) (Hot Mario Campaign)","b7236bf34d66ead26ba5b6c1cb16c5f0":"Spyro 2 - Season of Flame (Europe) (En,Fr,De,Es,It)","b7315dd0a12a56b0147b3fb8169d33f0":"Shark Tale (Japan)","b7685a523a772e659d992e071aa2cd1e":"Finding Nemo - The Continuing Adventures (Europe) (Fr,De,Nl)","b77bac65ffe2931764adbaec3a8cd995":"Spirit - Stallion of the Cimarron - Search for Homeland (Europe)","b77c57c60fc0dcba3b2ddd3e2f1c5f86":"Kururin Paradise (Japan)","b78374783ce0c8a6cb003c16a42da9af":"Harry Potter IV (USA)","b786fd9c2d48188c7bdb32f29b742187":"Mario Golf - Advance Tour (Italy)","b79c5c98e01fcf89cba5431278c9076f":"Mario Golf - Advance Tour (Europe)","b7a094f8568555602158dcee3750179f":"Finding Nemo (Europe) (Es,It)","b7a8d621700b9397d440d0c1fc828154":"Shining Soul II (Japan) (Virtual Console)","b7b0e7a5f8e8bd22ac9f5766d1acef56":"Castlevania (Europe)","b7b1550606411b985b54f75f0750feb1":"Dragon Ball Z - Taiketsu (USA)","b7bd2a56bc92f5e04ea7bcbc2841c57e":"2 Games in 1 - Sonic Battle + ChuChu Rocket! (Europe) (En,Ja,Fr,De,Es,It+En,Ja,Fr,De,Es)","b7bd37b2b39b8aaad6f297423db2d2a2":"Shrek - Smash n' Crash Racing (Europe) (En,Fr,De,Es,It)","b7f7cbc994934461db0a94cb8b752873":"Crash Bandicoot Advance (Japan)","b8151c67817f126b56eca07c0b6aec11":"Baldur's Gate - Dark Alliance (Europe) (En,Fr,De,Es,It)","b817219c91faedd9fe53f7c226ff0364":"Super Robot Taisen - Original Generation 2 (Japan)","b81b9913a787699cf76b0b4807518956":"Shrek 2 - Beg for Mercy (Europe) (Fr,De,Es,It)","b85b495da78f807409dd55907d25d220":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 5)","b8663b80eef5a1e9b41b683aa1234902":"Pokemon - Version Rouge Feu (France)","b86876fdb1125cc3132dab1cc0d6eb74":"Pop Idol (Europe)","b873e7eb99e10a34958cfddcb1a66e9e":"Rayman IV (Russia)","b89053aa50d8eb4b869e7dfec83a3043":"F-Zero - Falcon Densetsu (Japan) (Virtual Console)","b8a651f0fc9080bf42044c93a746b5e7":"SpongeBob SquarePants and Friends Unite! (Europe) (En,Fr,De,Es,Nl)","b8a7c976b28172995fe9e465d654297a":"Yu-Gi-Oh! - Ultimate Masters - World Championship Tournament 2006 (USA) (En,Ja,Fr,De,Es,It)","b8b1bffea715392586d6a549ced8f0e2":"Ochaken no Heya (Japan)","b8b752c5659e94c0474fe6050df498f2":"Brother Bear (Europe) (Fr,De,Es,It,Nl,Sv,Da)","b8caeb3b81d7d5eb7b6924d5c37df19e":"Space Channel 5 - Ulala's Cosmic Attack (Europe)","b8dbbb2938a8dbf2b434ba4963e2b35e":"Crash Advance IV (USA)","b8f6082b8f1a88b9dab0565ca19a2e64":"Tang Tang (USA)","b8fb00c59242afc33b1a40d0d2b94ee7":"Final Fantasy V Advance (Japan)","b8fd606bc897f26ac47169ad3522ca0f":"Hudson Best Collection Vol. 4 - Nazotoki Collection (Japan)","b940eae646950fc687e9ad29f8d43e0d":"High School Musical - Livin' the Dream (USA)","b9434c3f72e6e0d1b79eb7ab65634840":"Britney's Dance Beat (Europe) (En,Fr)","b9634f900966068cd331074f78da553e":"F-Zero - Maximum Velocity (USA, Europe) (Virtual Console)","b9731d99116248946e32d4f6d4448160":"Final Fantasy Tactics Advance (USA) (Virtual Console)","b97c2e5c0d2668ebb244d6afa0b1ad95":"B-Densetsu! Battle B-Daman - Fire Spirits! (Japan)","b98c04116cb1bd98415b9b7b9c1281d3":"Metal Slug Advance (Japan) (Beta)","b9b3be20dacbdf7d06b7ee86e73b677a":"Woody Woodpecker in Crazy Castle 5 (USA)","b9b42f3e2d54921ee657bc027fa364b9":"Harry Potter and the Chamber of Secrets (USA, Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)","b9c0646696297fb21cfad315c434cc2a":"Zone of the Enders - The Fist of Mars (USA)","b9c2fad1c168bfd5d0b5a6930e4e1ad2":"Power Rangers - Ninja Storm (USA)","b9d1da4a076ac3ff5f08fc3a2ab76fc9":"Ant Bully, The (Europe) (En,Fr,De,Es,It)","b9e0b9a3d0b7afbde1aaf9a26a827723":"Super Street Fighter II Turbo - Revival (Europe)","b9f78309dbce23a4262dc32c1def62a2":"WTA Tour Tennis (USA)","b9fb4f6d037649f4f87cc47f36d60869":"Hello! Idol Debut - Kids Idol Ikusei Game (Japan)","ba04ccbbd2a60d3f19fa9c938ebea9b6":"Medarot Ni Core - Kabuto (Japan) (Rev 1) (Virtual Console)","ba11d0bfd27985088ac44866d7ece116":"Zettaizetsumei Dangerous Jiisan - Naki no 1-kai - Zettaifukujuu Violence Kouchou - Wagahai ga 1-ban Erainjai!! (Japan)","ba1f2cd7d4eb41792103bf0a95fc0c09":"Monster Gate (Japan)","ba2dc8d20da3971c342003c3c9468b17":"Mr. Driller 2 (Japan) (Virtual Console)","ba38712ad91c6c0287298d4c53ad48b1":"Lara Croft Tomb Raider - The Prophecy (USA) (En,Fr,De,Es,It)","ba428f9d19ecad3a4297b8e23481e6b0":"Ready 2 Rumble Boxing - Round 2 (USA)","ba4f3efc9d451376211f46119e28de9c":"Terminator 3 - Rise of the Machines (Europe) (En,Fr,De,Es,It)","ba5048bbfb02ebe3874b8ce1b6318ce4":"Iridion II (Europe) (En,Fr,De)","ba5a3b9eb146dbd9d17b1279957dfd5a":"Bass Tsuri Shiyouze! - Tournament wa Senryaku da! (Japan)","ba6d0fbff297b8937d3c8e7f2c25fa0f":"Pokemon Pinball - Ruby & Sapphire (USA)","ba7746952e87a2c85927fa691e7230dd":"Pink Panther - Pinkadelic Pursuit (USA)","ba7dda66edd51fb758aa1f61af584c1f":"Powerpig (World) (NEO Coding Compo 2013)","ba7f3c1078471eeed0d3ee39c092578a":"Pferd & Pony - Mein Pferdehof & Pferd and Pony - Lass Uns Reiten 2 (Germany)","bab43e61606514080129a179e931b2b6":"Dinotopia - The Timestone Pirates (USA, Europe) (En,Fr,De,Es,It,Nl)","bb00226987e213bea5217d2ab387048b":"Hanabi Hyakkei Advance (Japan)","bb03faf625c3fcfd8278513ce46448b4":"GP-1 Racing (USA) (Proto)","bb040b4d930c1fc4be1067b9756a7c44":"Medabots - Rokusho (Europe)","bb09508c782f37934c9519c5f8a7350c":"Super Mario Advance 3 - Yoshi's Island (USA)","bb1a8e9129d4d2dcb4bbb3e4879ee97b":"Britney's Dance Beat (USA)","bb4423037d0dc62b5282e1d3ece2b592":"Summon Night - Craft Sword Monogatari 2 (Japan)","bb5dee8fc2975c9ef1edfee65cbbc566":"Uchuu Daisakusen Choco Vader - Uchuu kara no Shinryakusha (Japan)","bb6ef6cc7f6b162a1ace4428148d8f5d":"Teenage Mutant Ninja Turtles 2 (USA)","bb8477087e3d927af99cd3263c66f7cf":"CT Special Forces (USA) (En,Fr,De,Es,It,Nl)","bb87013ec30bebf3dd7cb07ab6786262":"2006 FIFA World Cup - Germany 2006 (USA, Europe) (En,Fr,De,Es,It)","bba162a20a588326794b35ee8df2993f":"Pokemon - 10th Anniversary Distribution (France) (Kiosk)","bbb91114b96a3b57bf40b15edfc12187":"Disney Princesse (France)","bbb939c3839fc2d4864fc7be89b60cc4":"Hugo - The Evil Mirror (USA) (En,Fr,Es)","bbcd12ea6a44f220b40a196edfd2580b":"Medarot Navi - Kabuto (Japan)","bbe5c39533aaf3c912cf1b3ee9fee2ea":"Samsara Naga 1x2 (Japan)","bbeaf2fca8691cf29cae2e7bcf6ff69f":"Arctic Tale (USA)","bbec581c212be984bcf2d4baf2b71207":"Gyakuten Saiban (Japan) (Rev 1) (Virtual Console)","bc03898ada9ffdafca44c74c3dfeed8d":"Home on the Range (Europe) (En,Fr,De,Es)","bc15f4e82a86854175442d32218e2b14":"Phalanx (Europe) (En,Fr,De,Es,It,Nl)","bc1769f39636fca6e05efdf0b2431b35":"Digimon Racing (Japan)","bc292668096ee4918ae6aadcac74ab47":"Harobots - Robo Hero Battling!! (Japan)","bc2f9688aa915ee1eaa6cd06f8e1bb11":"FILA Decathlon (Europe) (En,Fr,De,Es,It,Sv)","bc62fa1f6a3f1421c802aba76f1f4732":"Classic NES Series - Ice Climber (USA, Europe)","bc69fb3645301ff9622f3289512614e6":"Medarot Ni Core - Kabuto (Japan) (Rev 1)","bc76f616bd8a9dfb36538d5da1891ea5":"Densetsu no Stafy 2 (Japan) (Virtual Console)","bc80dc29fbdbb9c8ee9af46f11c59665":"Incredibili, Gli - Una 'Normale' Famiglia di Supereroi (Italy)","bc8cc593779c21c7a8cfb71bb8784d26":"Tak - The Great Juju Challenge (Europe) (En,Fr,De,Nl)","bcb8f65db7a474622496573d752110f0":"W.i.t.c.h. (Europe) (En,Fr,De,Es,It)","bcd9c88dff944b4a2174bc238a628e76":"Harry Potter - Quidditch World Cup (Japan)","bce3926504e6fbc983463aa238ee5faf":"Dave Mirra Freestyle BMX 3 (USA, Europe)","bcf9dcaca7c0bab4d75184d900d27d50":"TOCA World Touring Cars (Europe)","bcfe5f30615a0d1c71f76b27e8ac6ad2":"Rebelstar - Tactical Command (Europe) (En,Fr,De,Es,It) (Beta)","bd02742b2822021ffb3c2d87929f1571":"Uchuu no Stellvia (Japan)","bd1177f8f30bef242aba4714449092a3":"Monster AG, Die (Germany)","bd2163ec09c9986fffdcfedb94c46c34":"Trollz - Hair Affair! (Europe) (En,De,It)","bd33e5115436f516e33dc1890207ab2d":"Nebulus (World) (GBAX 2004)","bd34635cf119a77c121bbf005b3ddfbe":"Bruce Lee - Return of the Legend (Europe) (En,Fr,De,Es,It)","bd3938f9273373f99967ff831f9c86d6":"Catz (Europe) (En,Fr,De,It)","bd4488cdef5226abebdd0fa28cd1c5d7":"SimCity 2000 (USA) (Rev 1)","bd5fd53f6315d6668fdbf4e7bf4e81eb":"Backyard Sports - Baseball 2007 (USA)","bd64515fa58ec5052ce4d231e6241f23":"LEGO Star Wars II - The Original Trilogy (USA)","bd846a0248e2f18bf7521fd2f5479881":"3 Game Pack! - Mouse Trap + Simon + Operation (USA)","bdc2a5d8d58449ccfd2557443b1cd026":"Ashita no Joe - Makka ni Moeagare! (Japan)","be0ec0dc899635edd6ad0c74574aa826":"2 Games in 1 - Dragon Ball Z - The Legacy of Goku I & II (USA)","be0ec34001b26921491d630df83401f2":"Tarzan - L'Appel de la Jungle (France)","be100ee4f7309ffa4b59cfde7e4d8a2f":"Toll Runner (World) (Demo 2)","be11a39637b93b01eb7470a29df09992":"ZenF (World) (v1.1)","be2ca0c6f898c5c453924d69732aabbb":"Pokemon Pinball - Ruby & Sapphire (Japan) (Rev 1)","be2cc5f427f01cbe18f630c5b4e4d7c7":"Pixeline i Pixieland (Denmark)","be2ed0ae2d2da48bfe6f9e49ee2daf7b":"Super Robot Taisen - Original Generation (Japan)","be5b6787b02bda5b6283185e643a9fcf":"Wanwan Meitantei (Japan)","be7b93fdeca8e23caf4b59b4490999ca":"Adventures of Jimmy Neutron Boy Genius, The - Jet Fusion (USA, Europe)","be807a4d9dfe2f283760cee1ecd28a5b":"Shrek - Swamp Kart Speedway (USA, Europe) (En,Fr,De,Es,It,Nl)","be824a74553013bcb38ba79c460b001c":"Sentouin Yamada Hajime (Japan)","be8e21f13e5b27d49ed097605c42f49b":"MotoGP (USA) (En,Fr,De,Es,It)","bea7ecc46f1afc41fdeb342e7bc03407":"Harry Potter to Azkaban no Shuujin (Japan)","beaa0de66f48e52efcc97b50b7777dec":"2 Games in 1 - Power Rangers - Ninja Storm + Power Rangers - Time Force (USA) (En,Fr,De+En)","beab4156e466e97dc7f0b16948d371b7":"Driver 2 Advance (USA)","beb83cb1e4ecae51a34ec3e99da384b4":"Elf - The Movie (Europe) (En,Fr,De,Es,It)","bee56ca47b1f319e27592baf2f053ec9":"Bomberman Max 2 - Red Advance (Europe) (En,Fr,De)","bee8f511abc2235061d9fdb2171c620c":"PukuPuku Tennen Kairanban - Youkoso! Illusion Land he (Japan)","bef73fc45c449c4940c14767b0926264":"Exciting Bass (Japan)","bf1d31e4558e574c751e9886daa5c23d":"SEGA Rally Championship (Japan) (En)","bf478efac1a6ffccf083eea8cff01c55":"Necropolis (World) (GBA Jam 2021)","bf4a0f61e2e78a120ba1edd4cfa6a101":"FIFA Soccer 07 (USA, Europe) (En,Fr,De,Es)","bf585f54686e2b5f55d97d624a8a3e28":"Bratz - The Movie (Europe) (Es,It)","bf770cb831b9fb693e2eed05a4bffc38":"Hanafuda Trump Mahjong - Depachika Wayouchuu (Japan)","bf8fac941521947c92ba860d570927c4":"Scorpion King, The - Sword of Osiris (Europe) (En,Fr,De,Es,It)","bf9caf68637c74cea9bea4f16dac393c":"Sennen Kazoku (Japan) (Rev 1) (Virtual Console)","bfb5a63fde75becb342f5d0e9a8e0da2":"Virtua Tennis (USA)","bff321ba7052247f9a6936e3ed0c75da":"Thunderbirds (USA, Europe)","bffd02ca80738dc0201fece3dcb8b4ce":"Duke Nukem Advance (World) (En,Fr,De,It) (Evercade)","c00051b2ff50552c66b31ebe3296031c":"Sportsmans Pack 2 in 1 - Cabela's Big Game Hunter + Rapala Pro Fishing (USA)","c014449536d7d32e5b6a3b91d10c0fe9":"Pokemon - Version Rubis (France) (Rev 1)","c0200aafcc6b7a822d05d256840de4ab":"Crouching Tiger, Hidden Dragon (USA) (Beta 2)","c029793387b430bcfd6601161da51fed":"Freekstyle (Europe) (En,Fr,De,Es,It) (Beta)","c055ae4f347bf3dfe626979c06133057":"Megaman - Battle Network 4 - Red Sun (USA) (Virtual Console)","c05cce26a2e6d11e9185b91515a19228":"Rugrats - Travesuras en el Castillo (Spain)","c06c0fc7fa844f14930c59453fa998d4":"Shamu's Deep Sea Adventures (USA)","c06decdf51468503434dcb5e7bbdcca5":"Yu-Gi-Oh! - Reshef of Destruction (USA)","c08873913df3c4e4739b648fa96128a4":"Hot Potato! (Europe) (En,Fr,De)","c088fb6231309f2b0bcd70b251052038":"Enchanted - Once Upon Andalasia (USA) (En,Fr)","c0a26ae6d6bc38e07f87c9a860de8586":"Classic NES Series - Zelda II - The Adventure of Link (USA, Europe)","c0b296efea186b82f921cf0e9a6a6ef4":"GT Advance 2 - Rally Racing (USA)","c0c2fec6b1ca631c49896290c7410d49":"Three Stooges, The (USA)","c0d02d8dd1f27fb8ecab1e41abec3c97":"Cinderella - Magical Dreams (Europe) (En,Fr,De,Es,It)","c0d76fd7a2b656fdec1802d62309c4a7":"Megaman Zero 2 (USA) (Virtual Console)","c0dc262c0199f86e97eb6b1f4540eccc":"Teenage Mutant Ninja Turtles Double Pack (Europe) (En,Fr,De,Es,It)","c0dfc8c07f3aba36be5f40edb996f679":"Santa Claus Jr. Advance (Europe)","c0e08bc7580772bf033830ce66a66e77":"Famicom Mini 11 - Mario Bros. (Japan)","c0e4157a27292cac28987d0fbd8bc8e0":"Pokemon - Slot 2 Distribution (Japan) (Proto)","c0e8e0770977846c7a6124fb94285f4d":"Kunio-kun Nekketsu Collection 3 (Japan)","c0e95ca2df9d1a27c91ca6956095891c":"Mr Nutz (Europe) (En,Fr,De,Es,It)","c0f3e785f1d4a48fcb2b945291a033ef":"Barbie and the Magic of Pegasus (USA)","c100637cff317b9afeaab8a1e2e73d7f":"Gematrix (World) (GBA Jam 2024)","c1278ffbcfaeda9e01e076f4eb88e52e":"F-Zero - GP Legend (USA) (Proto 8) (Netcard)","c13785f8c7f0342d4c96c294e600e338":"Pirates of the Caribbean - Dead Man's Chest (USA, Europe) (En,Fr,De,Es,It)","c16680e895cc3c11907361bfd158f6bb":"Cartoon Network Block Party (USA) (Beta)","c19779d04914fae7268bfb8b47b8b048":"Avatar - The Last Airbender (USA)","c19873cebb5f78d77d2af67142c1c09e":"Get Ride! Amdriver - Shutsugeki! Battle Party (Japan)","c1ac1f6979a4cc6b66c1c5515c191bc1":"Kong - The Animated Series (Europe) (En,Fr,De,Es,It,Nl)","c1b472a4ad0d7cd85ae92c7495198573":"Metroid - Zero Mission (Japan) (Virtual Console)","c1b8fbfc0f67a1f8e0c60543167b7dba":"Barbie Software - Groovy Games (USA)","c1d1bb9da3a5566a34a92dac25e6bc04":"Konami Krazy Racers (USA)","c1f7ade0ebce39a97c6efcad33661e20":"Megaman - Battle Network 3 - Blue Version (Europe)","c1fb9badf816b6d7836f4990f8119815":"Donkey Kong Country (Europe) (En,Fr,De,Es,It)","c1fcbde1f1a0462bc5794a241c20b387":"Titei Senki Advance (World) (v1.01)","c283484d8f35b059bbff9e4d852c5420":"GT Advance 3 - Pro Concept Racing (USA)","c2bfa5c822f33eaed02ad2f94a0414b4":"SpongeBob SquarePants - SuperSponge (USA, Europe)","c31cc0664c7152dbe4ce3e41c764850d":"Justice League - Chronicles (USA) (Beta)","c328c11773ab3075916f6d2c0735652a":"Hot Wheels - Stunt Track Challenge (USA, Europe)","c33cd0b752e2305becd03604dbd90293":"Antz - Extreme Racing (USA)","c3439dfd940adeab78b4f9d13599fd49":"Tales of Phantasia (Europe) (En,Fr,De,Es,It)","c369cdee8afa8a6a7163bdadddf74c69":"Anguna - Warriors of Virtue (World) (v0.95) (Itch.io)","c37e6a339dcf314bb0c014b737c972d6":"SimCity 2000 (Europe) (En,Fr,De,Es,It)","c3ad9a91e86b6195451fa0fcf695fb79":"Dogz - Fashion (Europe)","c3c7e4250ebfe4ce6020cabd42f08afe":"Tom and Jerry - The Magic Ring (USA) (En,Fr,De,Es,It)","c3c8470c8b0e460def74307fa985666b":"Bibi Blocksberg - Der Magische Hexenkreis (Germany)","c3caeece33e072b537cb07670b4610eb":"Invincible Iron Man, The (USA, Europe)","c3d670914b052c6e7fafc5649b725afd":"Mooncat's Trio (World)","c3de9a0198c010d29a88b1cf6a3b556e":"Medarot Navi - Kuwagata (Japan) (Virtual Console)","c3e17a3c48d7396c08d7ec7738bfd126":"Dragon Ball GT - Transformation (USA) (Beta)","c3e85be7372bbd5e43f6334a565968c1":"Pokemon - Versione Smeraldo (Italy)","c3ef5da0b49da2e7a124d5d94f19daf7":"Hobbit, The - The Prelude to the Lord of the Rings (Europe) (En,Fr,De,Es,It)","c3f126df8ac8a3cb0d73efaad7896800":"F-Zero - GP Legend (USA) (Proto 7) (Netcard)","c3f79dd7eb12b961f5bdd00c05eb37a7":"Advance Wars (Europe) (En,Fr,De,Es) (Virtual Console)","c414d73f6e76645aa202b5f5e516e494":"Mario Power Tennis (Europe) (En,Fr,De,Es,It) (Virtual Console)","c41958bbf3d218b83cc663f28db866f3":"Unfabulous (USA) (Beta 9)","c42d862eda2d7b0d49c0cbe33525a93c":"Wagamama Fairy Mirumo de Pon! - Dokidoki Memorial Panic (Japan)","c43587fca1f7e02f611baab02d26716d":"Yu-Gi-Oh! - The Sacred Cards (Europe) (En,Fr,De,Es,It)","c436d71315c3ccc51c9289c74129fe2d":"MotoGP (Japan) (En)","c43cbd5e71bcda81010fb408819c3ce6":"Werewolf Tale, A (World) (Proto) (NEO Coding Compo 2012)","c4430ced04082f7cb25750b9dcc610ea":"Winnie the Pooh's Rumbly Tumbly Adventure & Rayman 3 (Europe) (En,Fr,De,Es,It,Nl+En,Fr,De,Es,It,Nl,Sv,No,Da,Fi)","c44fc33a49d116db3ba5248d877a52f5":"Boboboubo Boubobo - Bakutou Hajike Taisen (Japan)","c45cde25dc1427df5896ae5ed8959fa0":"Hamepane - Tokyo Mew Mew (Japan)","c462c94704a3fa26d104282105ddd6ed":"Inspector Gadget Racing (Europe) (En,Fr,De,Es,It,Nl)","c4777d142e1a0427fb78b5167497d471":"Final Fire Pro Wrestling - Yume no Dantai Unei! (Japan)","c4874d3f181e4293f27f25ad52763e50":"Rebelstar - Tactical Command (USA)","c49c26566f147a3546f7a299d55010ba":"Bomberman Max 2 - Bomberman Version (Japan)","c4e93a88ca2a79a051d8a93f2b879a46":"Dexter's Laboratory - Deesaster Strikes! (USA) (En,Fr,De,Es,It) (Rev 1)","c518725055083f6096f3268cf608acda":"Astro Boy - Omega Factor (USA) (En,Ja,Fr,De,Es,It)","c52001c1bdfe486f73c4a6d79800387c":"Stepper (World) (v1.8) (3DS)","c5240b871426f8bef985a540b9fcadfe":"Super Mario Advance - Super Mario USA + Mario Brothers (Japan)","c5401124a48f173f05fb10fb9e716011":"Yu-Gi-Oh! - Sugoroku no Sugoroku (Japan)","c5780d2cd4873e19434e54595722ed5d":"Gyakuten Saiban (Japan) (Rev 1)","c59c79d8bfacd27a1c3fafda2bd801d0":"Pokemon - Version Saphir (France) (Rev 1)","c5bc831107f459816508b45d9392afc9":"Pokemon - Version Vert Feuille (France)","c5be1188d3ed703a50426c4d552b469f":"Lu-Hai-Kong Dazhan (China) (Proto)","c5e3a3d61b6c46d78bd66bd842fba8b8":"F1 2002 (USA, Europe)","c5ec72000373809a4d43bfee2911745f":"Finding Nemo (Japan)","c627e05cd3e6613ef772b92cc86ada1c":"DigiCommunication Nyo - Datou! Black Gemagema Dan (Japan)","c629272c5e0111930a240623b6c239f0":"Pokemon - Edicion Rojo Fuego (Spain)","c6394e32b564c770fe1971fdf2b1e8f2":"World Championship Poker (Europe) (En,Fr,De,Es,It)","c63ea91402e560b3ede1242884d72f73":"Tom and Jerry in Infurnal Escape (USA)","c6420001b019120cf0606dcbed749137":"Sengoku Kakumei Gaiden (Japan)","c64b677831500e85222d85c70e2d23b6":"Bookworm (USA)","c66c7460875f2d6a42bd441dd8ed1f56":"Davis Cup (USA) (En,Fr,De,Es,It)","c6816efab9f789038d7399a7eba5b37c":"Keitai Denjuu Telefang 2 - Power (Japan)","c68975d3d2cf8aafb150a3b97d020a80":"Iridion 3D (World)","c6926d0bbbdbed3372e6fc01c81cd52b":"KAO the Kangaroo (USA) (En,Fr,De,Es,It,Nl)","c69cdec6c30685b9ed3a91fe7aa84d8e":"Fire Emblem (Europe) (En,Es,It) (Virtual Console)","c6a3788a3a7a450536bc51ab90ed266a":"Uranus Zero - Sun Tear (World) (En,Fr)","c6a927c20fbb7b5b1570f9e6c804b54b":"Need for Speed - Porsche Unleashed (Europe) (En,Fr,De,Es,It)","c6af74aeeabfd6d7ee2875e355f49af2":"Final Fight One (USA)","c6badb88a556c59dd89b16809a2529b3":"SpongeBob SquarePants - SuperSponge (USA, Europe) (Beta 15)","c6cb9b88ad6c256eb1c1c4df8f6be63e":"Hex Advance (World) (Proto)","c702f8da946f5a50df244151dd7f9e6a":"Kirby - Nightmare in Dream Land (USA) (Virtual Console)","c708ddec270eca031ad03dba93f358b6":"Stepper (World) (v1.8)","c7174179fdb9d5dca2a150351adc3a58":"Tak 2 - The Staff of Dreams (Europe) (En,Fr,De,Es,It)","c7262e8c52597d29c8858c1ea1eb0161":"Findet Nemo (Germany)","c7407014742f1f2ee538f9ec8458265f":"Looney Tunes - Back in Action (USA, Europe) (En,Fr,De,Es,It)","c741f6e950240d0d66aeb60e81fae12d":"ATV - Thunder Ridge Riders (USA)","c74dd5cc3ab6e5d4ac53b1677e1abd69":"Final Fantasy IV Advance (USA)","c75988e7042168414e341c102dc7776c":"Megaman Zero (USA) (Virtual Console)","c765079b0c8ebc53454c711cba2cc949":"Skyland (World) (Proto 3)","c76cdeb30713ca9199788cb9ac95eeac":"Jisu F-Zero Weilai Saiche (China)","c786f824ed894f22166d4eb801f5f7d4":"Mat Hoffman's Pro BMX 2 (USA, Europe)","c79aa5315644d3463c91f2dd7fa08202":"Phalanx (Japan)","c7a9cdaa399c20a2a37abe1a2a71b387":"Koinu to Issho - Aijou Monogatari (Japan)","c7be3cfd5827ec4621b0175c01775e4c":"Hali Bote IV (Taiwan)","c7c56aaed390488e4112ef64b51bb2ad":"Altered Beast - Guardian of the Realms (Europe) (En,Fr,De,Es,It)","c7e5d28e7c430454aeff766961095561":"Sword of Mana (USA, Australia)","c824e72aa57e94eea86343e107b0dca2":"Finding Nemo (USA, Europe)","c83c580d9ab765af26ca3a3ead0cd518":"Medabots AX - Metabee Ver. (USA)","c86f84d68f584b666e5490f764fda27e":"Bomberman Jetters - Densetsu no Bomberman (Japan)","c8896f5ae10cbdf9a1d4b98166ff13c0":"Meine Tierpension (Germany) (En,De)","c89bbbb8a6ce5c51b6361f9739827e44":"Play-Yan Micro (Japan)","c8a0ce6010243c1b4a05458344c9fc31":"Shrek 2 - Beg for Mercy (USA, Europe)","c8b49c53003b8d9a15d91a5a5d5cc91b":"Boktai - The Sun Is in Your Hand (Europe) (En,Fr,De,Es,It)","c8b81c5fe67f8235c03e350b8de53730":"2 Games in 1 - Power Rangers - Ninja Storm + Power Rangers - Time Force (Germany) (En,Fr,De+De)","c8bcd516d865325e976d7905b3694dbc":"Konchuu Monster - Battle Stadium (Japan)","c8c20827e23977fa69ab7f0abbc08931":"2 Games in 1 - Sonic Battle + Sonic Pinball Party (Europe) (En,Ja,Fr,De,Es,It)","c8d54c545b0cfb90da6ab6e96dcee96e":"Titei Senki Advance (World)","c8e45043d61075471f8ee3d05862d960":"Scooby-Doo! - Mystery Mayhem (USA) (En,Fr)","c9091f3e04bb2b0f0989efb546c3ffc8":"Buffy - Im Bann der Daemonen - Koenig Darkhuls Zorn (Germany)","c92823ec801e976852b67ac3f10723a7":"Monster Rancher Advance 2 (USA)","c93537014d674bf5843cb1ab5eb942c5":"BattleBots - Design & Destroy (USA)","c939d218192e534472423557d6fb1571":"One Piece - Dragon Dream (Japan)","c95509097d14323904489a65d51014ac":"Tony Hawk's American Sk8land (Europe)","c98531def6532b3ed048a5ebc0ab4c3c":"Medarot Ni Core - Kabuto (Japan)","c9afff5c7245894071c7191df4b1749f":"Ottifanten Pinball (Germany)","c9ce90b98c6cc2f60847d6f39ecf11c5":"Teen Titans 2 (USA) (En,Fr)","c9f99ccdf29fe8f9b5dc52c3a84e95a3":"Castlevania Double Pack (Europe) (En,Fr,De)","ca03360842a7c269f9a46de25d5e779f":"Extreme Ghostbusters - Code Ecto-1 (USA)","ca1e7ca13fc27ec962b8163d8e94dce0":"Drake & Josh (USA) (En,Fr)","ca3500bedd93475c210d4dd16a968d08":"Simple 2960 Tomodachi Series Vol. 4 - The Trump - Minna de Asoberu 12 Shurui no Trump Game (Japan) (Rev 1)","ca4a01416f5528fe6f165981658a4b03":"Tottoko Hamutarou 3 - Love Love Daibouken Dechu (Japan)","ca525800d38ac7f1096d69032c689015":"2 Games in 1 - Disney Princesse + Frere des Ours (France) (Fr+En,Fr,De,Es,It,Nl,Sv,Da)","ca6fab20ba47ef78f9383bd9fb7e0738":"Yggdra Union (Japan)","ca701c70d4e637f127421123a74615ed":"Mario Tennis Advance (Japan) (Virtual Console)","ca775010545c69bb28ec6635fa48cefd":"Buffy contre les Vampires - La Colere de Darkhul (France)","ca8bc391def42c66b2e6c7a179b945e9":"Chicken Shoot (Europe) (En,Fr,De,Es,It)","caa2d80d5c14a76d1f482f7589281c22":"LEGO Star Wars - The Video Game (USA, Europe) (En,Fr,De,Es,It,Nl,Da)","caa90efa07194408be977cfff5f985bf":"Road Rash - Jailbreak (Europe) (En,Fr,De,Es,It)","cab2a6bb0d3c754ccf75ac3b3dc94cb0":"3 Games in One! - Breakout + Centipede + Warlords (USA)","cab9244d30ba8144b17e056c8ced76de":"Legend of Spyro, The - The Eternal Night (USA) (En,Fr)","cad17987af79a57e44ff18a892d1aa70":"Megaman Zero 3 (Europe) (Virtual Console)","cade47def03ad1cc02a1bd97b5ea4e9f":"Castlevania - Byakuya no Concerto (Japan)","caf46477c33a49dacf2d08aed205909b":"Worms Blast (Europe) (En,Fr,De,Es,It)","cb04b88ecd0adfe5690fa75a551dcd74":"Pikapika Nurse Monogatari - Nurse Ikusei Game (Japan)","cb14df09ea41694532a9327510bb28c1":"Dragon Ball - Advanced Adventure (Europe) (En,Fr,De,Es,It)","cb1603c3cc3ed8a37f87b3971b0270d5":"Klonoa 2 - Dream Champ Tournament (USA)","cb24766d8e3e10b9a087dc52740daeb0":"Sword of Mana (Europe) (Es,It)","cb4000f4cd159f3f3cc3cabfac2ac979":"Crouching Tiger, Hidden Dragon (USA) (Beta 1)","cb6451eb458a51ac7d1757d2f419dd3c":"Bura Bura Donkey (Japan)","cb9ee964b373d6c44272a292571bf9c1":"Gakuen Alice - Dokidoki Fushigi Taiken (Japan)","cbb808bccf5aab4d46c3c2da2129429b":"CodeBreaker (USA)","cbbb81a27188b76d68374ec7ef888329":"Apotris (World) (v4.0.2)","cbdd36d1fb5b8898bc44f1cb1467787f":"Super Bubble Pop (World) (Evercade)","cc25621658169b41ada436ef99c078e8":"Nicktoons Racing (USA)","cc2a04c4addcb14c30b0ced2a83c2d91":"Kim Possible - Revenge of Monkey Fist (USA)","cc47da225c68373cea90c2caa2963a8e":"Gakkou no Kaidan - Hyakuyoubako no Fuuin (Japan)","cc6b4d0d6c91c28b762784a171a3c5d8":"Final Fight One (USA) (Virtual Console)","cc73a1bba4cda50f818581db3dd7b661":"Pinky Monkey Town (Japan)","cc83423c84419fe4011caf03e84b2e64":"2 Game Pack! - Uno & Skip-Bo (Europe) (En,Fr,De,Es,It)","cc87721bb3dfa680f15e875edcf0b4dd":"Pokemon - Edicion Zafiro (Spain)","cc966f781b2c7d2b61c5111063aa3e47":"Land Before Time, The - Into the Mysterious Beyond (USA) (En,Fr,Es)","cc979f837abd1318bfa42b84b075a7be":"Dragon's Rock (Europe) (En,Fr,De,Es,It)","ccaa6814bcb83ec7fff309616a2f6d40":"GT Racers (Europe) (Beta 2)","ccae308baca9baecaba1ab670dcc27c8":"Jurassic Park III - Island Attack (USA)","ccb5a95c335a6b3bb6113970b004a742":"Koukou Juken Advance Series Eigo Koubun Hen - 26 Units Shuuroku (Japan)","ccc940468bd911cb13e06f761d798126":"Higanbana (Japan) (Rev 1)","ccdd724bacf3f395e7b52b008d57b915":"Blind Jump (World) (En,Ja,Fr,It,Ru) (Proto)","cce22f4507ceab482392247b74a8b55a":"IK+ (USA)","cd002d8e070ce14cae9866f987fc4f69":"Barbie and the Magic of Pegasus (USA) (Beta 1)","cd06fca8f11c9fbf1c89d067719cc7f6":"Megaman - Battle Network 4 - Blue Moon (Europe) (Virtual Console)","cd20a4c59eca007754b660b49f26c233":"My Animal Centre in Africa (Europe) (En,Fr,De,Es,It)","cd26ad539926810e5812ccc1105732cc":"Oshare Princess 3 (Japan)","cd27477e70b529b736746185b882100e":"Garfield - The Search for Pooky (USA) (En,Fr,De,Es,It)","cd5c952ccf9a78915cbefec0fecf241d":"Huo-Wen Zhanji - Fengyin Zhi Jian (China) (Proto)","cd99cdde3d45554c1b36fbeb8863b7bd":"Final Fantasy Tactics Advance (USA)","cdd0d1bc1b95577662dbf561c8e77f34":"Super Mario Ball (Europe)","cdde24e4b71ac0cb1cf32bab1374f64a":"Gekido Advance - Kintaro's Revenge (Europe) (En,Fr,De,Es,It)","ce085f9eb00a26cf9535172acc99921c":"Boboboubo Boubobo - Ougi 87.5 Bakuretsu Hanage Shinken (Japan)","ce153a5ce176b608edd035e3b9a27dad":"One Piece (USA)","ce194375c105dc51582f47e7435103d0":"Pinobee no Daibouken (Japan)","ce1b62b6673b0e4338fda5bcdd1e2366":"Caesars Palace Advance - Millennium Gold Edition (USA, Europe)","ce3627afe4eda2a1c5e4674939e5f041":"Droopy's Tennis Open (Europe) (En,Fr,De,Es,It,Nl)","ce4ef88567b8d7aa8a0675a0bac996b8":"Erementar Gerad - Tozasareshi Uta (Japan)","ce55f087d1ed4ab12a5bad411dae1113":"Monopoly (USA)","ce57edc0645572af5244e3e24b586133":"Backyard Hockey (USA)","ce7a3a9fb7e863d58bb2c71ea2a7a0d5":"2 Games in 1 - Finding Nemo - The Continuing Adventures + The Incredibles (USA)","ce7bb230439440ab28ea9d5d6b19cc01":"Konami Krazy Racers (Europe)","ce9396dd3407f86a9fb303e06882aeab":"Get Ride! Amdriver - Senkou no Hero Tanjou! (Japan)","ce943b2fc1539a9d069b6a6746616d66":"Megaman - Battle Network 6 - Cybeast Falzar (USA) (Virtual Console)","ce9f58d790acd6260bd45ca4346fac74":"Battle Network - Rockman EXE 3 - Black (Japan) (Rev 1)","ceb711af3dd5861e9bf95c53d7443f42":"Kinniku Banzuke - Kimero! Kiseki no Kanzen Seiha (Japan)","cec078b8f24ae79589e34454784f2386":"Beast Shooter - Mezase Beast King! (Japan)","cec79164d58deace2122ba2e4a9cdd65":"Vecinos Invasores (Spain)","ceda12928a686878795def3b413ccfc2":"Mario vs. Donkey Kong (USA, Australia)","cf1673c920ef1d24c4f4b21effcc03f0":"V-Rally 3 (USA) (En,Fr,Es)","cf20a09761ad3a42195694a0a34da7c3":"Moero!! Jaleco Collection (Japan)","cf33e45e59b0ee3801b5cf18a9e58524":"Ougon no Taiyou - Hirakareshi Fuuin (Japan)","cf489b93e646c5f102ef2c8cc8fa64cf":"Tony Hawk's Underground (USA, Europe)","cf66c71bcc65c5e0ee20c666df8d6540":"2 Game Pack! - Uno + Skip-Bo (USA)","cf7e4985bcf3ac80238b6089ab26ab7d":"Healz (World) (GBA Jam 2024)","cf8411a62dc864f79cf39467080a81ce":"Akumajou Dracula - Circle of the Moon (China)","cfa185aa9c5c11136e16ce519f96e3e9":"NFL Blitz 2003 (USA)","cfbf47949426a8f44ecdc832d06d09a9":"Meet the Robinsons (USA)","cfd85c7cc23e577cd6a338e83e95d618":"Midway's Greatest Arcade Hits (USA, Europe)","cfe052a6e6529e0356516010b68cfd0c":"Tiger Rescue (World)","d00363a1b7cd2a61a11732117df24166":"Don-chan Puzzle - Hanabi de Doon! Advance (Japan)","d015092963d9e05afe3a552c34a81cf2":"Harlem Globetrotters - World Tour (Europe) (En,Fr,De,Es,It)","d0150fce0e6c45783cc952b139b77a1b":"Famicom Mini 19 - Twin Bee (Japan)","d02b4e547e916a20bc7cebcb41cba8ab":"Star Wars Trilogy - Apprentice of the Force (Europe) (En,Fr,De,Es,It,Nl)","d02eabdee77f547001c268a254352b79":"Airball (World) (v1.3)","d0452572fdff4d290a3ff76fe0a07739":"Ice Age 2 - The Meltdown (Europe) (En,Fr,De,Es,It,Nl)","d0847e7d22dd605cc9d3346a0b6fcf56":"S World 3 (World) (Beta 3)","d0aac762bc42a0133529ab72c8cc125c":"2 Games in 1 - Power Rangers - Ninja Storm + Power Rangers - La Force du Temps (France) (En,Fr,De+Fr)","d0afddbd4f9a06aeaf9a8d7db3a2ef82":"Wagamama Fairy Mirumo de Pon! - Taisen Mahoudama (Japan)","d0bb79fb5a05702ce8b7d03320fcdf52":"Blackthorne (USA)","d0c000353f6bd4d93a1fbf5be04b7585":"Eragon (Europe) (En,Fr,De,Es,It)","d0c1c2ae421a5acb198fb1466122b7cc":"Dungeon Tactics Advance (World) (GBA Jam 2024)","d0c7958ff085664e0b78e1378a85e39f":"Monster Gate (Japan) (Rev 1)","d0d33104d62f81108214f9a328ce0a9e":"SSX 3 (USA, Europe)","d0dee5c06972cb072391cd968a248d52":"Megaman - Battle Network 4 - Red Sun (USA)","d116b2b5a64bc7dff2678b1790ca723a":"Rick Dangerous (World) (NEO Coding Compo 2013)","d1415b84b039a978bdb920f917959779":"Shingata Medarot - Kuwagata Version (Japan)","d147f80b54cfb16b1df295aabaf4c90c":"Lara Croft Tomb Raider - Legend (Europe) (En,Fr,De,Es,It)","d14cf631928fc1523b49c9ae0a2cdd2f":"Ultimate Beach Soccer (USA)","d15113e7b1843edfd258ad5f5051b418":"Medal of Honor - Underground (USA)","d171531f05dacad10447971e6e14fb94":"Ultraman - Confrontation Between Justice and Evil (Russia)","d1a6c9f1c78f0df5b1395e7e679a383a":"International Karate Advanced (Europe)","d1b92af267a24b56ccd00869fbc7303f":"Zettaizetsumei Dangerous Jiisan 3 - Hateshinaki Mamonogatari (Japan)","d1c3d1798a3f347fbab41f151c99dece":"Final Fantasy VI Advance (USA)","d1d4df6cf579a743171f39f06fb884fb":"2 Games in 1 - SpongeBob SquarePants - SuperSponge + SpongeBob SquarePants - Battle for Bikini Bottom (Europe)","d20405dfb7b446fbeb365a5cc11233c3":"Madden NFL 2002 (USA)","d20a8685f12452c1699012e2cf1d9b79":"X-Men - The Official Game (Europe) (En,Fr,Es,It)","d20cf72f03b73d3be7a3fd89c085f5fe":"Dan Doh!! Xi (Japan)","d275e7110627f4456dc8d544166b55e9":"Rocky (USA) (En,Fr,De,Es,It)","d28dcccc93405ce5c1f29814dbd3f77f":"Mugenborg (Japan)","d2937931c759f1d3f9a4c7f49dca7261":"Top Gear GT Championship (Europe)","d2a5a5ccd519b50603ecba358d085ef4":"Super Puzzle Bobble Advance (Japan) (En)","d2b0cab71d1c40aa38e94eeb2d1c8718":"Megaman - Battle Chip Challenge (Europe) (Virtual Console)","d2bc5687ac40a62f74daf3fb219644e5":"Sonic Advance (Japan) (En,Ja) (Rev 1) (Virtual Console)","d2d38d0ca1c3594c71213e3b5f6bd6ec":"Lilo & Stitch (USA)","d2d7d7feaa2eee5a6ebeb65e7f6b9476":"Sekhmet's Playground (World) (GBA Jam 2024)","d2f0d0b2ccb4a138636746c46b091cd0":"Dungeons & Dragons - Eye of the Beholder (Europe) (En,Fr,De,Es,It)","d3057e966f2383ba5664d4523d8f6df1":"Beyblade V-Force - Ultimate Blader Jam (Europe) (En,Fr,De,Es,It)","d307133ff4a778517ab0c00b8ca9379a":"Pitfall - The Mayan Adventure (USA, Europe)","d30a036c3bd3cb62f6029be745910075":"Hatena Satena (Japan)","d3100683634506761d3412b728617307":"Kong - King of Atlantis (USA)","d31b3a260356f4e5a3c9566d022e83a2":"Sylvanian Families 4 - Meguru Kisetsu no Tapestry (Japan)","d31db14855a0de7ea8789f853c2af3c6":"Harry Potter to Himitsu no Heya (Japan)","d325f3b46025ec8df4a3761cb529e7b8":"Polar Express, The (USA, Europe) (En,Fr,De,Es,It)","d34a68ec334336fa5c1e7c6acda6ff6c":"Legend of Spyro, The - The Eternal Night (Europe) (En,Fr,De,Es,It,Nl)","d366d5b909b3afbdd3ba87c6d2b2f1f9":"4 Games on One Game Pak (Racing) (USA) (En,Fr,De,Es,It)","d369f791d86a969778d2c3a5278d544c":"Kingdom Hearts - Chain of Memories (Europe) (En,Fr,De,Es,It)","d37986c7067ec557b771cfb661c923ee":"Famicom Mini 09 - Bomberman (Japan) (En)","d379b595d04446abf5335aaccd336fcf":"Super Robot Taisen R (Japan)","d3a5a53a283de179f8b65b0b5b90d413":"Simpsons, The - Road Rage (Europe) (En,Fr,De,Es,It)","d3a76f1c92e3044b1a21f1aae84d21ab":"Megaman Zero 4 (Europe)","d3b2ab65c92e18df21788c4b30128041":"Moto Racer Advance (Europe) (En,Fr,De,Es,It)","d3b699df6c6ca9bf3c3abb120fb3edd8":"2 Games in 1 - Moto GP + GT Advance 3 - Pro Concept Racing (Europe) (En,Fr,De,Es,It+En)","d3bc617082a50dcfa360c10f6ec5f845":"Monsters, Inc. (Europe) (En,Es,Nl)","d3e4164a9c709dbed2bf24e09170fc77":"Army Men - Turf Wars (USA)","d3f866c892022ec6fa89b4dbdbcb0efa":"Contra Hard Spirits (Japan) (En)","d3fd1646a46e5077a59b44e00fdfee90":"Matantei Loki Ragnarok - Gensou no Labyrinth (Japan) (Beta) (Debug)","d41363a54aa5ac45ecaff2dafcb9372b":"Robots (USA)","d41cff4cf06a89d9a79df9e47f192d20":"Droopy's Tennis Open (Europe) (En,Fr,De,Es,It,Nl) (Beta)","d428b84dce8f74a485a3f6c8a20dc4b3":"Ueki no Housoku - Jingi Sakuretsu! Nouryokusha Battle (Japan)","d429899cfd9a4858592f34ce9527a159":"All Grown Up! - Express Yourself (USA, Europe)","d452b649e6c8f3455469030548478e81":"Morita Shougi Advance (Japan)","d4633c1ba39d6ab290ce9c8044574906":"LEGO Racers 2 (Europe) (Beta)","d48340e964aa3cbe1b69019cb215c8a0":"Monster Trucks Mayhem (USA)","d491342c918651dfe04090ca82ca3439":"Super Monkey Ball Jr. (USA) (Beta)","d4a4550a42646e58df0445756e004d8e":"Yoshi Sample (Japan) (En) (Tech Demo)","d4aa56b92749b7f395ca85a75616199f":"Virtual Kasparov (Europe) (En,Fr,De,Es,It)","d4c87ffeb5548c6cf7f6b392a24161fc":"Disney Sports - Motocross (USA)","d4cc34b19ab7fba248558d6f6584fdf2":"Hi Hi Puffy AmiYumi - Puffy Ami Yumi and the Manga Madman! (USA) (Proto)","d4d2fac142d31903295cdab4eab4ab3b":"xniq (World) (Proto) (GBA Jam 2021)","d4d5b7d5370be6cd8c695ec5483f676e":"Ultra Keibitai - Monster Attack (Japan)","d4e09dc235ec13e6926c5338147e350c":"JGTO Kounin Golf Master Mobile - Japan Golf Tour Game (Japan)","d4e3855b1e6630921de0e188ac974ebf":"Rockman Zero 4 (Japan)","d4fecd09b810dba8a76c5766e713e49f":"Action Man - Robot Atak (Europe) (En,Fr,De,Es,It)","d52806f7bf178947921aa0413f3cc633":"Chessmaster (Germany)","d53ca7a7f09e222722e110445e1a4e6c":"Polly Pocket! - Super Splash Island (USA) (Vivendi)","d552538adba7bf2bc443822265bcfe20":"Kisekko Gurumii - Chesty to Nuigurumi-tachi no Mahou no Bouken (Japan)","d5559318143f276f13b13f86bb1fc60e":"Cat-Venture (World) (Demo 2)","d569ea9204f4683592ed49e47f6f9568":"Cabela's Big Game Hunter - 2005 Adventures (USA, Europe)","d571970f19fafdbcdddb71a02563317e":"Mario & Luigi RPG (Japan)","d596b05b4f52d2880f36db3e7ec9a8e5":"Jurassic Park III - The DNA Factor (USA)","d59d88a73622b4df76cf98d1554644e4":"Minami no Umi no Odyssey (Japan)","d5a837ce039d6f860dcdfa75d6f80a97":"Kurohige no Kurutto Jintori (Japan)","d5a8437be47f77ea14409b0b40a026fa":"Cat in the Hat, The (Europe) (En,Fr,De,Es,It)","d5a97a8360ee0ee2651dc2c5ae1f8f30":"Nicktoons Unite! (USA)","d5b7c99707098401f12f6e4dfac87c9f":"Celeste Classic (World)","d5c9b6657e5d9fed85e5d25b79acb3de":"Fantastic 4 (Europe) (Fr,De,Es,Nl)","d5cd7fb3f7bdecccddb431ddddbcc9f4":"2K Sports - Major League Baseball 2K7 (USA) (Beta)","d60c5ace24093283f3dc9c74f3ac2489":"Bouken Yuuki Pluster World - Densetsu no Plust Gate EX (Japan)","d61efb2839076e80b05e55d5cf7a60e9":"ESPN International Winter Sports (Europe)","d62d4e34e5db75a4b44db96752cc2f69":"Carrera Power Slide (Europe) (En,Fr,De,Es,It,Nl)","d6482e271791cd7b324c36b55ca3b693":"Bratz - Rock Angelz (France)","d64a34e34debb206aeb66d4ed832ac85":"Word Safari - The Friendship Totems (USA)","d64c95901c720f6dbf7b6dab929e617f":"Marvel - Ultimate Alliance (Europe) (En,It)","d65302dfe91452a9dc01be44a8e55f98":"Duel Masters - Kaijudo Showdown (Europe) (En,Fr,De,Es,It) (Beta)","d67692814d313e0f70637fb2157ab6cc":"Megaman Zero 3 (USA) (Virtual Console)","d6a12374a2414be686480a4936a2ff48":"Dragon Ball Z - The Legacy of Goku II (Europe) (En,Fr,De,Es,It)","d6b12981296a8e3c67796f94e2d7aff3":"Lizzie McGuire - On the Go! (USA)","d6c5534615de1c9478768506f5282ff0":"EX Monopoly (Japan)","d6d1aebc7605124b44f024f54d3be293":"Nakayoshi Youchien - Sukoyaka Enji Ikusei Game (Japan)","d6d8a53c94a7aa27583312c66974edf9":"Discrete Orange (World) (Demo 2)","d6e41a11cfd0fa428bc43a68b5af7bca":"Ghost Rider (USA, Europe) (En,Fr,De,Es,It,Nl)","d6e4327dce0eedf33bb5a465cef4bb48":"Luma (World)","d7010827ec2382c727b9aa565e842abe":"Konami Wai Wai Racing Advance (Japan)","d7118be078b9a61284a99d3f1f7e972f":"Mr. Driller 2 (USA)","d714d2a904bd0f085a0d9179797d185d":"Smickeonn the Game - 2024's Greatest Hits! (World) (v1.1)","d74a23c7df011771c5bfa6f36b2dd920":"Gakuen Senki Muryou (Japan)","d76d992d936c308b7d1bb70ac71a1c37":"Mawaru - Made in Wario (Japan)","d76d995cef14fce9129d8b7c9f049568":"SEGA Smash Pack (Europe)","d7897c2530deaa9d6abc224fe9026f50":"BattleBots - Beyond the BattleBox (Europe) (En,Fr,De)","d794f41257ac22c50b117f49484feefa":"Sonic Advance 3 (Japan) (En,Ja,Fr,De,Es,It) (Virtual Console)","d7c540384eff184dbd81292f3f7f8c29":"Peter Pan - Return to Neverland (USA)","d7d3e3edd9c161bd0094a17124142ead":"Wilden Fussball-Kerle, Die - Entscheidung im Teufelstopf (Germany)","d7dd9a6376e9c85ae177cd61ee9e3312":"Game Boy Gallery 4 (Japan) (Virtual Console)","d7f41d490bcb72f0711b070de85a8c8b":"Donkey Kong Country 3 (Europe) (En,Fr,De,Es,It)","d7f4cb6aea9409acf23e2eae5a697c5e":"Mr. Driller A - Fushigi na Pacteria (Japan)","d801ce9f6fa2917d7ecbc7985a34b9ef":"Kurohige no Golf Shiyouyo (Japan)","d81d39a2400a2651099a6d1aa2a461d5":"Worms - World Party (USA) (En,Fr,De,Es,It)","d838c57b19062d67a408244b33e1cfa9":"Mario Kart - Super Circuit (USA) (Proto) (Netcard)","d84016c53084fd5539d53f48f89a84e5":"Mario & Luigi - Superstar Saga (USA) (Virtual Console)","d8453317272826159fefcf254f25ada4":"Final Fight One (Europe)","d853b5ffa5ef88605a0823d3b4b2df08":"Wolfenstein 3D (USA, Europe)","d8635a000fffb777f91137993d439ee3":"Power Pro Kun Pocket 3 (Japan)","d867844ad81a900aba625a5075275247":"Power Rangers - Dino Thunder (Europe) (Fr,De)","d8b6d1af6d00558c3bb33d81ad18c483":"E.T. - The Extra-Terrestrial (USA)","d8c148895dc874b51f5075aebfcef88a":"Madden NFL 2003 (USA)","d8d8a330e5471faef5b527b18aa24ad2":"Garfield and His Nine Lives (USA) (En,Fr,Es)","d8de1bc487149bdfd96f03031a8b0ebb":"Frogger Advance - The Great Quest (Europe) (En,Fr,De,Es,It)","d8ed69627a467814fb3f053fba5d567c":"Surf's Up (Europe) (En,Fr,Es)","d90c08ee30985bf120d394bdd98e2693":"Treasure Planet (Europe) (En,Fr,De,Es,It,Nl)","d92308bc903f4e92587df2cedc89b477":"Bokujou Monogatari - Mineral Town no Nakama-tachi (Japan)","d9371f098dfaaf7d52bca4cbc333223d":"Trials of Chaos (World) (GBA Jam 2024)","d9449bc62cc7cfffe5ca75de8beb27f4":"Fire Emblem - Rekka no Ken (Japan) (Beta 1)","d94b4031b5f5b39281075ae4e0ea76d6":"Monsters, Inc. (Japan)","d94d214f30cfcc4479ba3a41f1acc7cf":"Cocoto - Platform Jumper (Europe) (En,Fr,De,Es,It)","d969b50d20655bffb3042bafbeffe654":"Kamaitachi no Yoru Advance (Japan)","d96e8659db64595a5ee7234145ebdc66":"Columns Crown (Europe)","d97206a549d0b7b3cb49d32b249edc25":"Deflektor (World) (v1.1)","d97380d2fc4230738bf6f6080c577b94":"Dogz (Europe) (En,Fr,De,It)","d996f6cbb36eb15063b290d8f00ad654":"Megaman - Battle Chip Challenge (USA)","d9a3d6ae2ec335fe8cf8008539ac14e7":"Simple 2960 Tomodachi Series Vol. 3 - The Itsudemo Puzzle - Massugu Soroete Straws (Japan)","d9adc18e11c3fea39b49a99abcdc41fc":"Mario Tennis - Power Tour (USA) (En,Fr,De,Es,It) (Virtual Console)","d9b338efe2c15f9493ca0b28714a679b":"Shining Soul (USA)","d9b4f299622e896b85c84946e92c1e69":"Polarium Advance (Europe) (En,Fr,De,Es,It) (Virtual Console)","d9ea8c0a5cb934ddc7801389faba43e2":"Agassi Tennis Generation (Europe) (En,Fr,De,Es,It)","da1471e76473766f201ead7c9c9e3595":"Dexter's Laboratory - Chess Challenge (USA)","da15f288fe413a9d58432fb516f23cb0":"Woody Woodpecker - Crazy Castle 5 (Japan)","da5b6a9f2528749bdfcd601980a5059b":"Kiki Kaikai Advance (Japan)","da69e10feb7472cdfa7ed76f8183b6bd":"Golden Sun (Germany)","da720531328fc7f37eef8c9b07d30a91":"Revenge of Shinobi, The (Europe) (En,Fr,De,Es,It)","da7d71352fd92c7e44de1d7341042f27":"Chessmaster (USA)","da7fa09ca99fa6c7e6462a29494d991e":"That's So Raven 2 - Supernatural Style (USA) (En,Fr)","da96ce67d0ddad72e032632c8fd9994a":"Teenage Mutant Ninja Turtles 2 - Battle Nexus (USA)","da9f0a0d884da90e912752cabea8a741":"Super Mario Advance 3 - Yoshi's Island (Europe) (En,Fr,De,Es,It) (Virtual Console)","daab9c49f67d0064317799027d537ca9":"Google Dino Advance (World) (v1.1)","dad3fd70cc43107e381285dcb5313d1b":"Mario Kart - Super Circuit (Europe) (Virtual Console)","dadf42e7e222fe564e4277da8b3c90de":"Chopper 2 - The Return (World)","db39085a6f31b5f506420a83973ad0fa":"Chessmaster (France)","db41a36ee67abb52cdc7623f1763ef05":"Three-in-One Pack - Risk + Battleship + Clue (USA) (Rev 1)","db41f49affdac264849a0f4245fe533c":"Dokidoki Cooking Series 1 - Komugi-chan no Happy Cake (Japan)","db472400ad072dfb2be28c08468a7984":"Top Spin 2 (Europe) (En,Fr,De,Es,It)","db4a8ed843dfb471622f37a8efb35111":"Digimon - Battle Spirit 2 (USA) (En,Fr,De,Es,It)","db526b444655e12ba12030ebd9959f3b":"Hamster Club 3 (Japan)","db56858947876ac2d0b61f8acced190c":"Mr. Driller 2 (Europe) (Virtual Console)","db607f2427469e017560fd23fdc7ea70":"Flushed Away (USA)","db64d910feec15dc3f3bc90c151e731b":"Fortress (USA, Europe)","db7362f49c853c61b8de8e4ca8750c18":"Mail de Cute (Japan)","db787ca57607768ee3320e2610a82cc2":"Sys Crusher (World) (GBA Jam 2024)","db7d06d0be0b06c4a73bcf614e81c588":"Kurukuru Kururin (Japan)","db80a326a5825c196e2de77f319abd69":"Manic Miner (Europe) (Beta)","db8327ce52ef65ebd4d0629b5febe178":"Pac-Man World & Ms. Pac-Man - Maze Madness (Europe) (En,Fr,De,Es,It)","dba68e8ac74148aa0a4a9b6f9a986f67":"Anguna - Warriors of Virtue (World) (v0.92)","dbe975f9dd8b09d76c73a6d18bdaa6fc":"Megaman - Battle Network (USA) (Virtual Console)","dc10ed7d9f86453ceb1303c9585bf8ff":"Kim Possible (Japan)","dc3829497236a88a3595561440230354":"Fire Emblem - Rekka no Ken (Japan) (Virtual Console)","dc4ea1eb92d51b8c18b58611ad652ccc":"Teenage Mutant Ninja Turtles (Europe) (En,Fr,De,Es,It)","dc5f5d4a85fee39dc0a6ebd59cd566e7":"Dave Mirra Freestyle BMX 2 (Europe) (En,Fr,De,Es,It)","dc8786aa2aa0b73b73cb1ad110ccf2e7":"2 Games in 1 - Les Razmoket Rencontrent les Delajungle + SpongeBob SquarePants - SuperSponge (France) (Fr+En)","dc96748e298935c8e3d49e362cafa0b8":"Altered Beast - Guardian of the Realms (USA)","dc99bcca77ec59c109576b867ab2b3ea":"Driver 2 Advance (Europe) (En,Fr,De,Es,It)","dc9be85f5ada0abeb2ab597d5178f03e":"Spout GBA (World)","dcaf52240df58d7f9d6be95e918c7bb3":"Britney's Dance Beat (Europe)","dcc2db8fafaf3bb28b8896b89b707175":"3 Games in One - Darts + Roll-a-Ball + Shuffle Bowl (USA)","dccdc879eca4dc6c16fb93bdb072226d":"Kinnikuman II-Sei - Seigi Choujin e no Michi (Japan)","dce3c14f8f704b539094734700c5a145":"Konchuu no Mori no Daibouken - Fushigi na Sekai no Juunin-tachi (Japan)","dce828e687f05511c1ad70e936b5ef25":"Spirits & Spells (USA)","dce9d2624293ec80bd9e2937d9d3d0f1":"Tak and the Power of Juju (Europe) (Es,It)","dcfb3d652c77ba9574cf42ff18ee2f30":"Mermaid Melody - Pichi Pichi Pitch (Japan)","dd311f91e8792544af395c9e3690a478":"Kaze no Klonoa - Yumemiru Teikoku (Japan)","dd383a093793bfdd76b03d41ba4134f7":"Pokemon - Aura Mew Distribution (Germany) (Kiosk)","dd849fc5fe36531624d152c0d17e4799":"Waimanu - Grinding Blocks Adventure (World) (NEO Coding Compo 2013)","dd9d7f37441572d859092e715af804bd":"X-Bladez - Inline Skater (USA)","dda55ee90530b82555f0f37cbaa90b9f":"Dragon Ball - Advance Adventure (Japan)","ddac943bebcf4160fa6afe082e16513c":"NHL 2002 (USA)","ddafcdb5a0d7f0d44b861a7700e187bc":"Yu-Gi-Oh! - Day of the Duelist - World Championship Tournament 2005 (Europe) (En,Ja,Fr,De,Es,It)","ddb830fcfac817a2d2dbd83af2b0950e":"Barbie and the Magic of Pegasus (USA) (Beta 3)","ddca8cbb4f44395795dbd1b175fecebb":"2 in 1 Game Pack - Spider-Man + Spider-Man 2 (USA) (En,Fr,De+En,Fr,De,Es)","ddce88b0ee51535fb422babffb1b3c6c":"Konami Wai Wai Racing Advance (Japan) (Virtual Console)","ddd0670792619198933dcef3571428b3":"My Little Pony - Crystal Princess - The Runaway Rainbow (USA)","ddd7e9448cd3d991eae4f057905de534":"Glucoboy (Australia)","ddd7ea535fbd95d05686186a4b15aef6":"Spider-Man 2 (Italy)","dde1bc02ea274a721313a432333e832e":"Tweety and the Magic Gems (Netherlands)","ddebbf0f61891b4e26448ae672ccc8e4":"Ratatouille (Europe) (En,It,Sv,No,Da)","de0fd2e4e4c888eed0719511095efd22":"Mario Golf - GBA Tour (Japan)","de2924a164d2b89f5080e0003d16894c":"March of the Penguins (USA)","de2f2ca8f0d03a8a2e14258dac2581fd":"Rockman EXE 6 - Dennoujuu Gregar (Japan) (Virtual Console)","de37c8d6f9b8cd56dfd81ca0f754e54b":"Beyblade V-Force - Ultimate Blader Jam (USA)","de40b1738a7c670ca28ddf44bb908df6":"Sonic Pinball Party (USA) (En,Ja,Fr,De,Es,It)","de44e3ae64659aba9824d0047c381981":"Uno 52 (USA)","de5c59a357e791d5b7e2775c538ea172":"Army Men - Sarge's Heroes (USA, Europe) (Proto 4)","de5d47cd1d1632127c6d1fa8cf90c849":"Spirit - L'Etalon des Plaines - A la Recherche de la Terre Natale (France)","de6b60ee6f0de4f2f7a7fc7c8f4a1d9e":"Back Track (USA, Europe)","de794ca5b1d1892fbc8bfae8c6f2441b":"Chinmoku no Iseki - Estpolis Gaiden (Japan)","de7acda94a1f36a2b9218a10ade91e68":"Gachinko Pro Yakyuu (Japan)","dea8cb17074798c5123422836024d4c8":"Megaman - Battle Network 3 - White Version (Europe)","deb7a16b2ea673b2ca137d7a7bc76e70":"Kid Paddle (Europe) (Fr,Nl) (Beta 3)","dec3b16b1a70bca1b467654c01b486d3":"Aigle de Guerre, L' (France)","dedc14eac17a4bb6e043f09d5b793f99":"Soccer Kid (USA, Europe)","dee39c7bcc84c236108ad7f36cf6dcc0":"Disney Sports - Skateboarding (Europe) (En,Fr,De,Es,It)","def28c154a93987df372f1000a1584f2":"Pirates of the Caribbean - The Curse of the Black Pearl (Europe) (En,Fr,De,Es,It)","defab6ec6f979511247ab211d1404bc0":"Cheetah Girls, The (USA)","df13967bf6d021a133d8f6b6e6d3ef3d":"Rockman EXE 4 - Tournament Blue Moon (Japan) (Rev 1)","df5efe075b35859529ebf82a4d824458":"Kirby & The Amazing Mirror (USA)","df60ea476f585692bfb05d77ea833342":"Uno 52 (Europe) (En,Fr,De,Es,It)","df78967cea5f519d6477fe68edbfbb77":"Classic NES Series - The Legend of Zelda (USA, Europe)","df7b1d5fb2f71445497feabf7babb8ef":"GT Advance 3 - Pro Concept Racing (Europe)","df83b7498860fbf0678d8fc6a2664e18":"Gakkou o Tsukurou!! Advance (Japan)","df9bd674970714489629e97a8bcd32f7":"Play Novel - Silent Hill (Japan)","dfae85cbb4e9825bee214ff73ca9bbaa":"Ozzy & Drix (USA)","dfb46ddc7be8f75d7ad429b60b646aaa":"Yu-Gi-Oh! - Destiny Board Traveler (Europe) (En,Fr,De,Es,It)","dfca43fb18b5ee86b3ecab2631862d6f":"Duke Nukem Advance (USA)","dfd7387e205c01a4f044e3a1d4aaea68":"Stuntman (Europe) (En,Fr,De,Es,It)","dffc7306234751e18b163fbf3e925f1b":"Naruto - Ninja Council (USA)","e003f4c06ad7f01d50dcdada5075a234":"Quad Desert Fury (USA, Europe)","e03754f31d720daeb5c6968c23647882":"EZ-Talk - Shokyuu Hen 4 (Japan)","e041a99eccf2d2b7360b6703ce73e169":"High School Musical - Livin' the Dream (USA) (Beta)","e0503182a2e699678bcf25a6897a24d6":"Pokemon - Ruby Version (USA, Europe) (Rev 1)","e0533faf6aa36e3111669574f1c5df92":"Sonic Advance 3 (USA) (En,Ja,Fr,De,Es,It)","e07ab5a02cd7c2f503cef587890afb54":"Driver 2 Advance (Europe) (En,Fr,De,Es,It) (Beta 2)","e08250206b5cf301c15417112f306a16":"Shaun Palmer's Pro Snowboarder (USA, Europe)","e0adff6ebe33cd13b57a7041f14599d8":"Pinball Tycoon (USA)","e0d9909f402dac923114675ce44d6b48":"3 Games in One! - Yars' Revenge + Asteroids + Pong (USA)","e0dceb3ee3be70e72b425fdf455c7237":"Cinderella - Magical Dreams (USA) (En,Fr,De,Es,It)","e0e75f6c714550e652dbaaaba49a1d53":"Classic NES Series - Donkey Kong (USA, Europe)","e0ec4f5cd24d2f7b93eac7f7d7b89398":"Zooo - Action Puzzle Game (Europe) (En,Fr,De,Es,It)","e0f566030c5ad91a20210476cd521d4e":"Combo Pack - Sonic Advance + Sonic Pinball Party (USA) (En,Ja,Fr,De,Es+En,Ja,Fr,De,Es,It)","e10c33761a85410bb894696ae03f22d0":"Haunted Mansion, The (USA) (Proto)","e124a5cc941c7aba6a626f687c50fbf6":"Namco Museum (Japan) (En)","e1303fccc44bdb8524e904f6b15b9856":"Gremlins - Stripe vs Gizmo (USA)","e131f08b70001f4c979cf4d64f806192":"Riviera - Yakusoku no Chi Riviera (Japan) (Rev 1)","e140b67a8a610be8de419e4146940359":"American Idol (USA)","e147d1cd9ac05b4b8588115382103a68":"Titei Senki Advance (World) (v1.03)","e15eff9df4cdb078896e7ee894dc98f6":"Pokemon - Edicion Rubi (Spain)","e187189ca821fd17afd4d9de7a376f9c":"FILA Decathlon (Europe) (Beta)","e192f69d5fe9098cc0ee4f85aeedb4eb":"Bratz - The Movie (Europe)","e196292ab09ed4c6f0b1e394d38cdaeb":"Fire Emblem (Europe) (En,Fr,De) (Virtual Console)","e1b65755d37a64d3ab7605d5dac86b56":"Pitfall - The Lost Expedition (USA)","e1b689a5776e8e35840e3a676fa11853":"Battle B-Daman - Fire Spirits! (USA)","e1c7214348810c9a7b430c64a06e68b7":"Minna no Soft Series - Happy Trump 20 (Japan)","e1cc21ebf4c3be179738ebbf44f25308":"Yu-Gi-Oh! GX - Duel Academy (Europe)","e2026eacc69f10684dd4d370c4abedec":"Spider-Man - Mysterio no Kyoui (Japan)","e21509b91a56514bc1d0cdd0f303a670":"NES Classics - Castlevania (Europe)","e21564dea14e62d831cc1ffe2fefad0b":"Castlevania - Aria of Sorrow (Europe) (En,Fr,De) (Virtual Console)","e21a85388112f840d560c8cf90f61bcc":"2 Games in 1 - Disney Princess + Lizzie McGuire (Europe)","e23047fcf278ca962b8e95690490cc1c":"Dora the Explorer - The Search for the Pirate Pig's Treasure (USA)","e230b4551a3708b97fefbac56ac31421":"Famicom Mini 06 - Pac-Man (Japan) (En)","e23c14997c2ea4f11e5996908e577125":"Metroid - Zero Mission (USA) (Virtual Console)","e23c4d809417568bcbfb93172609c77e":"Megaman - Battle Network 3 - Blue Version (Europe) (Virtual Console)","e2403303923bf63cd48c4b32e918b246":"Crash of the Titans (Europe) (En,Fr,De,Es,It,Nl)","e26711c4aae6f6271e73f663b476c66a":"Codename - Kids Next Door - Operation S.O.D.A. (USA)","e26ee0d44e809351c8ce2d73c7400cdd":"Pokemon - FireRed Version (USA, Europe)","e284d5c93a8e6a3dd4f3587f0836aa4c":"Power Rangers S.P.D. (Europe) (En,Es,It)","e2970509f5671dd267f1c5c5902710e3":"Sum of All Fears, The (USA) (En,Fr,De,Es,It)","e2e9ffe86da23d3cd278d78689bb1fe6":"Total Soccer Manager (Europe) (En,Fr,De,Es,It,Nl)","e309212adc8da5280235f8765649858e":"Lilo & Stitch 2 (Europe) (En,Fr,De,Es)","e32fa9f5d6dedf8e29d65126f780d58a":"Nobunaga Ibun (Japan)","e345a10a452e8574fa4686539e852f31":"Baseball Advance (USA)","e34a4e7ce625a115d985364f448db795":"Happy Dawn (World) (Demo 2)","e352bcea86303c8cd501beca590d2087":"Tringo (USA)","e366059f44f224bf4639a16dc0a9c6c4":"Colin McRae Rally 2.0 (Europe) (En,Fr,De)","e36e394b1d44b3c50cd8630d54da9e4d":"Dynasty Warriors Advance (Europe) (En,Fr,De,Es,It)","e38706415aeef12402ea38b8f1f8e0e0":"Tsuukin Hitofude (Japan) (Virtual Console)","e391eed848ae680be93bba1d691bd55b":"Getting Around It with Pheasant Birdy (World) (Proto) (GBA Jam 2024)","e3b402ef6b72847594bce110fefa4139":"Crayon Shin-chan - Arashi o Yobu Cinemaland no Daibouken! (Japan)","e3bbd6705ed20f911a03a2dd184139f5":"4 Games on One Game Pak (Nicktoons) (USA)","e3bebb876bf45ca598800e3a90d6b2f0":"Lord of the Rings, The - The Two Towers (USA, Europe) (En,Fr,De,Es,It,Nl)","e3c1e29f3560ed88f4a04e1c6ce87b3e":"ESPN Final Round Golf (Europe)","e3d1f21b756890e2a68424173aa8cee5":"Star Wars - The New Droid Army (USA)","e42148c3e79f7d5f7a9f3b63939b68c2":"Megaman - Battle Chip Challenge (Europe)","e429ce307fe06dbcd7724552ff0339d7":"Sims, The - Bustin' Out (USA, Europe) (En,Fr,De,Es,It,Nl)","e42d386ba4691e3608d45fb6dc47996e":"2 Great Games! - Pac-Man World + Ms. Pac-Man - Maze Madness (USA)","e43c13764af931ec97e828eb15e2bc04":"SK8 - Tony Hawk's Pro Skater 2 (Japan)","e43c1c1ccc83f1606ed3ee3996cc8322":"WinX Club (Europe) (En,Fr,De,Es,It)","e44a2af9631df8d957a0f3925b4de3ba":"Monster Farm Advance 2 (Japan)","e44c57a05f836d7ec7fa1c18153b151a":"Hot Wheels - All Out (Europe) (En,Fr,De,Es,It)","e46d84fc7d150d0e9a378b788a6b5c92":"2 Games in 1 - Finding Nemo + The Incredibles (Europe)","e473c37f4e450ceb42cf7d48556b55e7":"Disney Sports - Snowboarding (Japan)","e49b33123bea5e4ff7d74fd06409fd85":"Harry Potter Collection (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)","e4ac9d76d7153c94919ce5a73dc984a4":"Fairly OddParents!, The - Enter the Cleft (USA)","e4ae25fc06561245f7726f9a815d5eea":"Nicktoons Racing (USA) (Beta)","e4bd4736749862ad16cc1c2efed3f8d6":"Quokka Wokka (World) (GBA Jam 2024)","e4de91df422ca4c1b881b9b6288172bd":"K-1 Pocket Grand Prix (Japan)","e4e07fce7c412ecbb7117a58fa235409":"Mario Party Advance (Japan)","e506cc1b94ab876b7cae86d4ad42a600":"Robot Wars - Advanced Destruction (Europe) (En,Fr,De,Es,It)","e51af95bf10261e95814527f05aaddd0":"Rayman - Raving Rabbids (USA) (En,Fr,Es)","e5240ec76c88cd1fe44c73996e957391":"Gap-Man (World)","e524b9c64a98cdc79cf88cbdea5ee39a":"Piglet's Big Game (Europe) (En,Fr,De,Es,It,Nl)","e52615a42936f73a8e8d0853e582a2f7":"Donkey Kong 2 (USA)","e535a6ec2eb86d183453037289527a63":"Metroid Fusion (Japan)","e53b022ae20adabc1c5edbabd3879d17":"ESPN X-Games Skateboarding (Japan) (En)","e5445bbb91fa514a63fd54bf1ce39cf8":"Mermaid Melody - Pichi Pichi Pitch - Pichi Pichitto Live Start! (Japan)","e559a4743a79fb5374872d758c3c67b2":"Famicom Mini 22 - Nazo no Murasame Jou (Japan)","e559e292aa9d44287b052342d6469967":"Super Mario Advance 4 - Super Mario 3 + Mario Brothers (Japan)","e56da89876f44184900ee955d5864742":"Diddy Kong Pilot (USA) (Beta 2)","e582614d06f941ff491543a721a9acb0":"Franklin the Turtle (USA) (En,Fr,De,Es,It,Sv,No,Da,Fi)","e58339b1d1426d9b51ad0b8bad3e87c3":"Tom Clancy's Rainbow Six - Rogue Spear (Europe) (En,Fr,De,Es,It)","e5911e8365d3fe871c7d58560a302938":"Powerpuff Girls, The - Him and Seek (USA)","e5a317d1c71261baac40bbfb29453082":"Mr. Incredible (Japan)","e5d07d693be6f16ed097b2d0ef96f620":"Spider-Man 3 (USA)","e6028a0c5ee9cfc32037cdac136fdad5":"Metal Warrior 4 - Agents of Metal (World) (v1.3)","e61314983c8438a7431b40564f8d6acb":"Konjiki no Gashbell!! Yuujou no Zakeru - Dream Tag Tournament (Japan)","e619f9dcd7ef3d4c6851834018b139bd":"Castlevania - Harmony of Dissonance (Europe)","e6340417acffd03920f9c8211abd72c5":"Twin Series 7 - Twin Puzzle - Kisekae Wanko EX + Nyaa to Chuu no Rainbow Magic 2 (Japan)","e639ef65c3638c0b5927a4d3fc947e3d":"Smuggler's Run (USA)","e646a696bc968b5dc7ffab48cf9b3c94":"Space Twins (World) (Proto)","e64966be355fe570221cef39344973ea":"Famicom Mini 03 - Ice Climber (Japan) (En)","e664054a365f69f673e88fbb84985db7":"American Dragon - Jake Long - Rise of the Huntsclan (USA, Europe) (Beta 4)","e669167a9a053a9d19bf92aa2a2cb2f3":"Ratatouille (USA)","e66d2e98947a5bd1068228e4084b06da":"Yoshi Topsy-Turvy (USA)","e674bef244d677e175f5694a7006bfde":"Classic NES Series - Bomberman (USA, Europe)","e682f89b0a9c991b5e16ceb188fa7e87":"Postman Pat and the Greendale Rocket (Europe) (En,No,Da)","e6836a809ffe6aea707231ccf830c122":"Kelly Slater's Pro Surfer (USA, Europe)","e6985222b701bd435ddb0a30e7fc4fb9":"Disney Sports - American Football (Japan)","e698ff3702ff76c42fc8d0bb80154d22":"Killer 3D Pool (Europe) (En,Fr,De,Es,It)","e6b4bd3c5f5b3d57c2e29c4a9b377b26":"NHL Hitz 2003 (USA)","e6b78109c11d82f621db846da70bc30a":"Sonic Advance 3 (Europe) (En,Ja,Fr,De,Es,It)","e6c6fa9ed05399d05b41806cfe76d4f1":"Final Fantasy V Advance (Japan) (Virtual Console)","e6d2b51ebe0420817d16acad4f89bf7a":"Megaman & Bass (Europe) (Virtual Console)","e6ddd053f1c7c9f3dec98f3b8f8d46f4":"F24 Stealth Fighter (USA)","e711f571ae5bdbacb4ed497c759d074d":"Touhai Densetsu Akagi - Yami ni Mai Orita Tensai (Japan)","e712dc279aa30550031982b9fdc76d87":"Ao-Zora to Nakama-tachi - Yume no Bouken (Japan)","e715d170842826522a7827a89e61998c":"2 Games in 1 - Die Monster AG + Findet Nemo (Germany)","e7470df4d241f73060d14437011b90ce":"Castlevania - Aria of Sorrow (USA)","e78e1f6c6fbe9a614e0406802fc6a7fd":"Tony Hawk's Pro Skater 4 (USA, Europe)","e7939307d25e65cbecc764f55ad49e34":"Kinniku Banzuke - Kongou-kun no Daibouken! (Japan)","e7970a74b423e6b4e842ec640eba3630":"Rockman EXE - Battle Chip GP (Japan)","e799d636498defe6ec44ed038193f366":"Croket! Great - Toki no Boukensha (Japan)","e7a2792c5913a8420a419f2d01358487":"Super Mario Advance 4 - Super Mario Bros. 3 (USA) (Rev 1) (Virtual Console)","e7af002a857d9960e3b5ce7a7f524813":"Fairly OddParents!, The - Breakin' da Rules (USA)","e7c65f9930b6e7580565ad3713c303b1":"Pinky and the Brain - The Master Plan (Europe) (En,Fr,De,Es,It)","e7e9e8948ff3a0de232bf0d8465da8fb":"WTA Tour Tennis Pocket (Japan)","e7ea7a7570b301ae1cfab5531c7a3941":"Mary-Kate and Ashley - Sweet 16 - Licensed to Drive (USA, Europe)","e7ead9536e55c3c6ff2448712cd77efb":"Lilo & Stitch (Europe) (En,Fr,De,Es,It,Nl) (Rev 1)","e80a4cbcfdf598b7efcf80be26c55f56":"Fire Emblem - The Sacred Stones (Europe) (En,Fr,De,Es,It) (Virtual Console)","e81a7f17531fee0906cdca576efe41b4":"ESPN Winter X-Games Snowboarding 2002 (Japan) (En)","e831d36a270f0ddc942fa2909607f2bb":"F-Zero - GP Legend (USA) (Proto 9) (Netcard)","e83c6421a55f4af4394fc8b5fb47efdd":"Oshaberi Inko Club (Japan)","e84d4d9b8c1a68292e76a4c566e5040f":"Medal of Honor - Underground (Europe) (En,Fr,Es,It) (Ubi Soft)","e84de432672187d3d0b8f4d4d654013b":"SpongeBob SquarePants - Battle for Bikini Bottom (Europe) (En,Fr,De)","e85e9de827ed5f685b66c226c96d8981":"Hexes (World)","e86c23f445b069b1a0bc27dda5f638b8":"Dark Arena (USA, Europe)","e876ddf9aecf8f52caecee2358acd9cc":"Momotarou Matsuri (Japan) (Rev 1)","e879e454a201eeeb31a942406048501a":"Konami Collector's Series - Arcade Advanced (USA)","e8c8a0aa40fa0c32d42eebaca6d5412f":"Mickey to Minnie no Magical Quest 2 (Japan)","e8fb25970f5634b9b159edef8c719090":"Eggo Mania (Europe) (En,Fr,De,Es,It,Nl) (Beta)","e8fe8458edbf341e9d7eba0cbec95d46":"Buffy the Vampire Slayer - Wrath of the Darkhul King (USA, Europe)","e91540a58d8c28d15137c7fc6504f78a":"Atari Anniversary Advance (Europe)","e9385f1a0876c563dc42a0ee9c8700ce":"Resident Evil 2 (Unknown) (Proto)","e94540fb5d5e27d7a33c50076bd7628a":"Ed, Edd n Eddy - Jawbreakers! (USA) (Rev 1)","e953331481a9d72101db59ed98dcf57a":"Silent Scope (Japan)","e958226d3b1dfc69e2523ddb19313eee":"World Reborn (USA)","e9626c897aab5bf3e9c42e0611fb4062":"King of Fighters EX, The - NeoBlood (Japan) (Beta)","e963e1b70ddee0657a91f6d857c4e176":"Pac-Man Collection (Japan) (En) (Virtual Console)","e99d7bfa10920b0e5bca2bd235e2fa92":"Winning Post for Game Boy Advance (Japan) (Rev 2)","e9dfe02b283e29d67c224ab6f86c3b9c":"Megaman - Battle Network 4 - Blue Moon (USA)","ea29cc92d44b5217b9810a77eccada2d":"Kidou Gekidan Haro Ichiza - Haro no Puyo Puyo (Japan)","ea3f88e07ff1c9d6bbbad20e0c7efa8e":"Hoshi no Kirby - Yume no Izumi Deluxe (Japan) (Virtual Console)","ea589465486d15e91ba94165c8024b55":"Castlevania - Harmony of Dissonance (USA)","ea6434c2b4b22873efa5166d3ee086fb":"Kaiketsu Zorori to Mahou no Yuuenchi - Ohimesama o Sukue! (Japan)","ea7d981e25ac274adaf5ed08f505c60b":"Backyard Football 2006 (USA)","eab287293bf4b62301119cfc3a9a9ccc":"2 in 1 - Asterix & Obelix - Bash Them All! + Asterix & Obelix XXL (Europe) (En,Fr,De,Es,It,Nl)","ead0c0d58712a968db6ff1c2c08f6946":"Initial D - Another Stage (Japan)","eaec6e4f1192ad24c484b05056e3aa76":"Dragon Ball Z - The Legacy of Goku II International (Japan)","eb0e2a6afcb5e50b2d90db9deba9af6e":"Shining Soul (Japan) (Virtual Console)","eb0f9589f3040f59a944b0831469ae1c":"Jurassic Park III - Ushinawareta Idenshi (Japan)","eb345977c4b1c846c9dec4141ec18343":"Dragon Tales - Dragon Adventures (USA)","eb3ad3925a39e6e36ec9cb0fc3f0d535":"Minna no Shiiku Series - Boku no Kabuto, Kuwagata (Japan)","eb462f708c715309d08fd7968825ae9e":"Metroid Fusion (Europe) (En,Fr,De,Es,It)","eb73bdf597637bed97885296a68250df":"Sims, The - Bustin' Out (USA) (En,Fr,De,Es,It,Nl) (Rev 1)","eb75712d8c0cf949f328e59993797a3f":"Gyakuten Saiban 2 (Japan) (Virtual Console)","eb7ba1c777b946bd9842b6238676f799":"Zapper (Europe) (En,Fr,De,Es,It)","eb80b79637b5fb3c71dd55a47ac20a2e":"Anguna - Warriors of Virtue (World) (Demo 2)","ebb31e3fe75ca8fcae960d3588ef767d":"Razmoket Rencontrent les Delajungle, Les (France)","ebbce58109988b6da61ebb06c7a432d5":"Metroid - Zero Mission (USA)","ebc7077768e9fc856480a80cb6be5b2c":"Green Eggs and Ham by Dr. Seuss (USA)","ebc874a9ffabaacd7ea1a3e128dd97d3":"Final Fantasy V Advance (Europe) (En,Fr,De,Es,It)","ebe1fc2780d93c4cf42f1fe5815a84bf":"Bubble Bobble - Old & New (USA)","ec06f494be2a51170d7fd439bee5a057":"2 Games in 1 - Dr. Mario + Puzzle League (Europe) (En,Fr,De,Es,It)","ec2e23cc5fd7a3ea4e32ac7b8d488103":"Yu-Gi-Oh! - Dungeon Dice Monsters (Europe) (En,Fr,De,Es,It)","ec3f000ffde5754cb164a05d2d6f9053":"Yu-Gi-Oh! - The Eternal Duelist Soul (USA)","ec43565bffb4d418164b85e007de7e17":"Shrek - Super Slam (Europe) (En,Fr,De,Es,It,Nl)","ec77810214f9b39fdc7fe1f2f1cf5cc3":"Over the Hedge - Hammy Goes Nuts! (Europe) (En,Fr,De,Es,It,Nl)","ec863e849b429999ff389df40d29f921":"Elite AGB (World) (Beta)","ec8fde05b426bc7fb37fc6589018c7d9":"Zero-Tours (Japan)","ec9fdbf2ec32b7d5af4fbebe9aa60a56":"Super Donkey Kong 2 (Japan)","ecad3a5f95c034f51641231a33b76c8c":"Tennis no Ouji-sama - Genius Boys Academy (Japan)","eccb480acab19463fa92940c3f573caf":"Racing Fever (World) (En,De,Es,It) (Evercade)","ece7885bad93e64312a90f15763da7ce":"Nintendo MP3 Player (Europe) (En,Fr,De,Es,It)","ed09ecf8c9d1ae485cf3c12cf2184756":"Gunstar Super Heroes (Japan)","ed307f6ea37b57eae6e7d32b76fddf7d":"Care Bears - The Care Quest (Europe) (En,Fr,De,Es,It,Nl,Pt,Da)","ed37a03ef4b1df0bee663751cc021aa2":"Tiny Toon Adventures - Wacky Stackers (USA)","ed4304cc4f5bac34adfaa750316784a8":"Pac-Man Collection (USA)","ed509e5168598ad8e4784a56d79bd6a1":"Napoleon (Japan) (Virtual Console)","ed52707b19848c480866a86f28268273":"Super Mario Advance 4 - Super Mario 3 + Mario Brothers (Japan) (Rev 2) (Virtual Console)","ed573adeab96072232623aa7cff4f077":"Bionicle - Matoran Adventures (USA, Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","ed6f287dfe987b596952671e75b7f688":"Essence of War, The - Glory Days (Europe) (En,Fr,De,Es,It)","ed71f0dc43682b3df88161eadaa4ee44":"GetBackers Dakkanya - Metropolis Dakkan Sakusen! (Japan)","ed8221d6853e1c7b070866d3ca3267ea":"Ready 2 Rumble Boxing - Round 2 (Europe) (En,Fr,De)","ed9b2fe7068678fee67725ec96e98d1f":"Moorhen 3 - The Chicken Chase! (Europe) (En,Fr,De,Es,It)","edb9cfe1efcdd9b8abcf16dfbd0421b8":"Bomberman Max 2 - Max Version (Japan)","edd737aa42cbc7fa7d8b86c249f06ca1":"Sonic Advance 3 (Europe) (En,Ja,Fr,De,Es,It) (Beta)","edd82d2798c8537cfbf044fd1afd6a49":"Black Belt Challenge (Europe)","eddb8663171073186d122638d4b27f82":"Increibles, Los (Spain)","edde54bfd66466d22f113527a7f96e76":"Minicraft (World) (v1.3)","ede4813eb3bbb2860ccf91341dd843c4":"Pokemon - 10th Anniversary Distribution (Spain) (Kiosk)","edebadbee7e89aede8bdf6d245580085":"Naruto RPG - Uketsugareshi Hi no Ishi (Japan)","edfdf49642c0cc0458e0584792f869c5":"Racing Fever (France)","ee0b14aab3ce1039857ad005636e07a4":"Battle Network - Rockman EXE 3 (Japan)","ee2d0ffd5ed6588537e7590540d5cf21":"2 Games in 1 - Finding Nemo + Finding Nemo - The Continuing Adventures (Europe) (En+En,Es,It,Sv,Da)","ee34036bfcc29de83fdffa8adfa697c9":"Shrek - Swamp Kart Speedway (USA) (En,Fr,De,Es,It,Nl) (Rev 1)","ee36c7a4cc06bf050db0b872bebb03d9":"Dragon Quest Characters - Torneko no Daibouken 3 Advance - Fushigi no Dungeon (Japan)","ee4fbcec249a68b796be491f56ffe03d":"Densetsu no Stafy 3 (Japan) (Rev 1)","ee7a39890e4c30bb46d5067abc4ade9e":"Action Replay GBX (Italy)","ee7a6ac20bb48e1da9b39850ba181397":"Nakayoshi Youchien - Sukoyaka Enji Ikusei Game (Japan) (Rev 1)","ee91c4582d9b0cc494fcb71173b43e17":"Tonka - On the Job (USA)","ee9880f52c3626749b943c91921f12ab":"Winnie the Pooh's Rumbly Tumbly Adventure (Europe) (En,Fr,De,Es,It,Nl)","eeacae04f56e9851ef2feeb8a5e7c447":"Inky and the Alien Aquarium (World) (Demo 1)","eed661599b926eddf6890c862c252112":"Monster Force (USA)","eedd67a815e798e19159237a4d151d1a":"Majesco's Sports Pack (USA)","eef855d3f529ad51a0ef8bb6f028f31d":"Teenage Mutant Ninja Turtles 2 - Battle Nexus (Europe) (En,Fr,De,Es,It)","ef13adffd0dc94ed7e417c253e78244d":"LEGO Island 2 - The Brickster's Revenge (Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","ef32f93816b6dbcf788f08faf1e71450":"Super Robot Taisen J (Japan)","ef51d33fd8473d11c3b8083937e6cdf5":"Speedball 2 (Europe) (En,Fr,De,Es,It)","ef9198e16c58c4824efae668da1e7040":"Avatar - The Legend of Aang (Europe) (En,Fr,De,Nl)","ef9c063ab316ca610dd5a6c5c35fca7f":"Hagane no Renkinjutsushi - Omoide no Sonata (Japan)","efa8473a8125181965f08156c95cc6bb":"Dual Blades (USA)","efb231cca7699e588d9e9c3977a04b17":"Megaman Zero 2 (Europe) (Virtual Console)","efcd9b5848f494aaf49051c5d9e83054":"2 Games in 1 - Sonic Advance + ChuChu Rocket! (Europe) (En,Ja,Fr,De,Es)","efefee9082a83fc6e49f87510746eac0":"Doom II (USA)","eff13bb745908c0d38ee5f4518da52aa":"X-Bladez - Inline Skater (Europe)","effa1b8ae6a342dc47f1ad1228c78965":"SpongeBob SquarePants Movie, The (USA) (Beta 1)","f005987feac9ba8aa100658fadc72039":"Surf's Up (USA) (En,Fr,Es)","f008f97617b59e221f8135838f7ddcee":"2 Game Pack! - Matchbox Missions - Emergency Response & Air, Land and Sea Rescue (Europe) (En,Fr,De,Es,It)","f044b2cb1f529c0dffb10ee849e1a1c6":"Inheritors of the Oubliette (World) (v1.2)","f04e0dbf730276bb548498efb2cc6dc5":"Medabots - Rokusho (Spain)","f0507e4e45d9643b4749ec3854557872":"Pro Beach Soccer (Europe) (En,Fr,De,Es,It,Pt)","f053f23d0fb4ae82952c6a0e84048fc3":"Shining Force - Kuroki Ryuu no Fukkatsu (Japan)","f05560ae14f622de028308b372ab2fe3":"Cabbage Patch Kids - The Patch Puppy Rescue (USA)","f05f356facb38a1c330fa3d80ff3bd28":"Gojira - Kaijuu Dairantou Advance (Japan)","f06ab1aa70bde5cddd63b0ae6ba02712":"GB-A TV Tuner PAL (China) (v2.0)","f090251d431126090195e54b6d963e2d":"Charlotte's Web (USA) (En,Fr,De,Es,It)","f0d1a7bb650ea304b9af7bfc1567a19b":"Power Rangers - Ninja Storm (Europe) (En,Fr,De)","f0d3e68e554e44d1df20a16359f13f5f":"Star Wars - Episode II - Attack of the Clones (USA)","f0de694021e61fbe5224d4a2e805e587":"Super Puzzle Fighter II (USA)","f102be90875140f712a259a5bc533dd5":"Korokoro Puzzle - Happy Panecchu! (Japan)","f1032ab0ecb48697ffd4d50b28cccf5f":"Asterix & Obelix XXL (Europe) (En,Fr,De,Es,It,Nl) (Beta 2)","f1040f25e06dd1f4b5fa2967a2996ffc":"Racing Fever (Europe) (En,De,Es,It)","f12ac2c645c7984621e573a37d76c446":"Pokemon - Leaf Green (USA) (Pirate)","f1321648a333354c64cc402fb79487ad":"Zoids - Legacy (USA) (Beta 2)","f146baf10cf767d2313c4da94a5845eb":"Castleween (Europe) (En,Fr,De,Es,It)","f14d377341c6afba46d3db0fabf12062":"Medabots AX - Metabee Ver. (Europe) (En,Fr,De,Es,It)","f15c91bc7484532fb4a762250bf6d48a":"Scooby-Doo (Spain)","f18631a6e0af3301981848e521f1de9a":"King of Fighters EX, The - NeoBlood (Japan)","f197a596c8626f8f0cf996bd5f68dc40":"Barbie and the Magic of Pegasus (USA) (Beta 4)","f1a1b9742fcd467a531dd4314c4e7d19":"Fire Emblem (USA, Australia)","f1be09ac4b8d6a9e2c955cab741669ef":"Big Mutha Truckers (USA)","f1d525b5a2f0d14e90c494317be072c7":"Contra Hard Spirits (Japan) (En) (Virtual Console)","f22148e0a4298808ba05cd386d64d320":"Konjiki no Gashbell!! - Unare! Yuujou no Zakeru (Japan)","f22ca50c999fddb4feef6bcb32b9d94a":"Dead to Rights (USA)","f238cf012fec263050f77bb01460404e":"Shiren Monsters - Netsal (Japan)","f2391ba88f816726e5a2ce4d321c5abf":"Rayman Advance (Europe) (En,Fr,De,Es,It)","f24e3e9760003f0629b31ff96e9427b6":"Famicom Mini 23 - Metroid (Japan)","f26abd577f7854c5f967ef5f0d1396ad":"Barbie Superpack - Secret Agent + Groovy Games (Europe) (En,Fr,De,Es,It)","f27ec053bccc03c8219a6d04169d402a":"2 Games in 1 - SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (Europe)","f291756b7731354c0d912e8d6337b7fe":"Inspector Gadget - Advance Mission (Europe) (En,Fr,De,Es,It,Nl)","f29fe8cae0acb618d7c48fb5e292b367":"Power Rangers - Time Force (Germany)","f2b1c6f30bd79859dc75ac2c8abee538":"Extreme Skate Adventure (Europe) (Fr,De)","f302325be9c434ea4ada4ee80cb1caeb":"Rick Dangerous 2 (World)","f30650403dc5bbf73037c1364d747df5":"Mario Golf - Advance Tour (Australia)","f310c0a374d8c59320c2f8b9fc6aaba3":"Driver 2 Advance (Europe) (En,Fr,De,Es,It) (Beta 1)","f323312b0676c7bf845f2f7b8e90459c":"Let's Ride! - Sunshine Stables (USA)","f333b1026273dd9b49dad0f912510496":"Puppy Luv - Spa and Resort (USA)","f341bab11f2bfd79b995554d40a61cba":"Crazy Frog Racer (Europe) (En,Fr,De,Nl)","f3485ed77afc6fc2acb2da935ca4d6b4":"Sports Illustrated for Kids - Football (USA)","f34e91399c719812e66e2c828a2e93d7":"Pokemon - Sapphire Version (USA, Europe)","f35d2f567edd9c04e7f9647edb206995":"Mario Kart Advance (Japan)","f3647154d85d20f9c8ba66ed8f0a609e":"Pokemon Fushigi no Dungeon - Aka no Kyuujotai (Japan)","f38a2757e2be77413bdbeddf8ff07e2a":"Army Men - Sarge's Heroes (USA, Europe) (Proto 3)","f39b607dc13c4d8c4353b7981f5f6cb6":"Steel Empire (Europe)","f39ee250baea64eb691fe65bf4da40b9":"Green Memories (World) (v1.4.2)","f39efd645c3828875c7f5f5971a06497":"Monster Summoner (Japan)","f3b1c7fc2ae57728f8d9f6967d2285be":"Tork (USA) (Proto)","f3bea8b094971b2bade114ad11f693af":"Unfabulous (USA) (Beta 7)","f3d168d87d3e2ae25dbec012471cd9b5":"Super Robot Taisen - Original Generation 2 (USA)","f3e58d5622af0d38c7dad8ffd33635e3":"Nakayoshi Mahjong - KabuReach (Japan)","f3f2885cbf6d0476a8d2a786d4aa22e8":"SpongeBob SquarePants - Lights, Camera, Pants! (USA) (Beta 2)","f3f8de4d9497fde3be0a950a10bb2f5b":"SpongeBob SquarePants - Revenge of the Flying Dutchman (USA) (Beta)","f40df16771cfe278d3ea43b2a91242fc":"Sys Crusher (World) (v1.1)","f41b1b8bc38289dc25082d0fd7d376d1":"Scooby-Doo (USA)","f41e36204356974c94fabf7d144dd32a":"Mother 1+2 (Japan)","f4217235b05b24f48b10504ec45a8a9c":"Anguna - Warriors of Virtue (World) (v0.93) (Alt)","f4260e5de1b9d68bc8b4ab42de2f2109":"Legends of Wrestling II (USA, Europe)","f42847fa81d5d1cf30d1dd5b64924561":"Pokemon - Versione Zaffiro (Italy)","f4326bde4b5e9f53f5fc58ce24d7b137":"SEGA Rally Championship (USA)","f43c3cc85f221533fda3c279a45ce8ea":"Tantei Jinguuji Saburou - Shiroi Kage no Shoujo (Japan)","f45348cc19783709d04ac0c12175b222":"Super Mario Advance 4 - Super Mario 3 + Mario Brothers (Japan) (Rev 1)","f453b825391590c47f4db6504d8f99e5":"Duel Masters - Sempai Legends (Europe) (En,Fr,De,Es,It) (Beta)","f45c8e599577038b306b831a46774546":"Daigassou! Band-Brothers - Request Selection (Japan) (DS Expansion Cartridge)","f46708740d18d280466d6311dafd0906":"Sylvanian Families - Fashion Designer ni Naritai! - Kurumi-risu no Onnanoko (Japan)","f477bd518e5cbf64bf22fe4545909033":"Christmas Game, The (World)","f493e3fe4dbe2b9ecde12ce9590a10e7":"2 Games in 1 - Quad Desert Fury + Monster Trucks (USA)","f4a655e23638e79eacf44a456faee6a4":"Shining Soul II (USA)","f4a74f7683e525fe7d7f125f0bf7834a":"Hamster Monogatari 3EX 4 Special (Japan)","f4ac2d26605ebbb0d390e07810f12484":"Lady Sia (Europe) (En,Fr,De,Es,It,Nl)","f4c2b2fda444dcec1274844b9a764d64":"Advance Wars (Europe) (En,Fr,De,Es)","f4d468093cf7800c97f5aa8b38d03962":"Saibara Rieko no Dendou Mahjong (Japan)","f4dd91f51e8b310542d333ea0d2c9f0c":"Fushigi no Kuni no Angelique (Japan)","f4e3dead5af182598623cf89f9a428f4":"Zoku Bokura no Taiyou - Taiyou Shounen Django (Japan)","f4f23f40e29451150b46d4bbdef63f13":"Klonoa - Empire of Dreams (USA)","f4f51f42af0fcf96a1c33705f7f5ce08":"Bionicle - Maze of Shadows (USA)","f50a0c3fbf3e206528a3e6f99c80820c":"Bibi und Tina - Ferien auf dem Martinshof (Germany)","f575c8c844ae2ffad9adc7f91c886d54":"Disneys Prinzessinnen (Germany)","f577a97d679e669f8063910eb060e864":"Donkey Kong Country 3 (USA)","f586b690746adce9fcaaef9d3d081117":"Comix Zone (Europe) (En,Fr,De,Es,It)","f58a7e485676f66c1c88126675d57eff":"Gekido Advance - Kintaro's Revenge (USA)","f59054ea92eca5911aa6e3fc002fe545":"Konjiki no Gashbell!! The Card Battle for GBA (Japan)","f5a10aeab11d8f77be5cd4d9be1c2766":"Franklin's Great Adventures (Europe) (En,Fr,De,Es,It,Nl,Pt,Da)","f5bdbf35d4ad87fae71ec94bb77c7a49":"Famista Advance (Japan)","f5c79c9813f8d30878234e6397b156ab":"Wreckage (World) (GBA Jam 2024)","f5c877c05db6ac999a86f34a1813fc95":"Berenstain Bears and the Spooky Old Tree, The (USA)","f5d654479e0298694b9479cef798494c":"Holy Bible, The - World English Bible (USA) (Proto)","f5df46466b504e0eaca6065f4780a2b6":"F-Zero - GP Legend (USA) (Proto 10) (Netcard)","f62c47cbe08e1e3bcfcf9f1b84841a76":"Yu-Gi-Oh! GX - Duel Academy (USA)","f65e87d6867d2ae8561ffcd1ab9ed57b":"Elemix! (Japan)","f6670d280e7b6dc85e6c20b89ef51691":"Need for Speed - Carbon - Own the City (USA, Europe) (En,Fr,De,Es,It)","f69ced586dc3dfb4705b69f42ade2b06":"Shin Megami Tensei Devil Children - Hikari no Sho (Japan)","f6c0a645317d6ed90abc4e04f7b33b46":"Mario Power Tennis (Europe) (En,Fr,De,Es,It)","f6c0c5a3ca383ec7769979aa69f551e1":"Pac-Man World 2 (USA) (Beta)","f6d3840d1e185cb4829e8e9a9818d00d":"Land Before Time, The (Europe) (En,Fr,De,Es,It)","f6deba3b5d10f9d85306d4946ee342b4":"Hitsuji no Kimochi. (Japan)","f71bb7305c4aa4ff83d83d949add1126":"Disney Sports - Soccer (Japan)","f74b2b6665c687f5ec1ef2ed21120ee2":"Superman - Countdown to Apokolips (USA)","f74baab7b2516b43119d23292033c735":"Herbie - Fully Loaded (Europe) (En,Fr,De)","f78dff6fa36f9bcf38cd9e4740ecc9c3":"Super Duper Sumos (USA)","f793a854654b467211fc32c4062cb183":"Pokemon - Smaragd-Edition (Germany)","f7960bb4694205288a59556ab82c34e5":"Barbie Horse Adventures (Europe) (En,Fr,De,Es,It,Nl)","f7b81e3f3bb3b02d973fc6f145ad4416":"Kingdom Hearts - Chain of Memories (USA)","f7b81f0a57db7206a0f2486491f8a99d":"Tom Clancy's Splinter Cell - Pandora Tomorrow (USA) (En,Fr,Es)","f7bdd0eb9cd94d4c3bf924654998c514":"Zoids Saga II (Japan)","f7c0a6bf412b6f78a0f0e096aa0fd07e":"Zoey 101 (USA)","f7d2a8559099d30d1cbf74d0d3a6415c":"Medabots - Rokusho (USA) (Virtual Console)","f8076c80baeb8abd1fb636ab3b86630c":"Atomix (World)","f8098c5ca6ddd80e0f2e9f7d36808d4d":"Famicom Mini 13 - Balloon Fight (Japan)","f80cad97ed415aba1ec81d983fb4ae56":"Teenage Mutant Ninja Turtles Double Pack (USA) (En,Fr,De,Es,It)","f81f60fdb2fd774c72a170a1805db52e":"Rhythm Tengoku (Japan)","f8435f531c69c258841a985ff1e8072f":"Princess Natasha - Student, Secret Agent, Princess (USA)","f877b87f140945ad93cfce50411507c0":"Super Mario Advance 2 - Super Mario World (Europe) (En,Fr,De,Es)","f87a7dc67415d1f4c16cc430fcf98d9d":"DemiKids - Light Version (USA)","f87c40e2be0e80ddb2c044df9fb97069":"IK+ (Europe)","f88df40fedb9d31a6e59dba4a9be1b2a":"Iridion 3D (USA, Europe)","f8a7b028f2edcfbb565ef88bb321c665":"Jurassic Park III - Park Builder (Europe) (En,Fr,De,Es,It)","f8d9503c529e3608ed4d91fc7315deb3":"Daredevil (Europe) (En,Fr,Es,It)","f957455dad9133d9ef41af092a353973":"Sonic Advance 2 (USA) (Beta)","f977a030aa9f5fa4c6013ae472f68b91":"Nancy Drew - Message in a Haunted Mansion (USA)","f986d79271e685679f0b5ecb673e9dea":"Shrek - Hassle at the Castle (USA) (En,Fr,De,Es,It,Nl)","f99fb545ac65126e9956a7718c30d6a3":"Mario Kart - Super Circuit (Europe)","f9a91a30f730e8482a73ea0c0a71a4fb":"Superman Returns - Fortress of Solitude (USA, Europe) (En,Fr,De,Es,It)","f9ab5e9200dfae863f30e9332d7fcd95":"Mini Moni. - Mika no Happy Morning Chatty (Japan)","f9acb6c92faeda7287646dcb354ca183":"Naruto - Konoha Senki (Japan) (Rev 1)","f9bb8a52a046efc37077cc1a0c855dcf":"Hamster Monogatari 2 GBA (Japan)","f9d25044142e0492f09c5e60a8da0509":"KAO the Kangaroo (Europe) (En,Fr,De,Es,It,Nl)","f9d40d7c6c31991f44527a236107acda":"Top Gun - Combat Zones (USA) (En,Fr,De,Es,It)","f9de621b65084bcdaff6e6b0cdc7c413":"Yoshi's Universal Gravitation (Europe) (En,Fr,De,Es,It)","f9e6bfc9404be783b149259ffd9c5da0":"FIFA Soccer 2004 (USA, Europe) (En,Fr,De,Es,It)","fa11be8d9b3e6a4851d8f4538922082a":"2 Games in 1 - SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (USA)","fa19435d7060761379f5583fd95e1d24":"Treasure Planet (Europe) (En,Fr,De,Es,It,Nl) (Rev 1)","fa34fc711555c60249603a4ebb718c8e":"Megaman Zero 4 (USA) (Virtual Console)","fa6a6fd3e3898a58977f468db9a1f6f9":"Chobits for Game Boy Advance - Atashi Dake no Hito (Japan)","fa70bac809f1801f26472a023330e1dc":"Hi Hi Puffy AmiYumi - Kaznapped! (Europe) (En,De)","fa72eb309a2c87d0cc50a00d0775950c":"Kidou Senshi Gundam - Seed Destiny (Japan)","fa8d5832ed9ccad0fbcae7a147755ae9":"PukuPuku Tennen Kairanban - Koi no Cupid Daisakusen (Japan)","fa99e7be703b7f204c33ab8ea7a69e67":"Dogz 2 (Europe)","fab0e663d83fa071089cc626b84c92eb":"Shin Megami Tensei Devil Children - Yami no Sho (Japan) (Beta)","fab7a0ca0e546fc80d886f11390dd9ac":"Taiketsu! Ultra Hero (Japan)","fac044fe59b25ae95471a85c072f716a":"Super Street Fighter II X - Revival (Japan)","facea584a4c4465bcb9e028c7b36a481":"bit Generations - Coloris (Japan) (En)","fb0b9d0db44ec7de4a534c2849f8b756":"Godzilla - Domination! (USA)","fb1e889cf258cd014fbb08e5f8554a35":"Strawberry Shortcake - Ice Cream Island - Riding Camp (Europe) (En,Fr,De,Es,It,Nl,Pt,Da)","fb29d59010a0ea0fec56cec94241617b":"Yu-Gi-Oh! Double Pack (Europe) (En,Fr,De,Es,It)","fb55cc8ae270aa9a18871602d3ae36cc":"Polly Pocket! - Super Splash Island (Europe) (En,Fr,De,Es,It) (Vivendi)","fb6512463e361b4a79bb4f62bfca86fd":"Caesars Palace Advance - Millennium Gold Edition (USA, Europe) (Beta)","fb659da8c345e1c26227d345efc76c79":"iQue Reader (China)","fb85f8209fe4ea11e6578b11e8194546":"R-Type III - The Third Lightning (Europe) (En,Fr,De,Es,It)","fb95bb41631ce0ab21b44575ff6c55b6":"Narikiri Jockey Game - Yuushun Rhapsody (Japan)","fbad88c14dcedefe6c70b06adcd0a0db":"Shin Bokura no Taiyou - Gyakushuu no Sabata (Japan)","fbd187500572b8af52c505f4f8a4bd9b":"Santa Claus Saves the Earth (Europe)","fbda16cbc7e3f81aa5b90da955d3e114":"Spider-Man - Mysterio's Menace (USA, Europe)","fbfe7e3ff612728e1464dfa8cba770df":"Anguna - Warriors of Virtue (World) (v0.94)","fc13f41345df4aba40ffc69402e64704":"Franklin the Turtle (Europe) (En,Fr,De,Es,It,Sv,No,Da,Fi) (Rev 2)","fc221b4371061c27cbf6a8b08db82543":"MotoGP (Europe) (En,Fr,De,Es,It)","fc244be5e2a8b811ea2b2e0101d64a6e":"Cartoon Network Block Party (USA)","fc3294492745f9a205d43c0c983fe6c3":"Survivors (World) (Proto) (GBA Jam 2024)","fc393954c63fa0e82ccfd7334491c2a7":"Pirates of the Caribbean - The Curse of the Black Pearl (USA) (En,Fr,De,Es,It)","fc40baff09563b7e1187bcb987bb541a":"Sports Illustrated for Kids - Baseball (USA)","fc6a66c32b91fa0e526ae7782f29e86a":"Dragon Quest Monsters - Caravan Heart (Japan)","fc7542ef483c03eb22000837c38bfc1d":"Peter Pan - The Motion Picture Event (USA)","fca4c485f41412a4ddc05fbe105c3219":"Sonic Advance (USA) (En,Ja) (Beta)","fca55f7e8017eeb52f7075e29e2353cc":"Leiman IV - Guangming Zhi Lv (Taiwan)","fcab58352e45a97a7becbecc948ea076":"Barbie as The Island Princess (USA)","fcba36d00eb7347a5836f1cfb8b31cc1":"Adventures of Jimmy Neutron Boy Genius vs. Jimmy Negatron, The (Germany)","fcbf93f8859d8500319e0d80a8c02150":"Harvest Moon - More Friends of Mineral Town (USA)","fce3c39e7ba452eddb2279b454b66416":"Pokemon - Versione Rosso Fuoco (Italy)","fce7adb1c33f9a75a03e1c425cb9930d":"Adventures of Jimmy Neutron Boy Genius vs. Jimmy Negatron, The (USA, Europe)","fd1d6711a0cca4c15a627183aec0a854":"Ojarumaru - Gekkouchou Sanpo de Ojaru (Japan)","fd3690a50be799b40f00bc8989229c07":"Frogger's Adventures 2 - The Lost Wand (Europe) (En,Fr,De,Es,It)","fd80c3ad287ca570ce26c425237d1902":"Megaman - Battle Network (Europe) (Virtual Console)","fd844c83c46c99046204678f60646302":"Pinball of the Dead, The (Japan)","fda461b129b3630e13a9173a4ed5fd88":"Famille Delajungle, La - Le Film (France)","fdbd4e62e01ba4a570188b201427d3a4":"Xploder Advance (Europe) (Alt)","fdef312709444d6d901b8b7c619f5913":"Crash of the Titans (USA) (En,Fr)","fe1693b0d503ff222ebc090ac3dab920":"Inukko Club (Japan)","fe1bd7d414d0a710ef17d38cec1a76cc":"Super Black Bass Advance (Europe)","fe2003b76cded94a19bc69fc44bfd525":"Lord of the Rings, The - The Fellowship of the Ring (USA) (Rev 1)","fe2f3e4d3b15c8776c45fd7ef060df89":"2 Games in 1 - Finding Nemo + The Incredibles (Europe) (Fr,Nl)","fe30fdc4357f7d459e9902bf15241f84":"Kawa no Nushi Tsuri 3 & 4 (Japan) (Virtual Console)","fe3d96f30e5d72c969606cc957b581c0":"Sylvanian Families - Yousei no Stick to Fushigi no Ki - Marron-inu no Onnanoko (Japan)","fe475f28da72f4141803847df8ec786f":"Skyland (World) (Proto 6)","fe6048dabf155f1001a198309e34798d":"Dark Empire (Japan) (Proto)","fe73df04a447bcb43c10a03b275a8426":"Happy Feet (Europe) (En,Fr,De,Es,It)","fe8aac1a517af3ea89fd680536962ddf":"Noddy - A Day in Toyland (USA) (En,Fr,Es)","fe8f2d7b6b58cb78ca51f8bceaa0f254":"Kien (USA) (Proto)","fedf94e93a79d35f70ea85a78fdee5aa":"Sky Dancers - They Magically Fly! (USA)","feec220b3324ec3bf48a6902a83b7206":"Fire Pro Wrestling A (Japan)","feec4136348094034b648677ea0b82ab":"Tactics Ogre Gaiden - The Knight of Lodis (Japan)","ff25067b591ba324cd44689a9ba8aa48":"Pocket Monsters - FireRed (Japan) (Rev 1)","ff36188d91f68626d9d8b9dd9b3571e7":"Urbz, The - Sims in the City (Japan)","ff50e8973adf12604ca70e15acb108db":"Jet Grind Radio (USA)","ff65d0c1dfba11ee40adec6aaba89e06":"Hamtaro - Rainbow Rescue (USA) (Proto)","ff6b0c48065389b888c7a78731d4b58d":"Super Mario Advance (USA, Europe)","ff75c62ab690410cc8fca24204d783e9":"Boktai - The Sun Is in Your Hand (USA)","ff81ee924f0b66ca6e1743c056ea0782":"Around the World in 80 Days (USA)","ff99de23c20d8b8136e3afca53734e87":"Kid Paddle (Europe) (Fr,Nl)","ffa7898ee8b3bc98e4156f3b5e7cdf63":"Yu Yu Hakusho - Ghostfiles - Spirit Detective (USA)","ffa917f29cb9b3c0b9d2594b7608beac":"Wario Land Advance - Youki no Otakara (Japan) (Virtual Console)","ffb9c2fe3dc23fd7796f71f7d54fe447":"Mario Kart Advance (Japan) (Virtual Console)","ffc475b949a5938eef2890751c0fc6f8":"Gu Huo Lang 4 (Taiwan)","fffe680eff483b4d4366964eb7a150d8":"Batman - Vengeance (Europe) (En,Fr,De,Es,It,Nl)"} \ No newline at end of file diff --git a/lib/gemba/data/gbc_md5.json b/lib/gemba/data/gbc_md5.json new file mode 100644 index 0000000..7eca633 --- /dev/null +++ b/lib/gemba/data/gbc_md5.json @@ -0,0 +1 @@ +{"001fc1b6cfae773f2d24219409bdcb19":"23 in 1 (Taiwan)","002d0d5fd2f668798da1991b5fd5b4d8":"Earthworm Jim - Menace 2 the Galaxy (USA, Europe) (GB Compatible)","0044c80fb6c6c7c49466dafe6637d61a":"Zidane - Football Generation (Europe) (En,Fr,De,Es,It)","008ede5b89c08375fe58d6597a15a21a":"Hang Time Basketball (Europe)","008f5a6eb8cbbe7a76ea9403ad063d67":"RPG Tsukuru GB (Japan) (Rev 1) (Possible Proto) (NP)","00ca1749b004d4c38cdfc884bd547f72":"Barcode Taisen Bardigun (Japan) (SGB Enhanced) (GB Compatible)","00cdb5c6a13d6992737b03332567dca5":"Featherless Cake Delivery (World) (v1.0) (GB Compatible)","0107666c622e3bf3e225ecc6fe4fee42":"Kelly Club (USA)","010ae3b36a642d13ee85fcc5494a132b":"Retro Quiz Tower (World) (GB Compatible)","0121aa4c2909ff7dff2190b7889956fd":"Hello Kitty no Happy House (Japan)","0132a38451021c3c9e8f5532fc888343":"Donkey Kong 5 - The Journey of Over Time and Space (Taiwan) (En)","0143dbb62b1a88e7cce65f9779ce9d4b":"Jeremy McGrath Supercross 2000 (USA, Europe)","0146768d48b8317e0c8a2c7dd8d31860":"Sanrio Timenet - Kako Hen (Japan) (SGB Enhanced) (GB Compatible)","0155bb1d60a477eeeb148033210eecf3":"Freestyle Scooter (Europe)","01586c8122da5014abed765147e5a7bb":"Worms Armageddon (Europe) (Beta)","0162a11fac3e65f15b9dd47be81c62f7":"Grimace's Birthday (World) (v1.1)","017cde0db5d27525af84123f1ce81edf":"Metamode (Japan)","0185d5e6048a74e9b77a26e02cb56307":"Spy vs Spy (Europe) (En,Fr,De,Es,It,Nl,Sv) (Rev 1) (Proto)","01a67ed2dc935044ba69eda42bddebf3":"Toy Story Racer (USA, Europe)","01d41f5d875089155e4dc489ae12f095":"Rockman DX6 (Taiwan)","01e5a7a8a115c7e88b39de91b0ed9928":"Quartet (World) (GB Compatible)","01fb7107b8432d3eed3e131605d682a3":"Doug - La Grande Aventure (France)","023b5dbe9c3dcb3bc11ab388e8a40fe3":"Sesame Street - Elmo's 123s (Europe) (GB Compatible)","0256340ec50afb921f07763ea4628966":"Dragon Ball Z - Legendaere Superkaempfer (Germany) (Beta 2)","028c4262dbb49f4fc462a6eb3e514d72":"Shantae (USA)","02ace5228e56b419ee31b8202179e868":"Shantae (World) (Switch)","02f25d1192d129ee73104c5bfc127a94":"Carmageddon TDR 2000 (Europe) (En,Fr,De,Es,It) (Proto)","03286ff23be2127e0b5e111001a369c2":"GB-Wordyl (World) (Es) (GB Compatible)","033dade2cc761d6f360daeecff9d6f90":"Prince Naseem Boxing (Europe) (En,Fr,De)","0348787d4432c969b4af0129682468ba":"Shenghuo Jiangmo Lu Waizhuan - Guang Yu An De Lunhui (Taiwan)","036b4944895082f5895a475f4ced3bfb":"Yu-Gi-Oh! - Dark Duel Stories (Europe)","037034765c049438b82b30bc1a551165":"John Romero's Daikatana (Europe) (Fr,De,Es)","03a8bcab4b2975fa2d850d18c728ea9c":"Croc 2 (USA, Europe)","03da498c5503d8747dc1eccf1101fce3":"Pocket Soccer (Europe) (En,Fr,De,Es,It,Pt)","03e6a11b8040b4d56b3c1402c92bbf6d":"Othello Millennium (Japan) (GB Compatible)","04122c3d11609d98db1db1fd386da7c8":"Digital Monster 2001 (Taiwan) (En)","041b8a455b63beb718d70c8f89fac9d3":"Gold and Glory - The Road to El Dorado (Europe) (En,Fr,De,Es,It,Nl)","0452cb3853113dca202e5dca225b80ee":"Tower of Evil (World)","0454b25266d645990b63b5b406672dc2":"Tony Hawk's Pro Skater 2 (USA, Europe)","046af13647ed4777510aa86fcb753bf9":"Caterpillar Construction Zone (USA, Europe) (GB Compatible)","0476c7220327d99e3d039faaa4cdde8f":"Lemmings & Oh No! More Lemmings (USA)","049da443c6bd96a0365cbc68b7d0e2eb":"Cardcaptor Sakura - Itsumo Sakura-chan to Issho (Japan) (GB Compatible)","04f7ea139fef2bc2e3f70b2c23933d2e":"Keitai Denjuu Telefang - Power Version (Japan) (GB Compatible)","05093e5f050b812939972afce4e2e3fb":"Paku Paku GB (World) (GB Compatible)","052cd45a69af16f025a545b29bc8f450":"Legend of the River King 2 (Europe) (SGB Enhanced) (GB Compatible)","053d55b23c41c5e0e3227239f4844fea":"Soul Getter - Houkago Bouken RPG (Japan) (GB Compatible)","0548e7732bf23a56f8a2e942dd0c14d2":"Fellowship of the Rings (China) (En)","054921b29a0a336eb1b28272c8125186":"Downer (World) (GB Compatible)","0552078f981c2ef3977f2dfeee19510a":"Croc (USA, Europe)","0591d5637b4c9f304340d941b2ae9e7a":"Fairy Kitty no Kaiun Jiten - Yousei no Kuni no Uranai Shugyou (Japan) (SGB Enhanced) (GB Compatible)","05a9c516d6e744135a6303aa5b4a8887":"Grand Theft Auto 2 (USA)","05aba5a3251588398c1ced7f87a61270":"Shuma Baolong 02 4 (Taiwan)","05e5ecc94ef05260ebba60576ca45ba0":"Dragon Ball Z Gedou 2005 (Taiwan)","0612746dccbd1d01c0e095767a9c5a89":"Harry Potter 2 - The Black Art Wrestle Edition (USA)","06157785417d6fe5c73388eb573981dc":"Hamtaro - Ham-Hams Unite! (Europe) (En,Fr,De,Es,It)","062bfa5e5b52b5a4ace5b59c364fe2ff":"Space-Net - Cosmo Blue (Japan)","06445da47ed612c8f7fc8911c673f7fe":"Jurassic Boy 2 (Taiwan) (En) (Rev 1) (Sachen)","064f9dc3a19e5b6e41f646943254674e":"J.League Excite Stage GB (Japan)","0650cbe5e04f8968d5c09740af7aa152":"M&M's Minis Madness (Germany)","06545852ed3f3cd018c95f6d3c5fbbee":"Biohazard Gaiden (Japan)","069b01643e876ec91a5555450068f4ac":"Rugrats - Time Travelers (USA, Europe) (GB Compatible)","06b0d6b88e54337f3f5c7bbea373f237":"Frogger 2 (USA)","071ad15a9890f73890c4e0dedd07793e":"Madden NFL 2000 (USA, Europe) (SGB Enhanced) (GB Compatible)","0762fc989c52652b2660f26be0830f20":"Hugo - Black Diamond Fever (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da,Fi)","077fb84e685b20d693a637593a77b8c8":"Octopus Stressus (World) (v1.1) (GB Compatible)","07876bd62abbe5fd8878a0363e23a42f":"Deja Vu I & II (Japan)","078c1192e19c1332171d088dcb891293":"Loppi Puzzle Magazine - Kangaeru Puzzle Dai-2-gou (Japan) (Rev 1) (SGB Enhanced, GB Compatible) (NP)","079f899abd4d5183d494629b7b98b0cb":"Suicide Run (World) (GB Compatible)","07b3756a52db31f1accc85f71d5f34c7":"Disco Elysium - Game Boy Edition (World) (No Music) (GB Compatible)","07c211479386825042efb4ad31bb525f":"Legend of Zelda, The - Link's Awakening DX (USA, Europe) (SGB Enhanced) (GB Compatible)","07d4df7a1c93f5bef617e5a90b9edee2":"Survival Kids (USA) (SGB Enhanced) (GB Compatible)","07de70bd0e839dd1d4be2670b2e1d33f":"GB Harobots (Japan)","0806cf988e52811c08af25adca520bb5":"Unearthed Zero (World) (2021 Jam Version) (GB Compatible)","080f8f6632c57101bf511360fc68eb15":"Shuma Baolong - Shuijing Ban II (Taiwan)","08130cb33fe270321d04d056b85d2037":"Sylvanian Melodies - Mori no Nakama to Odori Masho! (Japan) (SGB Enhanced) (GB Compatible)","08261d984f5e0d103191d7bbae8fba50":"Hamster Club (Japan) (GB Compatible)","08333f9e3d797fa8c9cee8a1526e8690":"WDL - World Destruction League - Thunder Tanks (USA) (Beta)","0834c2990995cbd2c76db538ff93c5ba":"Jurassic Boy 2 + Thunder Blast Man (Taiwan) (En) (1B-002, 1B-003, Sachen)","08405276b33bc1b679b05296a2f7c44d":"Tiny Grasshopper Goes Away (World) (En,Hu) (v1.4) (GB Compatible)","08680aedc945591f81461c1bf459124e":"Shanghai Pocket (Europe) (SGB Enhanced) (GB Compatible)","086dd0976154b38cf76c8f596ce00f0c":"Lunar Docking (World)","0877a4b1765287c5b50ea53a47a1d7ad":"Bugs Bunny in - Crazy Castle 4 (USA)","08855304ddb6b3ba9ac65401ef829746":"Pocket Smash Out (Europe)","08b3d438bb90b4f3bc16a93d30c1351c":"Emo Cheng DX (Taiwan)","08bca718c62e3c2870a2df107fc0a562":"Dragon Quest Monsters (Germany) (SGB Enhanced) (GB Compatible)","09232e1c83dde06aa5b67d14618f4e08":"Kawa no Nushi Tsuri 4 (Japan) (Rev 1) (Possible Proto) (Rumble Version) (SGB Enhanced, GB Compatible) (NP)","093e3b0eb0723fd652cfe08a0a61a1c4":"Digimon Pocket (Taiwan) (Zh)","09419d9aba3b31d36c09d08d2c1555f8":"Nations, The - Land of Legends (Europe) (En,De)","0979556c11f2ee65a8d9a03b4a1c04d7":"Elevator Action EX (Japan)","09a76ffd0b430767ffe97e1ebd3a55aa":"Haizhan Qibing (Taiwan)","09aac34623fe99c7068192c9e24858aa":"Shantae (World) (GBA Enhanced) (Switch)","09bc56a467f95a19a357174c5710db74":"Unearthed (World) (v1.3) (GB Compatible)","09c21d37f66cca587663a461c81606be":"F-1 World Grand Prix (Europe) (Beta)","09cefdbbb38503e91dd666aeca68871a":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (Beta) (SGB Enhanced)","09f75cc7dc00a7ae8ae4b586092fe045":"Gensou Maden Saiyuuki - Sabaku no Shijin (Japan)","09fbebc41df99d534290d3033b09814e":"V-Rally - Championship Edition (Japan)","0a1cf1904c87b60308c404d93bab2702":"Top Gear Rally 2 (Europe)","0a281a2c97b4fe140766fd06d1a2b79d":"Grimace's Birthday (World)","0a3da06446d9a2c7e1ea8149c9026434":"Pong - The Next Level (USA, Europe)","0a60eb6a91c63d2991822d4ecc330b77":"Ghost of the Arcade (World) (v1.3) (GB Compatible)","0a67db463824f26a29e6fa130cd62ccc":"Survival Kids 2 - Dasshutsu!! Futago-jima! (Japan) (Rev 1) (Possible Proto) (SGB Enhanced, GB Compatible) (NP)","0a74ef0fa7d01b8bc4e2042aa442be37":"Mingzhu Koudai Guaishou 2 (Taiwan)","0aa1877a6a6dd4c8230fabada9ea9249":"Pachipachi Pachisurou - New Pulsar Hen (Japan) (SGB Enhanced) (GB Compatible)","0af54be680b772a9ffc3afea54a1540c":"Laofuzi Chuanqi (Taiwan)","0b23d35e7bf1f136df8a7c8f24103dfc":"All-Star Baseball 2000 (USA, Europe)","0b2ab6c8ee77d7dc6856ebffcfeb9c43":"Armorines - Project S.W.A.R.M. (USA, Europe) (En,De)","0b943efdf2ca967827a4c7bf951f6448":"Dracula - Crazy Vampire (USA)","0bb519a09c675a797f422305115b49cc":"What's Updog (World) (GB Compatible)","0bca44a4fd79e417b14043985ed35223":"Koudai Guaishou - Dongzuo Pian (Taiwan) (En)","0bfac235a5bd9cd57d7b3e7e83993458":"M&M's Minis Madness (Europe)","0c0cd721044c7c91d32ed704564e6fe4":"Legend of Zelda, The - Link's Awakening DX (USA, Europe) (Rev 2) (Beta) (SGB Enhanced) (GB Compatible)","0c1c350ce431ace4328c0e935fa2f41b":"Snow White and the Seven Dwarfs (USA)","0c20aaf67ec47d173d7442370cc24237":"Love is Dead (World) (Proto) (GB Compatible)","0c648f3fa64646119cc811916f7e89cf":"Stars of Zureon (World) (Proto 2) (GB Compatible)","0c661268d0b50d287658ed4d3693185b":"2002 Digimon Adventure 6 (Taiwan) (En)","0c6a0f2add131ca4afd24763fe3c3a04":"Dragon Dance (USA) (SGB Enhanced) (GB Compatible)","0c80cbbae8650152fba0278350bd0bd4":"European Super League (Europe) (En,Fr,De,Es,It)","0ccc5cd15a646417efb5fa9ea920fce3":"Harley-Davidson Motor Cycles - Race Across America (USA)","0cd10acb3c569faecd01b9ced51021b2":"Maus, Die - Verrueckte Olympiade (Germany)","0d235e7826dbe74294a02ba07af1d6b1":"Infall (World)","0d3ff80b66de9c5d6ba7178c1175f3eb":"Grimace's Birthday (World) (v1.2)","0d4f6b00b4a1b047ef13a91537f7314a":"Barbie - Ocean Discovery (United Kingdom) (GB Compatible)","0d7bca4e08d522493491484896f7f3cc":"Towers - Lord Baniff's Deceit (USA, Europe)","0d8cd9b749af9f5e8463cf3f48b36090":"Hype - The Time Quest (Brazil) (En)","0d9dbb213db66cc0121a7f916181f612":"Madden NFL 2001 (USA)","0db5276e6a52112bcb71dd20f4f39782":"Konchuu Hakase 2 (Japan) (SGB Enhanced) (GB Compatible)","0dbdfc5a0537761525295054816b8e49":"Zork + Harris (World) (v0.0.1.0) (Proto)","0ddb1e2111a510557484f942ac78b915":"102 Dalmatiens a la Rescousse, Les (France)","0dea429ba947a0264b481eafc180d3d2":"Shuma Baolong Zhuanji 10 in 1 (Taiwan)","0df21ba45a2c6edfab393ef5f22c95fe":"Flooder (World)","0e11915bab69cc3b5aaa3473784f03ee":"VIP (Europe) (En,Fr,De,Es,It)","0e13c1506562050ab39bc7d0fcd41ecf":"LEGO Racers (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)","0e31b2dcde31c590a0835b22f653fd2d":"Scrabble (Europe)","0e63965664df3bf3217254a22422cc86":"Densha de Go! (Japan)","0e68060f26f64257bcae0b1e820e5e4e":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (Beta) (SGB Enhanced) (GB Compatible)","0e96876b9e69f491b4e9c2e17c56b64f":"Water Grandprix (World)","0eb0f4252ff90cb26eda0be680c998bc":"Ronaldo V-Football (Europe) (En,Fr,De,Es,It,Nl,Pt) (GB Compatible)","0ed5b9ffe7ad90d819cac810d05b669c":"Alice in Wonderland (USA, Australia)","0ed716a57524307533df8568aeae8f7f":"Agency (World)","0ee28078d6270df663647e8a3e3feaf6":"Pocket GT (Japan)","0f3161b9427b5540ff20f0d793a5d047":"Gift (Europe) (Rev 1) (Proto)","0fc64c4aee8aa7a11ed80c4e93f63f47":"Shelly Club (Europe) (En,Fr,De,Es,It)","0fe226f5b7a3da7d3f16b0ba42030b52":"Tank Attack (World)","0ff2e1d40bb0405e6a2506f75c90ea83":"Shin Megami Tensei Devil Children - Kuro no Sho (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","0ff9df46aca45161d1dfa7eee8509c1f":"Harvest Moon 3 GBC (USA)","1020159b01e4ca5bdc8f24d936b50c93":"Spiky Harold (World)","102a290e0711214484555de2176e565c":"Street Hero (Taiwan) (En) (1B-004, EB-004, Sachen)","1043fd167d0ed9c4094e3c9d8e757f1e":"Legend of Zelda, The - Link's Awakening DX (France) (SGB Enhanced) (GB Compatible)","10d0c091687c830645aad567d152b1d6":"Wacky Painter (World)","10e6dcd0a350076e28b9c598c278b6a2":"Pop'n Music GB (Japan)","10f2d0b87916ac5730065cfb52f3ffce":"PaZeek (USA) (Proto)","10f986c4dfa323b42125ccbb8ec9c8ba":"Nyghtmare - The Ninth King (World) (Rev 1) (Free Version)","1134862e84110443190df460351d4575":"Pokemon Card GB 2 - GR Dan Sanjou! (Japan)","11454ce5a4ad703c29b3a8bdc8b5c3ab":"Mission - Impossible (USA) (En,Fr,Es)","1163e25d9985d8e5c3544449150f4f46":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (GB Compatible) (Alt)","117a9babae15960dc4de04ac44066ed2":"Scooby-Doo! - Classic Creep Capers (USA, Europe)","11893f422bcfe26e22889a0fcdf61547":"Medarot 5 - Susutake Mura no Tenkousei - Kuwagata (Japan)","11d3ca80ad24431babbec7a675d83bed":"Deer Hunter (USA)","1215ac977a4cea023bd98cbb7bd36591":"Mr. Angry (World)","121cec82c0c9e7c476060ad2521739d4":"Harvest Moon 2 GBC (Germany) (SGB Enhanced) (GB Compatible)","128dc75244ecc2f74d1e50551d888127":"FIFA 2000 (USA, Europe) (SGB Enhanced) (GB Compatible)","12d8b6827053a17b8301efeb1586c83f":"Jimmy White's Cueball (USA) (Proto)","12da69d04e8121535565f725adcb6848":"Digimon Amethyst (USA)","12e82cb028ed40cdc0c80b2d2e3cf0cb":"Animorphs (USA)","12f80e19c03b5530545929d50fca8d8f":"Qilongzhu Z3 (Taiwan)","12fe2ee088f622e090cb9c528fe0ec49":"Shuma Baolong 02 5 (Taiwan)","132ab194cd0332a61f3db66084f6dc4e":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (Beta) (SGB Enhanced) (Alt)","137590affd2da2f275b87b412d6f0c7d":"Cave Fighter (World)","1383da42b08bf94b6fad381cada66fad":"Rugrats Movie, The (USA) (SGB Enhanced) (GB Compatible)","138add8906346eaf244e8e7ed79ec42a":"LNF Stars 2001 (France)","138ee068183a17684ca3aacfc1e3e38e":"Honkaku Shougi - Shougi Ou (Japan) (SGB Enhanced) (GB Compatible)","139334587db40e73f0cadcb06ca0ce61":"Goraku Ou Tango! (Japan) (GB Compatible)","13a64aee80ad9a5b65eb5774e6aeabed":"Deisanebe (World) (GB Compatible)","13b960d82856078a62f012fa3183697e":"Zone Control (World)","1405c2c436255d0d5c901bf6d64f68a1":"Yars' Revenge (USA, Europe) (GB Compatible)","14158554a3d0743a668cd56070bc1ef9":"Berks (World)","14198133e23ad092960197223f199b43":"Shuma Baolong 3 (China)","144ab8295663f4dc4bcd810c5cdafe60":"NASCAR Racers (USA)","144f958f655909c047331473275fd525":"Robo Knight (World)","144fc4636fcefbd56d906505f5308da1":"Spirou - The Robot Invasion (Europe) (En,Fr,De,Es,It,Nl,Da)","1453eaee1c4c0197b2feed653e5ff342":"Casper (USA) (Rev 1) (Proto)","145a22d327cc23d0c7f85c62fc46de77":"Jissen ni Yakudatsu Tsumego (Japan) (Possible Proto)","146bc8912c207c200535b84c5acfb06a":"Babe and Friends (Europe) (En,Fr,De,Es,It) (GB Compatible)","1473fa5d4a50760dbdb45cc1232c8b4b":"Tarzan (Japan)","1487948f044a16e9ac9d8aa740f87827":"Purple Turtles (World)","14889eccdacd80ce70fc88a74a216fa6":"Heroes of Might and Magic (USA) (En,Fr,De) (Rev 1) (Proto)","149073afd1cf8ae83783143a166592f7":"Godzilla - The Series (Europe) (En,Fr,De) (GB Compatible)","14bb0a822dfea564358a99378186141f":"Sewing Machine Operation Software (Europe) (En,Fr,De,It) (GB Compatible)","14bfce85af0ae19affbdcef23a9d6baf":"NBA Jam 2001 (USA, Europe)","158691457cb7365cafbd0b7bb230fadf":"Shin Megami Tensei Devil Children - Kuro no Sho (Japan) (SGB Enhanced) (GB Compatible)","158d9834bdb7be79dbfcafcdc3d347aa":"Lord of the Rings, The - The Fellowship of the Ring (Taiwan) (En)","15b3cbe9a6ffd5b7c5047764798ea911":"Reservoir Rat (Europe) (En,Fr,De,Es,It) (GB Compatible)","15bedc4919965732cbfb301f11e5b36a":"Doraemon no Quiz Boy 2 (Japan)","15f4df0efe9f42cbaaac09c866cbfd21":"Hello Kitty to Dear Daniel no Dream Adventure (Japan)","161d839487a5b618c50eeb95b839ac8c":"Postman Pat's Trail Game (World)","1624f857098ca278b15629914f48352b":"Magi Nation (USA)","1625b54bab62ff4d7f6878e76c5d09c7":"Capybara Quest (World) (v1.2) (GB Compatible)","1633bec4cabec857c0ec67c99d2f982b":"Pokemon Card GB (Japan) (SGB Enhanced) (GB Compatible)","16345f768a34b18b8c072c71bc32e2fa":"Pocket no Naka no Oukoku (Japan) (Proto)","163859b2468b5ad697236ffb5a6765be":"Denki Blocks! (USA) (En,Es) (Proto)","1639e77b02227d996f17ff5bec16c1b8":"Honkaku Yonin Uchi Mahjong - Mahjong Ou (Japan) (SGB Enhanced) (GB Compatible)","163f99c456c8fd8936e91586356af1c4":"From Below Pocket (World)","164c4fcfe733d89fff3ddc42b017c5ca":"Looney Tunes Collector - Alert! (USA) (En,Fr,Es)","165550e557314f88decd95a7409a24ce":"Le Mans 24 Hours (Europe) (En,Fr,De,Es,It)","167e663a1ce00e6a510dd8257fa36a48":"Hyper Olympic - Winter 2000 (Japan)","168ae412b379786f7df07bd8231baf44":"Mortal Kombat 4 (USA, Europe) (SGB Enhanced) (GB Compatible)","16bb3fb83e8cbbf2c4c510b9f50cf4ee":"Wario Land 3 (World) (En,Ja)","17138240c26791c06d557094d0a4d1f5":"Pro Mahjong Tsuwamono GB (Japan) (SGB Enhanced) (GB Compatible)","171ccc606b9753de51e50c93f7c3a986":"Tir Na Nog (World)","17233eaf718e241f290d6590ef1b42a9":"Lil' Monster (USA) (SGB Enhanced) (GB Compatible)","173a37c4d4aae04766aa0abbf385233d":"Jungle Book, The - Mowgli's Wild Adventure (Europe) (En,Fr,De,Es,It)","1757723cf346be2cea58d0fc4ed4cfa9":"Bomberman Max - Red Challenger (USA)","1767860f9fc19eb7da610616c1a35b89":"Guruguru Garakutas (Japan) (SGB Enhanced) (GB Compatible)","178ea5a9eba6e7f35e894bad1ec34f77":"Return of the Ninja (USA)","17b6ec4af44d74be1a29b2ff2c0516dc":"Mojie Zhanshi Chuanshuo (Taiwan)","17dae7ec46263600c54687d78b582e5e":"Galaga - Destination Earth (USA)","17efe835f748353dfeb4b76737b1aaeb":"Inscryption (World) (v0.5)","184f5d0fbb190ae2d7242e0a7ec4a407":"Maya the Bee & Her Friends (Europe) (En,Fr,De) (GB Compatible)","18584e6b6f2e8a2cedf9ead60f51ad27":"Xin Guangming Yu Hei'an 2 - Zhushen de Yichan (Taiwan)","187e24e1a76eede2853755760dee5108":"GB-Memory Multi Menu (Japan) (SGB Enhanced, GB Compatible) (NP)","18b2c4989209373c0cba9bc58075b2fd":"Ganbare Goemon - Tengutou no Gyakushuu (Japan) (GB Compatible)","18c5ddde4bcffd1ddcba490eb529f0d7":"Hugo - The Evil Mirror (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da,Fi)","18d309e72aba521f792249f8ca0df5da":"F1 Championship Season 2000 (Brazil) (En,Fr,De,Es,It)","18e83737127010b90aa8ea4d3982b461":"Prince of Persia (Japan) (En,Ja) (Proto) (GB Compatible)","18eca52a51880410614cfc4ad65ee34c":"Hamster Paradise 3 (Japan)","1913a2173775a0c799683c74a80cdebb":"Where's My Cake (World) (GB Compatible)","192aec8dca7656463be56991f497cff3":"Dracula - Crazy Vampire (Europe) (En,Fr,De,Es,It)","193f103b57f5861b55524644badb4ecd":"Dukes of Hazzard, The - Racing for Home (USA)","195b6daf6b2a3e28ab7a61170a7d7833":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (Beta) (SGB Enhanced)","19601e4fc1f7084076128dca0182f5a7":"San Francisco Rush 2049 (USA, Europe)","196ce465a2e60ebfa68f377577e6b4aa":"Disco Elysium - Game Boy Edition (World) (Music) (GB Compatible)","197ab41791e0e0112ade85ed9fdbdef3":"Postie (World) (GB Compatible)","19b1085c7c17a8123a7ec59f4033e92c":"Yu-Gi-Oh! Duel Monsters 4 - Battle of Great Duelist - Kaiba Deck (Japan)","19b640026da40602272559d1ed35bbba":"Bob the Builder - Fix it Fun! (Europe) (En,Fr,De,Es,Nl)","19cd9d45c6bb221613101b22c72593b2":"Batman of the Future - Return of the Joker (Europe) (En,Fr,De)","19de85b3b8aabc3cbde67e20c7ae2925":"Princess Poffin and the Spider Invasion! (World) (GB Compatible)","19dfb14a0d31742f02bfa101d5054169":"Gekisou Dangun Racer - Onsoku Buster Dangun Dan (Japan)","19e0d71a2a6090e0f59607ca4da9b156":"Doug's Big Game (USA)","19fb34b63e864a72e26073f8e7e7ed01":"Mr. Driller (Japan) (NP)","1a0aac7a746e247879d6b970bf9a9f32":"Kikansha Thomas - Sodor-tou no Nakama-tachi (Japan)","1a787c328c66eea5a2b920b7c205b231":"Laura (Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","1a9cb5a60485e19b809c2f476eff190b":"Octopus Stressus (World) (GB Compatible)","1abb25d01dbeb20f104e44364f56fe03":"Pocket Monsters Gin (Japan) (SGB Enhanced) (GB Compatible)","1af296894ba86bfe2f51e2ff7cac9fc7":"Yu-Gi-Oh! - Dark Duel Stories (Europe) (Beta)","1b2190911db606dce58d694e8b591e69":"Austin Powers - Welcome to My Underground Lair! (USA)","1b3092e1bbc29223eaaa4ea09066bdbd":"Runelords (USA) (Proto)","1b543c5d0263730a3b862a02bb46f9a1":"NBA Jam 99 (USA, Europe) (GB Compatible)","1b5e155ac68d2c7b89e49c5e1024b45c":"Trouballs (USA)","1b761f9ef23eb90d34085dd5eca02386":"Flashin' (World) (v3.0) (GB Compatible)","1b8671a31a0c30a62eef62ddb4bf915f":"Snail DX, The (World) (GB Compatible)","1b9515262a8a57ef1366bed635c604e4":"Gorf the Ghost Saves Halloween (World) (GB Compatible)","1ba7a470a32664d5f68f4310680d8426":"Tweenies - Doodles' Bones (Europe) (En,De,Es,It)","1bf7c941e9d9fb2d34b51e142f3db5e4":"Gifty (Germany) (En) (Rev 1) (Proto)","1c146ce4743c94923843f6aa07a15a47":"Turok 2 - Seeds of Evil (USA, Europe) (En,Fr,De,Es) (Beta) (GB Compatible)","1c1f455209d6400eb3c7c091f6608723":"Hamster Paradise 4 (Japan)","1c2cb80c83747edf5988b1b0c782ecf0":"Snail DX, The (World) (v1.2) (GB Compatible)","1c3d719f529c1bf57b5b798fc1f3bfe5":"Qix Adventure (Japan)","1c7355ed58daf1ebcceea71ba5cbb694":"Game Boy Gallery 3 (Japan) (SGB Enhanced) (GB Compatible)","1c9f1847ae4832bdd53f39968750d505":"Harvest Moon GB (Germany) (SGB Enhanced) (GB Compatible)","1ca6579359f21d8e27b446f865bf6b83":"Dragon Warrior Monsters (USA, Europe) (SGB Enhanced) (GB Compatible)","1ccfd8413570d63a3ed3fa9910a394b4":"Fushigi no Dungeon - Fuurai no Shiren GB 2 - Sabaku no Majou (Japan) (BFWJ)","1cdc49e8f8340c2ce27fd3f5cdd3d618":"Austin Powers - Oh, Behave! (Europe) (En,Fr,De,Es,It)","1cfa8223f124f56cca9c8bc2c661a21d":"Bundesliga Stars 2001 (Germany)","1d0044523075ab0308c598286f804402":"Nicktoons Racing (USA)","1d09181e1608bb4cbb77c127d27feb19":"GB-Wordyl (World) (En) (GB Compatible)","1d0dc8faa066d6f4948ce6ffdee22f41":"Dragon Ball Z - Legendary Super Warriors (Europe) (Beta) (All Unlocked)","1d0ea47375fca723c0f86a5178e545f3":"LEGO Island 2 - The Brickster's Revenge (USA) (En,Fr,Es)","1d2166a2a98aee87882cc8d670f23a23":"AMF Bowling (USA) (Proto)","1d3031ff4a17adc04f05672a37fc0030":"Magical Drop (Europe) (En,Fr,De) (Beta)","1d31fa1e431ec840e5f769fdd019405f":"Looney Tunes - Twouble! (USA) (En,Fr,Es) (GB Compatible)","1d535aac30b714e3ad5eccf17025ece2":"Doki x Doki Sasete!! (Japan)","1d719dffbdeff72d4b8f8744ddcbf9d5":"Little Mermaid II, The - Pinball Frenzy (Japan) (Proto)","1da7187971155f0aed9ffea798f6e2a6":"Flipper & Lopaka (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)","1dddf21bcc96c84a9294bdb411a49728":"Doraemon - Aruke Aruke Labyrinth (Japan) (GB Compatible)","1de0f866b907c8daff2999790ead45a8":"Spider-Man 3 - Movie Version (USA)","1de3aa6275844a8957c88d75dcc5ad09":"Watashi no Restaurant (Japan) (Beta 1)","1e062837d15d5e4e43bb2253207115ae":"Dave Mirra Freestyle BMX (USA, Europe)","1e29b4f3a9899a88fdcaefa73fcb565e":"GB-Wordyl (World) (Es-XL) (GB Compatible)","1e67314232e073b75f092f058078074d":"Hyper Olympic Series - Track & Field GB (Japan) (SGB Enhanced) (GB Compatible)","1e842a5c2f90bf6e476b08da5333963d":"Keibajou e Ikou! Wide (Japan) (GB Compatible)","1e90fa6dab5d51a09f0f6134c96efa08":"Super Doll Licca-chan - Kisekae Daisakusen (Japan)","1ebdce25ed0e2607059d7d09530d4a7e":"Real Pro Yakyuu! - Central League Hen (Japan) (SGB Enhanced) (GB Compatible)","1ee701313c509947d7e9ce0e54a85cb3":"Dragon Quest Monsters - Terry no Wonderland (Japan) (Rev 1) (Possible Proto) (SGB Enhanced) (GB Compatible) (Alt)","1f0e9da07447de982bc0fbc0eb3a5d24":"Doraemon Memories - Nobita no Omoide Daibouken (Japan) (GB Compatible)","1f1fb3cf8783f880bc796d667be60231":"007 - The World Is Not Enough (USA, Europe)","1f3c312776b7010204ca1cf723f084ba":"Capybara Quest (World) (v1.1) (GB Compatible)","1f64989765f605d05cbd013e7ffcc352":"Mega Man Xtreme 2 (USA, Europe)","1f669fbc8f7dd8fee1afee6052a807d4":"Data-Navi Pro Yakyuu 2 (Japan)","1faa6e2a7ec92b95ce32fa2682038b9b":"Asterix - Sur la Trace D'Idefix (Europe) (En,Fr,De,Es,It,Nl)","1fc58f4e3a2437f4c20c9812162797d8":"Missile Command (USA) (Rumble Version)","1fd75c2b798c04acd4b99ad2f1006280":"Super Mario Bros. Deluxe (USA, Europe) (Rev 1)","1fe2a6ec9deeb9b4db56f003fa3c4edb":"Yuenan Zhanyi 3 (Taiwan)","1ff9b71a347a7deed87bcedeb7c5ea70":"Lufia - The Legend Returns (Europe) (En,De)","20052c527795a4f332be14aff49d4d4b":"Smurfs Nightmare, The (USA)","20102abb2a331ff4cc101d3513c891cd":"Kinniku Banzuke GB 2 - Mezase! Muscle Champion (Japan) (SGB Enhanced) (GB Compatible)","2011b57a6d279eed5c9412ef309fb6e2":"Luke Yingxiong Chuan 3 (Taiwan)","2022ae2cb1bbd83edefa3a5bdf2a2b72":"NFL Blitz (USA, Europe) (GB Compatible)","20291bd45093d28b32358527eb9611c5":"Pachinko CR Mouretsu Genshijin T (Japan) (GB Compatible)","207fe7e94f56f9ee85f12bbba56774d2":"Snoopy Tennis (Europe) (En,Fr,De,Es,It,Nl) (Beta)","2082a3c919f07c076aa7de6363544536":"Cyborg Kuro-chan - Devil Fukkatsu (Japan)","20a1cba7bc19e9dd5165324de608478d":"Legend of Zelda, The - Link's Awakening DX (USA, Europe) (Rev 2) (Beta) (SGB Enhanced) (GB Compatible)","20b1ed1ae966b173c3a0f7f7f267e408":"Tokimeki Memorial Pocket - Sport Hen - Koutei no Photograph (Japan) (SGB Enhanced) (GB Compatible)","20bcf9a299d0f8de3c36f01c16813162":"Card Sharks (USA) (Proto)","211031be4f99f69bfd8dfacc2b148d7c":"Shinseiki Evangelion - Mahjong Hokan Keikaku (Japan)","215988e7a70cfbd0f45fe5c247ee0c55":"Bob the Builder - Fix it Fun! (USA)","216cb5875de8fc71d04f7378592bf782":"Kaseki Sousei Reborn II - Monster Digger (Japan) (SGB Enhanced) (GB Compatible)","219538abd16cecadee98ab57c7069376":"Ready 2 Rumble Boxing (Europe)","219b2cc64e5a052003015d4bd4c622cd":"Pokemon Trading Card Game (USA, Australia) (SGB Enhanced) (GB Compatible)","21ae960e6c5a42b498b00fa6f635b1e1":"Fort Boyard (Europe) (En,Fr,De,Es,It,Nl,Pt)","21bbb6dceb4a367431779873f6162ced":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (1998-07-05T180056) (GB Compatible)","21c2dd91ae2d46c006c00caca96d2b6b":"Bad Badtz-Maru Robo Battle (Japan)","21d38c37d8e01a27f8635bb9f5f315cd":"Woody Woodpecker Racing (USA)","21d99fb62922e3538c0b11749a7db8e4":"Barbie - Chasse au Tresor Sous-Marine (France) (GB Compatible)","2206b879b38982ed995cdcbc927b7ba2":"Magi-Nation - Keeper's Quest (USA) (Proto)","221a0e464f5f0c3d38494939b1765a24":"720 Degrees (USA, Europe) (GB Compatible)","221d3b96df7d86291b553a7cb4702dec":"Mickey's Racing Adventure (USA, Europe) (En,Fr,De,Es,It)","222aa591b387a4b897b61961ebeb9fdb":"Estpolis Denki - Yomigaeru Densetsu (Japan)","227444a8cc81dc579ba4fb76c9cb8b46":"Dogz (Europe)","2295f4ef94f9b9a21dfc04259ab6d7bf":"Warp Coin Catastrophe, The (World) (v1.1) (GB Compatible)","22afe691095c65f34aeaba3c283b2a9c":"Donkey Kong GB - Dinky Kong & Dixie Kong (Japan)","22d11b8d9670fb9b4ca84368f0f50cee":"Animal Breeder 4 (Japan)","22e12363382896071703644153c720ca":"Android Nim (World)","2348ea9e0c1041610115443165cf8f4f":"TOCA Touring Car Championship (USA, Europe)","23627de756d221f4093812a5e5f42623":"3D Quasars (World)","237662ab7a441de5042f347342c6080b":"Bibi Blocksberg - Im Bann der Hexenkugel (Germany)","2376c643827d665e9883ffd1b5ac5b37":"Battle Fishers (Japan)","2382edc04a323a227ea793e33c749c79":"Original Moorhuhn Jagd, Die (Germany)","2384dde5403894419de9c14648491da8":"Super Bunny Mission (World) (GB Compatible)","23eaa037089df79a1f54aa0604e34146":"Xin Shiqi Shidai (Taiwan)","2400e6b73383221778c0d83eb0a1ebd4":"Trick Boarder (Europe)","2425abdecfa70713b2671299d6a45751":"Razmoket, Les - Voyage dans le Temps (France)","243b2b6151d41d8e111e98ac49ba9ab4":"Sutte Hakkun GB (Japan) (Proto) (SGB Enhanced) (GB Compatible)","244d1a147f0922f2842206a496163a8f":"Don't Forget About Me (World) (v1.2) (GB Compatible)","24590d82da1c0d40b5d4f8e03e4cca94":"Nakayoshi Pet Series 4 - Kawaii Koneko (Japan)","245c759effda3cf83e2caf274c93c8aa":"Bokujou Monogatari 2 GB (Japan) (GB Compatible)","246526c5a9dd42e6bf8d35708ca24ee9":"Little Nicky (USA)","24676139e29d846bfa48df4885382b79":"Adventures in Carnal Hell, The (World) (Ja) (v1.01) (GB Compatible)","248d3000422e0de6c76b46a6314a762a":"Space War (World) (Proto) (GB Compatible)","24cf64cd73a98125fe476b8488054361":"Raku x Raku - Mishin (Japan) (GB Compatible)","2547fcbdd97aa7acc4ad9eff8aa028f0":"Tezhong Budui 2 - Jidi (Taiwan)","2565fdadfb12b92b60b535cec6492041":"NHL 2000 (USA, Europe) (SGB Enhanced) (GB Compatible)","256a0d39a400543b667991e45327d0dd":"Lee Carvallo's Putting Challenge II (World) (v1.0) (GB Compatible)","2582e7e452e897c0017db4f520afc89f":"Mega Memory Card (USA) (GB Compatible)","258b7b8e4692d4204df470487ef2fc3d":"Powerpuff Girls, The - Bad Mojo Jojo (USA)","25ad12b8d2436d520057f12253f2d37d":"Tokimeki Memorial Pocket - Culture Hen - Komorebi no Melody (Japan) (SGB Enhanced) (GB Compatible)","25b8e4d2aa1e09bbd5e68adcad582b84":"GB-Wordyl (World) (It) (GB Compatible)","25bd0ec7f8959a9a29c4af3c7d6fddde":"Kawaii Pet Shop Monogatari 2 (Japan) (GB Compatible)","25f20cdc0f6f70d0bc5430a9b0d48742":"Beatmania GB 2 - Gotcha Mix (Japan) (SGB Enhanced) (GB Compatible)","264d3c43bf615252c32370b5b0613c78":"Grimace's Birthday (World) (v1.7)","26508069768cb23f6fc03a33f8d4cf43":"Uchuujin Tanaka Tarou de - RPG Tsukuru GB 2 (Japan)","2650d134dd6de865c8c8dbf5a5a385a4":"F.A. Premier League Stars 2001, The (Europe)","265de745b9b6c8e84e02acbf80d0428e":"Alice in Wonderland (Europe) (En,Fr,De,Es)","26694d3e30613facaaede614ab278224":"Shuihu Zhuan - Jingdian Ban (Taiwan)","2692494cef091b908b02c9046bdd876c":"Catwoman (USA)","26b03c986238c85bda3ed8954115aa39":"Monster AG, Die (Germany)","26c14f848115af6246b8f514fbeb6dab":"Animastar GB (Japan)","2759a17974aa716d3db2cc015cda3ab4":"Looney Tunes Collector - Martian Alert! (Europe) (En,Fr,De,Es,It,Nl) (Beta 2)","275f5e929448bb3ad89bf8981cc64620":"San Guo Wushang 5 (Taiwan)","27791ff8bb7993ebba8c8f2cf353a6b3":"Dragon Tales - Dragon Adventures (USA)","27881df91cfc52d1671e469f46475d8c":"Puzzle Bobble 4 (Japan) (GB Compatible)","27a104cc72d91dfcf0adfdfb172e6c21":"Koudai Guaishou - Feicui Ban (Taiwan)","27a66754bf8efafdfe3a79cad234ff17":"FGB (USA) (Proto)","27aaeb747ed1e125582729ba82fe8c28":"Pro Pool (USA) (En,Fr,De) (Beta)","27ce588e0569efa0eb0b8e80049e7edb":"Worms Armageddon (World) (Limited Run Games)","282b0d8ada4a2e44846adc732876f7d3":"Astral Possession (World) (GB Compatible)","283f309103b578c04b1fd5fdb903eb50":"King of Fighters R2 (Taiwan)","2864c52d74320121bc8603e61f7dce64":"Jet de Go! - Let's Go by Airliner (Japan)","286b53aa6f97e97a8d2c26801c8b2e91":"Gem Gem Monster (Japan) (SGB Enhanced) (GB Compatible)","28b5114313b8abc43a31ea40aa91cf52":"Soreike! Anpanman - Fushigi na Nikoniko Album (Japan) (SGB Enhanced) (GB Compatible)","28b7a4941e28a3cbf7d4d72c907727a8":"2003 Gu Huo Lang II (Taiwan)","28d6c613fdf608fe241fb3ce183aaae5":"Turok 2 - Seeds of Evil (USA, Europe) (En,Fr,De,Es) (GB Compatible)","28dd8318bd521b42243af4546062ecab":"Barbie - Aventura Submarina (Spain) (GB Compatible)","28ee7dec336a5742a99fd4d7dda0d001":"Chromanoids (World) (v1.0)","2907913cff34c68b9078e12e7d4fcf78":"Cave Hunter (World) (GB Compatible)","296a232c36d6457301fd8ab9d9e35290":"Golf Ou - The King of Golf (Japan) (SGB Enhanced) (GB Compatible)","29888963f3a224d0da5f65d4f32d1bcf":"Digimon 2 (Taiwan) (En)","29c545699436ab55ef3f801d9c4498b0":"Boku no Camp-jou (Japan)","29deff80e9e8d734f77d8590ac5cdce9":"Adventures of the Smurfs, The (Europe) (En,Fr,De,Es,It,Nl)","29f236dd1a64c15a7c1f66110579ccc3":"Hello Kitty's Cube Frenzy (USA) (GB Compatible)","29f2b4c6d1f163f728e79f9c7400e016":"Jay und die Spielzeugdiebe (Germany)","2a147b2d7731ac26a999390c3f5ff2ac":"Dexter's Laboratory - Robot Rampage (USA, Europe)","2a1efef6d25431529b0d2f5063f63a17":"LEGO Island 2 - The Brickster's Revenge (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)","2a26b9d248bf62788e23aa897e8e355c":"Woody Woodpecker (USA)","2a2c1bd906639a49750541fe06489b9e":"Xin Fengkuang A Gei Pao Pao Tang (Taiwan)","2a3a4d83902ee2af1890433c50d2809c":"Carl Lewis Athletics 2000 (Europe) (En,Fr,De,Es,It,Nl) (Beta)","2a447279016f60776b5c0f515b5b97f5":"Force 21 (USA) (En,Fr,De)","2a4f3309fe05b47a98d8c5b4c81b91e5":"Simpsons, The - Night of the Living Treehouse of Horror (USA, Europe)","2a63a02445ba22960be3e23fb36607d4":"Wayfarer Boo - Pushing Through (World) (v1.0)","2a65d5c037463fe93127d45d4145a0a6":"102 Dalmatas - Cachorros Al Rescate (Spain)","2aba33e89caca45c9091b25a276dd4c6":"Austin Powers - Oh, Behave! (USA)","2ac166169354e84d0e2d7cf4cb40b312":"Pokemon - Silver Version (USA, Europe) (SGB Enhanced) (GB Compatible)","2acefe79c9813460f0cc80c45d73d0ff":"Rampart (USA)","2acf3b5fb6a9cf4c8194bbadce34aee7":"X-Men - Wolverine's Rage (Europe)","2ad76236e7ea4f655d7d36f3c504ec5e":"Super Nenas, Las - El Malvado Mojo Jojo (Spain)","2adf26f87be3d5e56261d173e74ec4f5":"Tonka Construction Site (USA) (Beta)","2ae0c6e8f9831d6e8f1abac86b01e7d6":"Heroes of Might and Magic (Europe) (En,Fr,De)","2ae37c8a0c3383d43ccbff9831bef5e3":"Meiji Jingu (World)","2b0ad9175fa23c2e278e2174d08df821":"Towers II - Plight of the Stargazer (USA) (Proto 1)","2b55508c1568411d22520fbed55d85f3":"Ruby & Rusty Save the Crows (World) (Beta 1) (GB Compatible)","2b77458ef761618d869eb1713d567aa4":"Tokoro-san no Setagaya C.C. (Japan) (GB Compatible)","2b7e2442d503ce368fc93a9ebf0f70ef":"102 Dalmatians - Puppies to the Rescue (USA, Europe)","2b8b271eae1f3b2e5b3053b22273fa44":"Grimace's Birthday (World) (v1.3)","2b9550a221d829a96e1688fc177cc5c2":"Mingzhu Koudai Guaishou 3 (Taiwan) (En,Es,Zh)","2bb74ace01cabe5d71dfcc329179b4ae":"Little Magic (Japan)","2bbdceb8fa952ff7f5e716532f0c32af":"Tiledentity (World) (v1.1) (GB Compatible)","2bcdaddb7d3b88d6101a652bf86f8071":"Digimon Adventure 2001 (USA)","2bef878c35f3553772634f1b1f212005":"Pokemon Sapphire (Taiwan) (En)","2c03cc138be009ed83f036f919ff8f0a":"Power Pro Kun Pocket 2 (Japan) (SGB Enhanced) (GB Compatible)","2c1ae21f8e8e3d3e4b83bba084719c59":"Bounced! (Europe) (Proto)","2c56bdce336b543de4653a493b870481":"Extreme Ghostbusters (Europe) (En,Fr,De,Es,It,Pt)","2c74082758017e30990e30b145c2f841":"X-Men - Mutant Wars (USA, Europe)","2c7601475b1a252f461811072f70ba8f":"GB-Wordyl (World) (Fr) (GB Compatible)","2c8f92ea472fb0dba87b45e9e580a84a":"Jagainu-kun (Japan) (GB Compatible)","2ca1d1dd8b0dccfb129d31987ed81e5f":"Nintama Rantarou - Ninjutsu Gakuen ni Nyuugaku Shiyou no Dan (Japan)","2cb6bc70fb6a25e988ba4ebba7f769d8":"Karamuchou wa Oosawagi! - Polinkies to Okashina Nakama-tachi (Japan) (SGB Enhanced) (GB Compatible)","2cbb69bd1cda0e7cc186f94b5e161bfd":"Fishing for Asteroids (World) (v1.1) (GB Compatible)","2ccd7a904115b2a96c8b398a142854e2":"Dragon Dance (USA) (Beta 1) (SGB Enhanced) (GB Compatible)","2cd0ad9218bec430085d48e1d4530bba":"Tales of Monsterland (World) (v2.83) (GB Compatible)","2cdd3d78009afdad0a49ded398ff17c9":"Zen-Nihon Shounen Soccer Taikai - Mezase Nihon Ichi! (Japan)","2d0f5d19ea73ccb9cfec6398eb2f70b8":"Tom and Jerry in - Mouse Attacks! (USA) (Rev 1)","2d2a8314f789d490bf83ed3c44538fe3":"New Addams Family Series, The (Europe) (En,Fr,De,Es,It,Pt)","2d52664ee85f0192738fff0b53d4fe20":"Golf King (Europe) (En,Fr,De) (Proto) (SGB Enhanced) (GB Compatible)","2d78683c17765bd98e1c9ccce14b7bba":"EuroSport Pro Champ Fishing (Europe) (Proto) (GB Compatible)","2d7d0adcec6f72ca0755862c5fddf353":"Turok - Rage Wars (USA, Europe) (En,Fr,De,Es)","2d83fb454dd5687a802425c501854dc2":"Pokemon - Edicion Plata (Spain) (SGB Enhanced) (GB Compatible)","2de587b4e14baec8df62ea4c4f43cc46":"Croc (USA, Europe) (Beta 1)","2dfcacff86b06540d528447c21531b46":"Luke Yingxiong Z (Taiwan)","2e02bfbf1aa3f26024480ab8e33ee052":"Pomape Castle (World) (GB Compatible)","2e20e9cbff75913f4e123242a404a2a9":"Halloween Racer (Europe) (En,Fr,De,Es,It,Pt)","2e2596c008d47df901394d28f5bd66ec":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (SGB Enhanced) (GB Compatible)","2e3288d0d0b41d6fcc6bec6676a78a3e":"Ferret Monogatari (Japan)","2e6c427203c660a60849efecc1eaca8c":"Stratacombo (World) (v1.0) (Proto) (GB Compatible)","2ea86780d4b6b9220db59df7c6afff4c":"Star Hunt (World) (GB Compatible)","2ebf6f830013d8702eebf93955db52d5":"Bugs Bunny - Crazy Castle 3 (USA, Europe) (GB Compatible)","2ec55d4bf6e38680facbe3efdc974498":"Digimon Saphire (USA)","2f4f1776863912bfc63ea49a19e4231b":"Grand Theft Auto (Europe) (En,Fr,De,Es,It) (GB Compatible)","2f6556846cc09e6165ff05df60bb072b":"Year After, The (World) (Pt) (Beta) (GB Compatible)","2f6b6379f8c7ce5d66a198162f345eaa":"Pocket Bomberman (USA, Europe) (SGB Enhanced) (GB Compatible)","2f7bb3bebbf2deb2b8f3ed62d041fa57":"Jungle Book, The - Mowgli's Wild Adventure (USA) (En,Fr,De,Es,It)","2f93e10fd3392d96fffcd10abe7d9696":"J.League Excite Stage Tactics (Japan)","2f9c669ace651b1eea896045bf8ea672":"Pokemon Jade (Taiwan) (Zh)","2fbdfac0006c9ee889098098cd940f66":"Walaki (World) (Hu)","2fdba20dd19facd380180babc007c56e":"Zhen Sanguo Wushuang 2 - Shin Sangokumusou (Taiwan)","2fe07f1adac3654ccd544b176f31d5cc":"Love Hina Pocket (Japan) (Rev 1)","2ffa53b90351c9a3390ca1f848435239":"Street Fighter Alpha - Warriors' Dreams (Europe)","301899b8087289a6436b0a241fbbb474":"Pokemon - Crystal Version (USA, Europe) (Rev 1)","304c2fe8ef1d9ae537004e3465814b4a":"Tweety's High-Flying Adventure (Europe) (En,Fr,De)","30567b9d1cf0881fee0e15cdfdc250da":"Bugs Bunny - Crazy Castle 4 (Japan)","3073432455a395835de6147399b36cfc":"Sabrina - The Animated Series - Spooked! (USA, Europe)","3097afa0be963c4318cde06184dccf1a":"Let's Bee Friends (World) (GB Compatible)","30a34dd920fa9f3c62b47ec5384052f0":"Razmoket, Les - 100% Angelica (France)","30d8d1eb56fb9e5f34ec0275a0e29362":"Cult of Blood, The (World) (Demo 1) (GB Compatible)","30ec849758f703d7071e2ac28e048101":"Alone in the Dark - The New Nightmare (Europe) (En,Fr,De,Es,It,Nl)","30f38b2be2450f14838a98c5711e303b":"Tottoko Hamutarou - Tomodachi Daisakusen Dechu (Japan)","30f78cb1af3772826ab1d0f6d989bb52":"Shougi 3 (Japan) (GB Compatible)","3143162338a87a52b49d8791909c2b3d":"From TV Animation One Piece - Maboroshi no Grand Line Boukenki! (Japan) (Beta 2) (SGB Enhanced) (GB Compatible)","314cf4f2802b6972aa37c7964f5f0159":"New Adventures of Mary-Kate & Ashley, The (USA, Europe) (GB Compatible)","314fddcec1489efe4a4f959d353ee4db":"Dejiko no Mahjong Party (Japan)","315dcdf71e7af8287ff71c9a79aa8280":"Pocket Color Trump (Japan) (GB Compatible)","31770f7197ea4a7ff99cad7cef5c58b8":"Lucky Luke - Desperado Train (Europe) (En,Fr,De,Es,It,Nl)","317f997c10602f100fa1231f72194505":"Firemen (World)","31a7ba6b72087ca433b43c5ea14ec12e":"Black Tape (World) (GB Compatible)","31ddde6b4c72261181e428ac99103304":"Rayman 2 Forever (Europe) (En,Fr,De,Es,It)","31e1af241f91ca3b9c165431258a4312":"Walt Disney World Quest - Magical Racing Tour (USA, Europe)","31f7a606b52e8d10fc010b4efe9fb514":"Microsoft Pinball Arcade (USA)","31fc2f3df8aa15f627574029c3cf03da":"Monster Rancher Battle Card GB (USA) (SGB Enhanced) (GB Compatible)","325ae325a17554abdb9015fc6f9c8c36":"Ghost of the Arcade (World) (GB Compo 2023) (GB Compatible)","326f861a8fb3e21f1e9379e62cfb6bea":"Stranded Kids (Europe) (En,Fr,De) (SGB Enhanced) (GB Compatible)","3286d6b332edfb46d8504bceba7e55d7":"Power Quest (Europe) (En-US,En-GB,Fr,De,Es,It) (SGB Enhanced) (GB Compatible)","32b2cb72de47a85e07a22d6173459b07":"Tom and Jerry - Mousehunt (Europe) (En,Fr,De,Es,It) (Rev 1)","32c7a63d1fa9c006bba020368cead82a":"Koudai Guaishou - Da Jihe (Taiwan) (Ja) (Pirate)","32cad8c9ca5698e80f7d7801e661cc99":"Fury (World)","32e1169337de052ddfb443d71794f1d7":"Midterm Moments (World) (GB Compatible)","32eb7d18f43e723095e31f1a248b1931":"Chongwu Xiao Jingling - Jiejin Ta Zhi Wang (Taiwan)","32f31220dd01f329be0279e6f5cd6bff":"Tottoko Hamutarou 2 - Hamu-chan Zu Daishuugou Dechu (Japan)","33010ffe2104c0cd6e3b50d624bc29f3":"San Francisco Rush - Extreme Racing (USA) (Proto)","3309fe5963175fa0ae6cc6abe34dbc53":"Gyouten Ningen Batseelor - Doctor Guy no Yabou (Japan)","331cd9f6afa7eab03157a35897af846e":"NFL Blitz (USA, Europe) (Rev 1) (GB Compatible)","3322493d6b7a70bfdea6f6231ceb1ce0":"Grand Theft Auto (USA) (GB Compatible)","3331eb2f36baced132100ff07a1502b1":"Xintiao Huiyi (Taiwan)","3355dc278915f314e263ba0a8e91c8f7":"Cool Hand (Europe) (En,Fr,De) (GB Compatible)","3383c2754015c4da7b5295a28ac09739":"Super Breakout! (Europe) (En,Fr,De,Es,It,Nl) (GB Compatible)","339d4c36fba10397018040e0a4cd1f94":"Brave Saga - Shinshou Astaria (Japan)","33a1389fb8bdc2c4caa3859213140c79":"Pop'n Pop (Japan)","33b0a13dcf79b78b31845b2f0b3e6e71":"Pokemon Pearl (Taiwan) (En)","33b0d63afa3e5ca664a884a8a63d842d":"Pian Wai Zhang - Huangjin Taiyang - Fengyin de Yuangu Lianjin Shu (Taiwan)","33b1f84e036eb954652cbb024aefe538":"Pokemon Ruby (Taiwan)","33e76b95e573464253422d27bf69623f":"Bygone Choices (World) (GB Compatible)","33f621c96e1150266b2519f5901097d8":"Hamtaro - Ham-Hams Unite! (Europe) (En,Fr,De,Es,It) (Beta)","3401da92a9c114cf2a35b677225ba354":"Super Color 26-in-1 (Taiwan)","340d4314e654e05fa9a4705181799096":"Office Combat (World) (GB Compatible)","341249f65f19579b9d335c807982b6fa":"Midway Presents Arcade Hits - Joust & Defender (USA, Europe) (GB Compatible)","341597629f04d5ea6716a7ca9eb24dc1":"Watashi no Kitchen (Japan)","3426bfe0c82da4c6705f996891579a24":"ATV Racing (Europe)","3435ea990961400835b057465ce1ca66":"Pocket Pro Yakyuu (Japan)","344b42a5bf2f591c0ec86cae24238d6d":"International Superstar Soccer 2000 (USA)","344d93f7d968ab5b931806a91f3108a4":"Koudai Guaishou - Sheng Bianshi (China)","34793ee5979947efe26929935803e708":"Silent Hill 2 - 20th Anniversary Demake (World) (Proto) (GB Compatible)","349aebf94c9ae3e1dce9d2a01894bae8":"Catz (Europe)","34d61c282c372f97b55f8dae1ef94fb7":"Harry Potter to Kenja no Ishi (Japan)","34fda0252963cc5a24c7382aa12b72c6":"Super Black Bass - Real Fight (Japan) (Rumble Version)","3508f174b154f500f30af1f06d7012b9":"Chao Jinhua - Shuma Baolong - Zuanshi Ban (Taiwan)","35119708963ee94ae7b634d364c07d50":"Looney Tunes Racing (USA) (En,Fr,De,Es,It,Nl)","3513f4dbf6d283121c6a070f3b92f9df":"GB Karan Koron Gakuen - Hanafuda Mahjong (Japan)","35168b96a50352217130116bd67cdcc1":"Dragon Dance (USA) (Beta 2) (SGB Enhanced) (GB Compatible)","3519c45ce55aad2f0565513723c90672":"Legend of the River King 2 (USA) (SGB Enhanced) (GB Compatible)","35250ce2644d7e8df79bb07c044e40ff":"Tomte Trouble (World)","354bbc5f53babeba8207cba0e764dde6":"Billiard Club (Japan) (Proto)","35773ac09080e95e9dec4b4b2777480f":"Atop the Witch's Tower (World) (v1.1) (GB Compatible)","358b42454a4acb2755834052fe85fc27":"Rocman X Gold + 4 in 1 (Taiwan) (1B-002, 4B-003, Sachen)","35d2e7924408a3460e5c1a770acf3a8a":"Pokemon Picross (Japan) (Proto) (SGB Enhanced) (GB Compatible)","3606f20c43c009075af22991766b2cc7":"Space Invasion (Europe)","3611927be3c7835c594120c4bfdd8d31":"Choro Q - Hyper Customable GB (Japan) (SGB Enhanced) (GB Compatible)","361cb47dbb4af50b2d6d3de9c7d74a58":"Action Replay Xtreme - Special Edition for Pokemon Crystal (Europe)","36306d0677ad4af06062e824c3881111":"Foal's Creek (World) (v1.05) (GB Compatible)","3634a0799df59541607d3240c4a3295b":"No Fear - Downhill Mountain Biking (Europe)","365f913d6f2b0f44d87b7a347daea528":"Tony Hawk's Pro Skater 3 (USA, Europe)","368622c53125b3f86941f7667ec11c8c":"Gedou Zhizun 2003 (Taiwan)","36a056d74781b5963802fb17e0b05222":"Expiration Date (World) (GB Compatible)","36a65f62c7f02c6014d19e5ff5798b69":"Feed The Monster (World) (GB Compatible) (Pirate)","36bf3165da71dc296db9fa1aa9e1d15a":"Basketbrawl - Deluxe Edition (World)","36d3c5208860aae4ac9377fac6c94537":"Flooder (World) (Anniversary Edition)","36d8ffb16dbceede9d62b4bf0a88fd3b":"Clockmaker's Tale, A (World) (GB Compatible)","36df5ebe75980ac4409dead125247bce":"International Superstar Soccer 99 (USA) (SGB Enhanced) (GB Compatible)","3757c89c36bec5e2093741a3e51d22df":"Pokemon Pinball (Europe) (En,Fr,De,Es,It) (Rumble Version) (SGB Enhanced) (GB Compatible)","377447c3f3199d7d58788b1192fd9fb1":"Nakayoshi Cooking Series 2 - Oishii Panya-san (Japan)","37817f1d239b5c8b8c2dac4d49262d7d":"Green Beret (Unknown) (Proto 2)","37824faeedc1d562cae1ceee675c6ac8":"Laura (Europe) (En,Fr,De,Es,It,Nl,Sv,Da) (Beta)","37938c96f34c9be568095f868ff71d1c":"Survival Kids - Kotou no Boukensha (Japan) (SGB Enhanced) (GB Compatible)","37b3cf7650235536e14ec856b497fe61":"Lemmings (Europe) (Proto)","37f4ad4a7baed1ed6eb62787734c00ae":"4 in 1 + 8 in 1 (World) (4B-002, 4B-004, 8B-002, Sachen)","380b1ef48f653e92e35cb81fdeec9419":"Suicide Run (World)","381fd4c2f69053535bc44d1d1882b94e":"Smickeonn - The Game Deluxe (World) (GB Compatible)","3857f9105094b5423f3d230e630df8de":"Rokumon Tengai Mon-Colle-Knight GB (Japan)","3865301a25bb849eb1f216454e014996":"Nyghtmare - The Ninth King (World) (v0.1.0) (Beta) (GB Compatible)","388a603e8b6d0fcf7c553fb00a7c5171":"Sanrio Timenet - Mirai Hen (Japan) (SGB Enhanced) (GB Compatible)","38d51be26c98e1a89cace0d4f0684f72":"Power Pro Kun Pocket (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","39099c9c22658b15703aeaea20e8ec04":"Melanie and the Magic Forest (World) (GB Compatible)","391e8281aab8aa7c0aab6f11f28fb591":"Jet Set Willy II - The Final Frontier (World)","391f056795b0ba564204b9b99abea0dd":"Shuma Baobei - Huojian Bingtuan (Taiwan)","392e73a2acd4310487e3bfabdd70293d":"Fairy Kitty no Kaiun Jiten - Yousei no Kuni no Uranai Shugyou (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","396ce73f896f44ebd43f3cd315bb935f":"Qi Tian Dasheng - Sun Wukong (Taiwan)","398f7b60ea114b90b24503178f47e8d8":"Robopon - Sun Version (USA) (SGB Enhanced) (GB Compatible)","39c380ce4edf34382550fdaf4fc24fa1":"Outta Time (World)","39e9649316e36bad957e98a2170df6d0":"Benjamin Bluemchen - Ein verrueckter Tag im Zoo (Germany)","39f214540d2042865211e07c0536cc14":"NHL Blades of Steel (USA)","3a00468ea1520a57f23f88d43cf8c067":"SWiV (Europe) (En,Fr,De,Es,It)","3a3e92c106a8674642e0ee3c0c793a9f":"Meitantei Conan - Karakuri Jiin Satsujin Jiken (Japan) (SGB Enhanced) (GB Compatible)","3a70f79e33ed4ea546d0ba41a7f2ef25":"Jim Henson's Muppets (USA)","3a998a2ec99c89696c9b23bbbd87f116":"Cardcaptor Sakura - Tomoeda Shougakkou Daiundoukai (Japan)","3a9e8eafabf705600d6c6c6eb832a56d":"Games Frenzy (Europe) (En,Fr,De)","3aaaee3ddf6492c2741f63aa98a44874":"Koudai Guaishou - Dongzuo Pian (Taiwan) (En) (Alt)","3abb1ceb5e276926147b127002aa5b92":"Pocket Hanafuda (Japan)","3abeffb860d9e7bea74ce18d0e67029d":"Karate Joe (Europe)","3ad65b50c81a79f826eedc19edcf48f4":"Kindaichi Shounen no Jikenbo - 10 Nenme no Shoutaijou (Japan) (SGB Enhanced) (GB Compatible)","3af0cf37eadd6e98fdc43d4b3967c966":"Cruis'n Exotica (USA)","3b1ddf5b4ccf2be81c5d1454f4a183d0":"Days Without (World) (Multiple Endings)","3b24fbc8e72140fab38a9874b587c479":"Dejiko no Mahjong Party (Japan) (Rev 1) (Proto)","3b26dfc4e7c55cf86f4a4f3c18344ac7":"Quest for Camelot (USA, Australia) (En,Fr,Es) (SGB Enhanced) (GB Compatible)","3b2f918967698c3eef1f04ef7cd5601a":"Titus the Fox (Europe) (GB Compatible)","3b3d047d3264e1af33cb5b8cabfc8840":"Bandits at Zero (World)","3b7597f78e33a3f95055ce559bb0e0c5":"Chuanshuo (Taiwan)","3b783f3fded9c61f2f9bb1d956bfd6cd":"Ballistic (USA) (GB Compatible)","3b789f606b4b249f1557f55cf102d45e":"Medarot 3 - Parts Collection - Z kara no Chousenjou (Japan)","3b9116dcb4a3b4cc943f75b8b7e88212":"Gambler Densetsu Tetsuya - Shinjuku Tenun Hen (Japan)","3bc2db27baff012307501c31d49922ac":"Geheimnis der Happy Hippo-Insel, Das (Germany)","3bcb284142a35a8d86550c2f34549dcc":"Shaun Palmer's Pro Snowboarder (USA, Australia)","3bd0dad0c695a534b9e89264e09e2b11":"Klax (USA, Europe)","3bfa6eca3e26c8b4ee8e31ac7064085a":"Bass Masters Classic (USA, Europe) (GB Compatible)","3c0c5fceebff4d9730875a9362d26aa1":"Resident Evil Gaiden (USA)","3c2a7051b554cf70183cfa5d99ad021f":"Jinsei Game - Tomodachi Takusan Tsukurou yo! (Japan) (SGB Enhanced) (GB Compatible)","3c3f9f06b791df796b55ac94f2188ff2":"Rainbow Islands (Europe) (En,Fr,De,Es,It)","3c6b37b6162d599e3554689500b23af1":"Network Boukenki Bugsite - Beta Version (Japan)","3c6c0bf27c82eea13dfc9697e0cacf57":"Cyborg Kuro-chan 2 - White Woods no Gyakushuu (Japan)","3ccf696ddc0e2ed66c26c2ff2cb9e12a":"Walt Disney World Quest - Magical Racing Tour (Europe) (Fr,De,Es)","3ced79ad60ab5195058d5d658550f04f":"Dance Dance Revolution GB 3 (Japan)","3d04e5c70919118ef6e7cb69dae14b10":"Shin Megami Tensei Devil Children - Aka no Sho (Japan) (SGB Enhanced) (GB Compatible)","3d24f9e876df8c50573c00119d395b73":"Jim Henson's Muppets (Europe) (En,Fr,De,Es,It,Nl,Sv)","3d44046744627646c09c7ccdae604a34":"Daisu-ki - Jam Edition (World) (GB Compatible)","3d630cb2ff52e7fedfca6c938b82fa24":"Arthur's Absolutely Fun Day! (USA)","3d75b453859c2c6f1c84b68ca987adda":"LEGO Stunt Rally (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)","3d818762aa83330ce4426f8005cc374b":"Batman - Chaos in Gotham (USA)","3dbefe8c7ca45427696016902c2ee452":"Data-Navi Pro Yakyuu (Japan)","3dc508d4da71f2e89ca63b42899741a4":"Army Men - Sarge's Heroes 2 (USA, Europe) (En,Fr,De)","3dd14683b58a36f62ff288c7e0ea918d":"Radikal Bikers (Europe) (En,Fr,De,Es) (Proto)","3dd6b4dd7da7f2b412f92c2509b9f1df":"Cannon Fodder (Europe) (En,Fr,De,Es,It)","3df56a809c6c2d7f5de745657f04fd4a":"Chester's Big Ol' Day (World) (Proto) (GB Compatible)","3dfc97eb20570f845bb07db304687666":"Super Mario Bros. Deluxe (Japan) (Rev 1) (NP)","3e3c0ff63a8f5de3c13a60b82cea89d9":"Toy Story Racer (Europe) (En,Fr,De)","3e617f42020b999e008e12e6371b96d2":"Friendly Fire (World) (GB Showdown) (GB Compatible)","3e62f2ac50ccf89d43a111ab0afe93b6":"Qix Adventure (USA) (Proto)","3e7736b358b7750bb451d505816d8b11":"Formula One 2000 (USA)","3ebd3d5cd2a0bbcb0ffa84cfcfb84b4a":"Superman - Battle for Metropolis (Europe) (Proto) (GB Compatible)","3ed4d88927e2ea0d4f75826f1b60d4a1":"Diva Starz (Europe)","3ee67bd4471e60f4fec6b0799219a2f5":"E.T. - The Extra-Terrestrial - Escape from Planet Earth (USA)","3f0f1cc327ff1be267b226b85b7a11c6":"Animal Breeder 3 (Japan) (SGB Enhanced) (GB Compatible)","3f26686accd8714584b966d277973873":"Kidou Senkan Nadesico - Ruri Ruri Mahjong (Japan)","3f45aaeb406c50d03fc6984908fcbfa5":"Titus the Fox (USA) (GB Compatible)","3f4e912a87ffb1e6c53c798fdd51099c":"Bug Byte (World) (Proto) (GB Compatible)","3f56e5776ff9a2b08a0c22f5eacf6017":"Dungeon Savior (Japan) (SGB Enhanced) (GB Compatible)","3f724784e8359413d25c9ee29162ca2d":"Gopher (World)","3fdf7a4784f7cc93f850df9fc1dcc1af":"Boxed In (World) (GB Compatible)","400d3090f58e68e3fc7d186c370c74be":"Taxi 2 (France)","402df05fc7cee731e564b48366bc779d":"Spider-Man (France)","4034ac7df292643c15c10fa2406ad8c2":"Harry Potter (Taiwan)","4040e7a81ee393909429f0bfcbeb1e47":"Dogz (USA)","4042d8319068186a02b3de972f6f4ed0":"3D Pool Allstars (USA) (En,Fr,Es) (Proto)","404e59cb2021179bb4c6ade209a52366":"Booga-Boo (World)","407e0edf45b42f88f96774c9f549cf18":"Mummy, The (USA)","410652f95c575ffde3312e24c754dd2a":"Tarzan (France)","410677787033aa6a5e36fa57eb9a1262":"Hexcite (Europe) (En,Fr,De) (Proto) (SGB Enhanced) (GB Compatible)","413e1acd7847d628364163eb2c97cecd":"Driver - You Are the Wheelman (USA) (En,Fr,De,Es,It)","417ae48b7e288b62fe2540541244fc31":"Loppi Puzzle Magazine - Hirameku Puzzle Dai-3-gou (Japan) (Rev 1) (SGB Enhanced, GB Compatible) (NP)","417b0d90e313a7e2ff10b73925158f46":"Pokemon Diamond (Taiwan) (En)","417c09180a10c47dc212b44a60f06b4c":"Rockman 3 (Taiwan)","419dfcafd48edd0c13624037e2bc81e9":"Bingyuan Lixian Ji II (Taiwan) (Alt)","41b5e9d960ceafc89e8bd740c2c74dc5":"Konchuu Hakase 3 (Japan)","41c1911a80b9138f89868540723c2cdd":"Super Dassalo Land (World) (v1.1)","41c2515a1dda83aadfd0a134bc62656b":"Loppi Puzzle Magazine - Kangaeru Puzzle Soukangou (Japan) (SGB Enhanced, GB Compatible) (NP)","41f99360142c5cc1c115724702ed6648":"Junior Maths 2 (World)","4219f9cd26b14aa29711cd5deebfc994":"Mage and the Grimoire of Beast (World) (Ja) (v1.01) (GB Compatible)","4272d192cf2b14db93f1e2d1bc07aa74":"SpongeBob SquarePants - Legend of the Lost Spatula (USA, Europe)","429e6da4b32d8caa22e78d92c0febd12":"3D Pocket Pool (Europe) (En,Fr,De,Es,It,Nl)","42ad3639f6abf013d5dacd4358abf6ca":"Grinch, The (USA)","42d27df48114658836c5a234f1d7ef81":"Nyghtmare - The Ninth King (World) (v0.2.3) (Beta)","42e66dd2c0470d98487ef364e7daf710":"NASCAR 2000 (USA, Europe)","42ff80b90350d30aafe41ea2c71a79bf":"Men in Black - The Series (USA, Europe) (SGB Enhanced) (GB Compatible)","43202194489c664523243ae75ee041af":"Shutokou Racing, The (Japan) (SGB Enhanced) (GB Compatible)","43351cd46357bd1615a713490401fda8":"Koto Battle - Tengai no Moribito (Japan)","433d5df048561d0a276a56b210e25d9b":"Kaept'n Blaubaer - Die verrueckte Schatzsuche (Germany)","434dcfae5fdcf6f8f8ed466cdc88cc2f":"Tazz (World)","43527e9aff69649306c749da2d3c72c0":"Armada - FX Racers (USA)","435d9fa03b3f891648f9c56d39299807":"VIP (USA) (En,Fr,Es)","436e02804051d43b9b622bb48f7c67bf":"Suzuki Alstare Extreme Racing (USA) (Proto)","437ffe18425cdfa304da7f84cf257fc8":"Bomb Runner 1-2 (World)","439acae020bd073ecf7f41a881ccabda":"2003 Harry Potter 3 (Taiwan)","43ed3a5d16a9bb15e746346ebab6c5a6":"Bubblegum Attack (World) (GB Compatible)","43f61059772e7cef92e32f05dd89205b":"Shaman King Card Game - Chou Senjiryakketsu - Funbari Hen (Japan)","44090e5f80e30abddf264b170c236a9e":"Medarot 2 - Kuwagata Version (Japan) (SGB Enhanced) (GB Compatible)","44173cb9938f95619dc9db70797d5f72":"Larion's Tinker Toys (World) (Proto 2)","4448c35bebf32629e23f64c61cc50565":"F1 Championship Season 2000 (Europe) (En,Fr,De,Es,It)","44837786e1a5eb6ae5b70a14127a869f":"Silent Hill 2 - 20th Anniversary Demake (World) (Proto) (GB Compatible)","448af6d54ce1886456c98209f53abdc7":"Dr. Rin ni Kiitemite! - Koi no Rin Fuusui (Japan)","44bd656c1315621238cc57767e2e0e35":"Finders Keepers (World)","44cc400d990e2284ae843545fe99402e":"Sea-Doo HydroCross (USA) (Proto)","44edc2796dbeeed54658638bf2b7d78c":"Hat Boy (World) (GB Compatible)","4505499c8a53c23195b2d47b9366fba7":"Fillo - Crystal Version (World)","4505fd4df8eb721cf2f5b5be93682874":"Sanrio Timenet - Kako Hen (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","455df3202a18dfd4e7e93a7881c10901":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (1998-07-14T181500) (GB Compatible)","4563d42db3b0c9f2e14c1cad7725bb34":"Dino Breeder 4 (Japan) (SGB Enhanced) (GB Compatible)","4572f09b61a36e94762ff60cbe182834":"Pokemon Trading Card Game (Europe) (En,Fr,De) (SGB Enhanced) (GB Compatible)","45a4cefca0b17ca193869bf6d6134d7c":"Microsoft - The 6 in 1 Puzzle Collection Entertainment Pack (USA)","45a7802b724dc5431847f60f3e78a302":"Rescue Heroes - Fire Frenzy (USA)","45afa73780709db49ce92eea952b0baf":"ECW Hardcore Revolution (USA, Europe)","45c4b87d2e3fe86fccc6941ffd724098":"Baby Felix - Halloween (Europe) (En,Fr,De,Es,It,Nl)","45d988bdb6cfcc334134dd212cefb7b8":"Pokemon - Version Cristal (France)","45db77fb2f2923c33ff9d521d5eaecce":"Maya the Bee - Garden Adventures (Europe) (En,Fr,De,Es)","45e090a174fd41f2e78759477d5b3ea1":"Shark Attack (World)","45eeade46bd85f80af13af9dce572b9c":"Barbie - Fashion Pack Games (USA, Europe) (GB Compatible)","4633a7b4485391e2fce4674caf00bb85":"Dragon Ball Z - Legendaere Superkaempfer (Germany) (Beta 3)","4639d79e2e02a687a44d19d9c9c3c28a":"Tootuff (Europe) (En,Fr,De,Es,It,Nl)","464acbe3c82887db897c39cdba877237":"Azure Dreams (USA) (SGB Enhanced) (GB Compatible)","4681f5b931a2e60ca163facd1adf56ed":"Mega Man Xtreme (USA, Europe) (GB Compatible)","468a4386f2e26f2f20e262f34a232ddd":"Wolf Pack (World)","469ee8270b66dad56379b29d160ee48c":"Kirikou (Europe) (En,Fr,De,Es,It,Pt)","46b9a55a3049a1113bc5430edaaf9401":"E.T. - The Extra-Terrestrial and the Cosmic Garden (Europe) (En,Fr,De,Es,It,Nl)","46c4958373216fbcf69a0c94946575f8":"Yakouchuu GB (Japan)","46e0e199f58aebbb75b4ed16da5aae60":"Space Invaders (USA, Europe) (GB Compatible)","46ed332d95c5da9a2007945fed9f8118":"Tintin - Le Temple Du Soleil (Europe) (En,Fr,De)","4713c80f75168f12d7582e63abb6edef":"Ottifanten - Kommando Stoertebeker (Germany)","472a51e912d0df0e786989cb6f190b87":"Mommy (World) (GB Compatible)","472b425740f0603fa3b566e028e871bd":"Honkaku Taisen Shougi Ayumu (Japan) (GB Compatible)","473e78b1d576a052492e1b4b80f4d3b3":"Elie no Atelier GB (Japan) (SGB Enhanced) (GB Compatible)","475550607b59e83c5465411015b66f41":"Chopper War (World)","475c56c522cc154c1526ab0900d77123":"Wing Warriors (World) (En,Fr,Es) (Beta 2) (GB Compatible)","476902451bd5da0f854a5c1681495b94":"Tonka Raceway (USA)","47714d6ae7b080a183804144d0672a62":"Emo Cheng 2 - Fengyun Pian (Taiwan)","47c3d8f5246f07f8885e44a9d2008f83":"Gunther the Monster and His Friends (World)","47e8dcb47a5e87f74441bb735f255aba":"Soukoban Densetsu - Hikari to Yami no Kuni (Japan) (SGB Enhanced) (GB Compatible)","482a7fe10c3e3d10127bbb08447a15cb":"Catwoman (Europe)","484020d0bf01d29f2a74322e0d4acc3a":"Zelda no Densetsu - Fushigi no Kinomi - Jikuu no Shou (Japan)","484eeb83ad00353272767485eca59ea5":"Star Wars Episode I - Obi-Wan's Adventures (USA)","488611af773cec5b7ecc5bd3efb754bb":"Spacestation Silicon Valley (Europe) (En,Fr,De,Es,It,Nl,Sv) (GB Compatible)","488c90eea5b5e2e8e217be6b7c9a1318":"NBA Jam 2001 (USA, Europe) (Beta)","48b5fea61742d75e98782803d14871f3":"DT - Lords of Genomes (Japan) (SGB Enhanced) (GB Compatible)","48b6a0ef5009a57d3976013bf42aa81d":"Yingxiong Tianxia (Taiwan) (Zh)","48ce279084e1fc7a9136cc211f4fad5d":"Hamtaro - Ham-Hams Unite! (USA)","4907bfe608ede74e08f4b43c51dc0194":"Auto Zone (World)","490bddbb5b173fad0ee682154bb1fbd9":"5 Minutes until Goodbye (World) (GB Compatible)","490cf7b762f7b735f249c3a3107c3e55":"Beatmania GB - Gotcha Mix 2 (Japan)","491d97b847cadc6c854172008a09fc83":"Legend of Zelda, The - Link's Awakening DX (Europe) (Rev 2) (Beta) (SGB Enhanced) (GB Compatible)","4948bfdacce45f5c1d0facab23f3ba54":"Blinky's Revenge (World)","494fbe8f0770a06be11a4026829e2396":"Shaolin Shisan Gun - Ying Xiong Jiu Zhu (Taiwan) (Zh)","49561c4082206a7e5d5ca2032be81eed":"Buffy the Vampire Slayer (USA, Europe)","495c72cdac3cd684b5d56581ccc183e1":"MTV Sports - T.J. Lavin's Ultimate BMX (USA, Europe)","496820c003cbca91df5dcc266053e3c2":"Shanghai Pocket (USA) (Rev 1) (Proto) (SGB Enhanced) (GB Compatible)","496afc38447d1ddec45583f3df074b35":"Senkai Ibunroku Juntei Taisen - TV Animation Senkaiden Houshin Engi Yori (Japan) (SGB Enhanced) (GB Compatible)","497e32beeface0c5dac4bfe84a5964b6":"Deja Vu I & II - The Casebooks of Ace Harding (Europe) (Fr,De)","4983746a421eff341f842649fcd8be89":"Star Heritage (Europe) (Proto) (Password Version)","498a332679b9ce4392af8d9b0567bf24":"Mail Junkies World Port (United Kingdom) (v1.01)","498c0a50a5e5cde16127617a97ad6162":"Harvest Moon GBC (USA) (SGB Enhanced) (GB Compatible)","49a772d7e66928ecf1ed672c679d99aa":"Digimon Crystal II (USA)","49b4214dceb5404acd5b83fc3d1a36bf":"Lee Carvallo's Putting Challenge II (World) (v1.2) (GB Compatible)","49b48529d5291796a96659468c41cc54":"Logical (Europe)","49b834ac7cd50da9b424e17c112c577a":"Speedy Gonzales - Aztec Adventure (USA, Europe) (GB Compatible)","49bc624c902fcb2e4892e5c823c987d0":"Microsoft Pinball Arcade (Europe)","49c62d2d16ace6a2c46d2cc817a49abf":"Arena 3000 (World)","49dd3c08833fab2509cdd1c724183460":"Lunatic Tower (World)","49e8a2684fd79b892eb4244224019f59":"Capybara Village (World) (v1.0) (Proto) (Cozy Spring Jam)","4a07f33107d47d904f80c53d0e857605":"Test Drive 6 (USA) (GB Compatible)","4a1eefb91466fd1a2368617d4e697c30":"Test Drive 2001 (USA)","4a58b26ef9624192afe5542f790cdb01":"Carmageddon - Carpocalypse Now (Germany)","4a58e3e59100c1791acd3c82f5ebd656":"Shenghuo Jiangmo Lu Waizhuan (Taiwan)","4a6aec32a62b0ecca3e2328fabbeb811":"Leaper (World)","4a8e3506f98e01fcb0da5073b83e4e35":"Q-bert (USA)","4adc91b001cf02dc42d2c0339535b8f9":"Indiana Jones and the Infernal Machine (USA, Europe) (En,Fr,De)","4b068708fb29fdabbee834114fe4a09d":"Hexcite - The Shapes of Victory (USA, Europe) (SGB Enhanced) (GB Compatible)","4b146ce804a9b9c90467742508a67b5f":"BattleTanx (Europe) (En,Fr,De)","4b3484d4a629121131885737ba86ca14":"Zippy The Pinecone (World) (GB Compatible)","4b355f96ea75826ad0e48055482badea":"Tyrannosaurus Tex (USA) (Proto)","4b497dfa757c4c54c67089507a71a715":"David O'Leary's Total Soccer 2000 (Europe) (En,Fr,De,Es,It,Nl)","4b5da8d4b73304b6694651f3fd8c8216":"Pocket Music (USA) (En,Es) (Proto)","4b62032c9cfecf52156ad0a2598444bd":"Robopon - Sun Version (USA) (Beta) (SGB Enhanced) (GB Compatible)","4b64f2a44700d5bf9dc0a25a64a9ebb0":"Batman - Chaos in Gotham (Europe) (En,Fr,De,Es,It,Nl)","4b684b00ecc0cf15536dc5ab58bdd470":"Monsters, Inc. (Europe) (Rev 1)","4b6b4476a9a2f205975db431dfec4533":"All Star Tennis '99 (USA) (Proto) (GB Compatible)","4b9d82d91a575cf96657383a26505eff":"Powerpuff Girls, The - Bad Mojo Jojo (USA) (Rev 1)","4bc8467ed91a94ba23648706b551cef5":"Classic Bubble Bobble (USA) (SGB Enhanced) (GB Compatible)","4c04b4fba57829c2eee5f4f37801c648":"Sabrina - The Animated Series - Zapped! (World) (ModRetro Chromatic)","4c18b5d470b105344ec55d195a05d2de":"Shadowgate Return (Japan) (GB Compatible)","4c634b29b3f20529cc4e0808199fa73e":"Konchuu Hakase 2 (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","4c9ea697778efdc5cefd32ce63e58598":"Memory Mania Challenge (World) (v1.3) (GB Compatible)","4ca44cbdd4e05c9b3c22da96d3de6338":"Legend of Zelda, The - Oracle of Seasons (Europe) (En,Fr,De,Es,It)","4ca71b12d89a5bcfcc52095081ae9f51":"BattleTanx (USA)","4cde8dac14b8ace83f8a4716ccb2dbf0":"Dragon Ball Z - I Leggendari Super Guerrieri (Italy)","4cec140483baf799e883e717b8ce81a5":"DX Monopoly GB (Japan) (SGB Enhanced) (GB Compatible)","4cf10b2c7ae81e62e82da32de3a9d48e":"Jaguar Mishin Sashi Senyou Soft - Mario Family (Japan)","4cf4a9af727673fa31cfe9d991428b6a":"Loppi Puzzle Magazine - Kangaeru Puzzle Dai-3-gou (Japan) (Rev 1) (SGB Enhanced, GB Compatible) (NP)","4cf9559ece4f20e20f0a0df646f4b68b":"Bikkuriman 2000 - Charging Card GB (Japan) (SGB Enhanced) (GB Compatible)","4d08e5553356aecd728b5ef7d78ee261":"Motocross Maniacs 2 (USA)","4d090ceaa53d571db00d7160ca4be69d":"Ms. Pac-Man - Special Color Edition (USA) (SGB Enhanced) (GB Compatible)","4d3e8bf64b69eb56c5f1786cef422c59":"Command Master (Japan)","4d401d54a616be45156e253213a6f04f":"Sludge & Sorcery (World) (GB Compatible)","4d48457f7138c58be1589a4ddce1f02d":"World Soccer GB 2000 (Japan)","4d6ce58ac78078d47a807cb326c3919a":"Bakusou Dekotora Densetsu GB Special - Otoko Dokyou no Tenka Touitsu (Japan)","4d8cac8dd06fb8da1debf7e84a1c2166":"Pokemon - Sapphire Version (USA)","4df8d03bb1853f949cf4a99dffd21362":"Test Drive Cycles (USA)","4e1a5f02cce49842d4717a8b0ce501f5":"Wendy - Every Witch Way (USA, Europe)","4e362c69c3d8f1e170f8e2a25d929435":"Robopon - Star Version (USA) (Proto) (SGB Enhanced) (GB Compatible)","4e5d7a1b65b52af7ca88e0b7b2016197":"Loppi Puzzle Magazine - Kangaeru Puzzle Soukangou (Japan) (Rev 1) (SGB Enhanced, GB Compatible) (NP)","4e60a2f1edbef45f0794a95dc0607234":"Year After, The (World) (En) (Beta) (GB Compatible)","4e745e7febe4214c484d9c1e0a62ae57":"Jeff Gordon XS Racing (USA) (GB Compatible)","4ea42da8598a4bbf223af121ddfab335":"Shuma Baobei - Hai Zhi Shen (Taiwan) (Zh)","4ef95a30c72008dee31ab836742c9acf":"Shin Megami Tensei Trading Card - Card Summoner (Japan)","4f05f82ad7c0f5aaba6d61438d5d8238":"Cool Bricks (Europe) (Beta)","4f2adc9041f74b1504cec9fa34abe0dc":"Hidden Gems (World) (GB Compo 2023) (GB Compatible)","4f4ad5f3389da1fc85af38cf770d4556":"NFL Blitz 2001 (USA)","4f62184649801733697e35c878092ba4":"Wangzu Tiantang (Taiwan)","4f682b03d485a50cc4a0307e9c949196":"Tootuff (Europe) (En,Fr,De,Es,It,Nl) (Beta)","4fa0f6e7388f072c8bb76761f8068868":"Macross 7 - Ginga no Heart o Furuwasero!! (Japan)","4fcf445c25b4cf798ef15afcd044dcf4":"Quan Ba Tianxia (Taiwan)","4fd68c1cf8b57e90a5b11b054fc68b46":"Donald Duck - Goin' Quackers (USA) (En,Fr,De,Es,It)","4ff574fadd50a18d7e93fe0d7dc4c8d1":"Magical Tetris Challenge (Europe) (En,Fr,De,Es,It,Nl,Sv) (Rev 1)","500c3ad63568b78fe3df71782bdf8592":"Hanasaka Tenshi Tenten-kun no Beat Breaker (Japan) (SGB Enhanced) (GB Compatible)","5045139eb57b9d6cdfa1366f473a1e4c":"Dragon Quest I & II (Japan) (SGB Enhanced) (GB Compatible)","509ca3dc125131b1a4b1667ccc64fd27":"Doraemon no Quiz Boy (Japan)","50aecb6a5ea96b4727e8e475e451b2d4":"Apollo Mission (World)","50af67f7321d84bd052f0e793ee0613c":"Mario Tennis (USA)","50e6d9d88450932743161b7512838ccc":"Flintstones, The - Burgertime in Bedrock (USA)","50f6fe2488600b1b80b8dea0aeeac2e1":"Bakuten Shoot Beyblade (Japan)","51091a6d773823b8731240676d9d25cf":"E.T. - The Extra-Terrestrial - Digital Companion (USA)","510eb8c9df5d3f71e01f5a7898a0a1f1":"Pokemon de Panepon (Japan)","5130d3ec4a93acb84e3f2c3590a0e5a6":"Tech Deck Skateboarding (USA, Europe)","51356c19a22fcb871cbdd721e42fe201":"Wacky Races (Europe) (En,Fr,De,Es,It,Nl)","51518f30eb5e6190671017fc9807016d":"NHL Blades of Steel 2000 (USA)","5164521245f41b0f3a51cffe0704d21d":"Thunderbirds (Europe)","5165faa424c006a72ccacdd62bf61726":"Hiryuu no Ken - Retsuden GB (Japan)","517ef53718009b20d7bf7771aef191dd":"Moomin's Tale (Europe) (En,Fr,De)","51825ecaa3162a1c871fe67e4a83f0b9":"Pia Carrot e Youkoso!! 2.2 (Japan)","51c8578d742ae2306b863776738f6772":"Kanji Boy 3 (Japan)","51f21f61592f05e712b36a0bf10a34a6":"Golden Goal (Europe) (En,Fr,De,Es,It,Nl,Sv) (GB Compatible)","521f0e017a4266355f3f4dc015f1dd46":"Ohasuta Dance Dance Revolution GB (Japan)","522910c5daf605b45745fa97cda41f84":"Barca Total 2000 (Europe) (En,Fr,De,Es,It,Nl,Ca)","523fac00115280ede5ac1647552b2024":"SnowCross (Europe) (En,Fr,De,Es,It,Pt)","5246b47da10ed6e48cbf58b5ee81e5c1":"Grimace's Birthday (World) (v1.6)","5254ea1935c43057358d2efba26c60c8":"Dragon Quest Monsters - Terry no Wonderland (Japan) (SGB Enhanced) (GB Compatible)","528ff2f54eb0b318e8e91a282fd62f2d":"Nakayoshi Cooking Series 5 - Cake o Tsukurou (Japan) (Beta 1)","52a9d2992a270ee3184553caf4fdba2b":"Gakkyuu Ou Yamazaki (Japan) (Rev 1) (GB Compatible)","52c823c2c7fddcfd77768daf42082980":"Robot Poncots - Comic Bom Bom Special Version (Japan) (SGB Enhanced) (GB Compatible)","52e260e54d59fd16cd5cc588123d3e48":"Gonta no Okiraku Daibouken (Japan)","52f46e74689516225055b8576079ee24":"Sewing Machine Operation Software (USA) (En,Fr,Es) (GB Compatible)","5315c21eaffde4a641a02d89f18e2a95":"Donald Duck - Quack Attack (Europe) (En,Fr,De,Es,It)","5323967b4e46c4a76ea3576675be42ac":"Minnie & Friends - Yume no Kuni o Sagashite (Japan)","5328277fe9c9c4b1671c5f40424c34f1":"Yin Ban Zhongwen RPG Zhanlve + Dongzuo + Yizhi 12 in 1 (Taiwan)","535ac79c69b22ed21cc9af0d4c10bea8":"Doug's Big Game (Germany)","535dbd4550114faa20678be0fbf973a9":"Digimon Pocket (Taiwan) (En)","536f2da6f96f278bd59b92bf37b61964":"Cuthbert Enters the Tombs of Doom (World)","538f4d9036a7841cb157b9023346c540":"Konami Winter Games (Europe)","53a98fbfddc370edd2de8eb0af5aa7ac":"Kanji Boy (Japan) (SGB Enhanced) (GB Compatible)","53cfcb50a8273c3fdbbbee9a20777361":"Get!! Loto Club (Japan) (Proto) (GB Compatible)","53fc292b30e0a4c59045e5f6a7587a01":"Pokemon Jade (Taiwan) (En) (Pirate)","54051bc19ce1c0301710d7845717dbad":"Suzuki Alstare Extreme Racing (Europe) (En,Fr,De,Es,It,Nl)","54165d2bf7a040aa31d6d0956408d10d":"MTV Sports - Skateboarding Featuring Andy MacDonald (USA, Europe)","5416dfae15db78cbbb6525051451c284":"Pocket Color Mahjong (Japan) (GB Compatible)","5423b2d603c9d4381594aa3d68441a69":"Babe and Friends (USA) (GB Compatible)","542543461273c69e6966d2599f382eca":"Captain Buzz Lightyear - Star Command (Germany)","5428271d0c9c5eb3dbf28078fafe2031":"F1 World Grand Prix II for Game Boy Color (Europe) (En,Fr,De,Es)","543fe119633338174899829b6d4c571f":"Thunderbirds (Europe) (En,Fr,De,Es,It)","544eb3962ef54f89718c8dfa668ec4be":"Star Wars - Yoda Stories (USA, Europe) (GB Compatible)","545b4875c01233edbdc6c2cd001aec25":"Tomb Raider (USA, Europe) (En,Fr,De,Es,It) (Beta)","547c0d3fdb1c6ef7abc7dff06c457a35":"Frogger (USA) (Rev 1) (GB Compatible)","549b54077fd122943e076f4c2350be05":"Bug's Life, A (Europe) (SGB Enhanced) (GB Compatible)","54c8522c1d924a05bb05ac6673f023e6":"Bomberman Max - Ain Version (Japan)","54dd12ef93fad931df26cdf67ad4677a":"Rugrats en Paris - La pelicula (Spain) (En,Es)","54df933576a8b8ca991b3ac9b6a1ad61":"F1 Racing Championship (USA) (En,Fr,De,Es,It) (Proto)","54f81e8d2232af2503e0e03eeeeb39ce":"Centipede (Europe) (En,Fr,De,Es,It,Nl) (GB Compatible)","55031fadeb053136a4df5cf848a97680":"Tetris Adventure - Susume Mickey to Nakama-tachi (Japan) (Rev 1)","5507d692286e2c57e29c62e78be4c7b5":"Digimon 02 5 (USA)","5563e6e09898599a781750d9ce9f0259":"Tottoko Hamutarou - Tomodachi Daisakusen Dechu (Japan) (Rev 1)","55bd8b9da0d4bf94a93e56d91c8219dc":"Trip World DX (World) (Limited Run Games)","55e3907e1d4c98bb4a3f9ab9005b1727":"Pokemon Vision Jade (Taiwan) (De)","55fea8e7be17975374ab24518bd83171":"Tarzan (USA, Europe)","560256bd5d95f16dead694d680e1c2e8":"Yu-Gi-Oh! Duel Monsters III - Tri Holy God Advant (Japan)","560e27a4d80b88280d8ad7358467c301":"Buzz Lightyear of Star Command (USA, Europe)","565b748f3ee16464bebde853770d39d2":"Powerpuff Girls, The - Battle Him (USA)","5679de3c41c63c6b9dc9432c7ed1105a":"Grandia - Parallel Trippers (Japan)","56aeb68f722483cff5179db47cf5222a":"Expiration Date (World) (v1.5) (GB Compatible)","56b935754216ef447a905c2e516a130c":"Bingyuan Lixian Ji (Taiwan)","56cbf668af5095a073e205a07987c82a":"Snoopy Tennis (USA) (En,Fr,Es)","56d9d8b1da2a329456a101031850e32b":"Kakutou Ryouri Densetsu Bistro Recipe - Kettou Bistgarm Hen (Japan) (SGB Enhanced) (GB Compatible)","57611d2939ee579349f2221c78339bb1":"Swordbird Song - The Iron Owl Tower (World) (v3.1) (GB Compatible)","576187b3bd246be19b9ae997188b7b0d":"Smickeonn - The Game 2 - Virtual Boy Edition (World)","576e3a9d7da60439c8fb28c81b56fe5a":"Beach'n Ball (Europe) (En,Fr,De,Es,It)","5776965258ee78832e7eabc0db66ff4b":"Monsters, Inc. (USA, Europe)","5779b8a387c10d39faf8fd55632375c7":"NASCAR Challenge (USA) (Rumble Version)","578a0860ed55c3e497af423c739f7d84":"Wendy - Der Traum von Arizona (Germany) (Beta)","579291571dac53916fd552ccea5b0bb9":"Front Row (Japan)","57a7d3d3e7d67ec7d72de5701d9227d8":"Daikaijuu Monogatari - Poyon no Dungeon Room (Japan) (SGB Enhanced) (GB Compatible)","57b59bc623b05385ab27a0d7e18295a1":"Tom and Jerry - Mousehunt (Europe) (En,Fr,De,Es,It)","57bcde64a3005d4aad8df640f2b5f07c":"Powerpuff Girls, The - Battle Him (USA) (Rev 1)","57db65568f3c4a523960cd5b35096481":"Tweety's High-Flying Adventure (USA)","58670204ec7b8791576e3c88ba7c1ddf":"F-18 Thunder Strike (USA, Europe)","5878a145e365fa1841b22e837c3226ff":"4x4 World Trophy (Europe) (En,Fr,De,Es,It) (GB Compatible)","5896aa268a344d2b65a70c983ad78c3f":"Star Trek (Europe) (Proto)","58a311a266816b46c8d6775e73a70b69":"Super 21 in 1 - New GB Rumble (Taiwan)","58df996c5721b105989e7052e214a3c4":"Laser Squad Alter (World)","58ff2f0f26205c5bd8c9aecb9973cb6a":"Jack no Daibouken - Daimaou no Gyakushuu (Japan) (SGB Enhanced) (GB Compatible)","59558bce6ef7774132a6109d1d0a0636":"Year After, The (World) (En,Fr,Pt) (GB Compatible)","5962e70172bbe5a77ae507a409d12aa9":"Visiteurs, Les (France) (GB Compatible)","597bd5a8aa26af757cba57aff575eaa3":"Godzilla - The Series - Monster Wars (USA) (En,Fr,De)","59b05dfc07cb8de90de975ea64af29bd":"Kanzume Monsters Parfait (Japan) (SGB Enhanced) (GB Compatible)","59dbf67358b671e2c8dcd9f89ebaf378":"Columns GB - Tezuka Osamu Characters (Japan) (SGB Enhanced) (GB Compatible)","59e3ae1c56f9f22a7da70168757f640a":"Ultimate Surfing (USA)","59e6b58b2f788c5e72bfa93e3052869d":"Woody Woodpecker no Go! Go! Racing (Japan)","59f3f8585cfc12876db9a27018d41f78":"Papyrus (Europe) (En,Fr,De,Es,It,Nl)","59fed43cd1489169d3c51b87988e7abe":"Kaitei Densetsu!! Treasure World (Japan) (GB Compatible)","5a021b40ccc17a66465dab276bf06cbe":"Alone in the Dark - The New Nightmare (USA) (Beta)","5a192fff3db17b8fb1ed19867d4be13a":"NFL Blitz 2000 (USA)","5a736039aab0973d8a014fdacbbeacbb":"Mob Creche Parallel Game (World) (En,Ja)","5a7673f1e61cd707bdc880ff76396a3d":"Cool Bricks (Europe) (En,Fr,De,Es,It)","5a8eb78c3eee9b199483b903344509e8":"Lunar Docking (World)","5a93ecb5781a3338c99e35bd06cc6127":"Tiny Toon Adventures - Buster Saves the Day (USA)","5aa10d5b6e7427a763b7c74b8d804821":"Swordbird Song - The Iron Owl Tower (World) (v3.0) (GB Compatible)","5aab47cf957c82c969bbc0a93232f883":"Atlantis - The Lost Empire (USA, Europe)","5ab6b2a6f4c48aa8a1e77e31370cdcb3":"Power Pro Kun Pocket (Japan) (SGB Enhanced) (GB Compatible)","5adbcf7b767292f53912761b66133455":"GB-Wordyl (World) (Nl) (GB Compatible)","5b250ab006a50301f29e74551531bd7f":"Sylvanian Families - Otogi no Kuni no Pendant (Japan) (SGB Enhanced) (GB Compatible)","5b29ec02452df1c3ce70d6aa82d59409":"Gravitorque (World) (GB Compatible)","5b36285c8491be0e1cb0c2c741d2b793":"Sakura Taisen GB 2 - Thunderbolt Sakusen (Japan)","5b36c3da8bcfee8a5f14a6db12f533a3":"Super Nenas, Las - Panico en Townsville (Spain)","5b40590960c204efd6303b2e89a0cc10":"Nushi Tsuri Adventure - Kite no Bouken (Japan) (Rumble Version)","5b5f4bbec087abc00ce1f834a86bdae3":"Pocket Billiards - Funk the 9 Ball (Japan)","5bad510836505a54f873191391bf7392":"River Styx Round-Up (World) (GB Compatible)","5bcd7a470494ad1c3b58936088532ca6":"Chrome and Blood (World) (v1.02) (Proto) (GB Compatible)","5bcdc0754bce49836a5f4c8614782a6f":"Hejin Zhuangbei II (Taiwan)","5bd9f0923dc29bd9e566933c3c3e7902":"Juukou Senki Bullet Battlers (Japan) (SGB Enhanced) (GB Compatible)","5be268f2761c76de1a0f86efc0f6bd50":"Fighter on the Path of Glory (World) (En,Ja) (v1.00) (GB Compatible)","5bea1b33eb5635e147069215c92b3d41":"Bokujou Monogatari 3 GB - Boy Meets Girl (Japan) (Rev 1)","5c010c6c3243380db1c64e9c01d1b982":"Musical Notes (World)","5c07e6aff1e2cdac8ec09554981ab0c9":"Koushien Pocket (Japan) (SGB Enhanced) (GB Compatible)","5c0ed7c257219b6fab67c5f9d9ab25f8":"Opossum Country (World) (GB Compatible)","5c3a09f365cfa467a11f14075b0d5517":"Ojarumaru - Tsukiyo ga Ike no Takaramono (Japan) (GB Compatible)","5c5917d5396f44aa95341e7d9ee5d79f":"Sir Knight (World)","5c7ecb62a755ce577e7d8a943838d45f":"Nisemon Puzzle da Mon! - Feromon Kyuushutsu Daisakusen! (Japan)","5c8af4e0a5c140ed96af55bc85828abc":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (1998-07-14T022124) (GB Compatible)","5cc6ad2a2406c6c860f36107f6eb414e":"Looney Tunes Collector - Martian Alert! (Europe) (Fr) (Beta 1)","5cfeb93b86fbfe59d7c59e904de3bb88":"Rip-Tide Racer (Europe) (En,Fr,De,Es,It) (GB Compatible)","5d20a03ac7dae3572d4826ae884085d7":"Stellar Wars (World)","5d4cdbf3b54b6857c29cb24ebfaf2470":"Super Me-Mail GB - Me-Mail Bear no Happy Mail Town (Japan)","5d4e5be715d0a30bf1f94bb116a34b84":"Xploder GB (Europe) (v1.2.3E) (GB Compatible)","5da357ef79acb5ab8852d145888dd5cb":"Sesame Street - Elmo's ABCs (Europe) (GB Compatible)","5da63fe252b4cb3e17dd4986fb276690":"Smurfs Nightmare, The (Europe) (En,Fr,De,Es)","5da744788c35f96f9fa249aba68cf095":"2001 Fatal Fury (Taiwan) (En)","5daf6da4a471c6b9517413ef25e498a5":"Puzzle de Shoubuyo! - Wootama-chan (Japan) (GB Compatible)","5dda88b002742dc16fd232ad569dc4c8":"Formula One 2000 (Europe) (En,Fr,De,Es,It) (Proto)","5de22f218b0f679cbfe6fdd880c2f529":"Pinecone Pizza Party (World) (Prototype) (GB Compatible)","5df6d1ec0e9241e1ed8a8ee7ff318631":"Santa Claus Junior (Europe)","5dfe3d8c181023b30cfc942a9aa40a69":"F-1 World Grand Prix (Japan) (En) (Beta 2)","5e0691f5e41302c7477aff9cc252a7d9":"Ninja JaJaMaru - The Great World Adventure DX (USA, Europe) (Ninja JaJaMaru Retro Collection) (Switch)","5e1b4969a76e069acf2622f7bb05d8d3":"Evel Knievel (Europe) (En,Fr,De,Es,It,Nl,Sv) (GB Compatible)","5e374708237a17f322a077daba43ac76":"Hello Kitty's Cube Frenzy (Europe) (Proto) (GB Compatible)","5e9ac200f771f793f4ff65506fb63763":"2003 Koudai Guaishou - Lanbaoshi (Taiwan)","5edc7fd33f6872f6243d746ffb992f11":"Alley Cat (World)","5ee49eaf9a2c19623478215788c0bfdc":"Space Marauder (USA)","5f1481260760c69843a61e9060ad7154":"Monopoly (USA) (GB Compatible)","5f1dc921df67de60d3f6ef1a44870142":"Planet of the Apes (Europe) (En,Fr,De,Es,It,Nl)","5f43dc79250321f235a1ddc422a2d58d":"From TV Animation One Piece - Yume no Luffy Kaizokudan Tanjou! (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","5f5535bf79444ec15502db9c81e58ced":"Daikatana GB (Japan) (NP)","5f797c8c175237b9ef0d9a6888a4a239":"Medarot 2 - Parts Collection (Japan) (SGB Enhanced) (GB Compatible)","5f821976274f5e6147f2354a6d01f098":"Montezuma's Return! (USA) (En,Es) (GB Compatible)","5f872189d58f841b5672d4cb11ec3bbb":"Pooh and Tigger's Hunny Safari (USA)","5f87a30263bfffd7003b2dda6443e216":"Pact, The (World) (GB Showdown)","5f9bbf43df1837fe1c1d960286513fcb":"Hello Kitty no Sweet Adventure - Daniel-kun ni Aitai (Japan) (SGB Enhanced) (GB Compatible)","5ffa26d048b191bfd6af46be13552aa5":"Chase the Chuck Wagon (World)","600c8c4d9fcc759dae5055297b0ebb5f":"Mizuki Shigeru no Shin Youkaiden (Japan)","600e9e24ebbe4f2b8a09d429b4aee54c":"Jeremy McGrath Supercross 2000 (Japan) (En) (Possible Proto) (NP)","60189a9f7aeda63e0745b347008280f0":"Xingqiu Dazhan II - Kelong Ren Zhanyi (Taiwan)","6027ab122cd183e40184db9297c0b38e":"Yurivania II - Josette's Quest (World) (v1.2)","60abfc4f6f633a708c23d91d0cc2f5bd":"Tamarindo's Freaking Dinner DX (World)","60b253394d8d817afcb80b8c69be907d":"Mythri (USA) (Proto 1)","60df8a170849c5f5a6f94b1531a29a34":"Bakukyuu Renpatsu!! Super B-Daman - Gekitan! Rising Valkyrie!! (Japan) (SGB Enhanced) (GB Compatible)","60f6fbdd07d01ad1835269fdeaebb83d":"Cardcaptor Sakura - Itsumo Sakura-chan to Issho (Japan) (Rev 2) (GB Compatible)","6122caeec0daab1bfa89c2af317dcbd6":"All-Star Baseball 2001 (USA)","6145649e6fa0e5c741fd4916f740e755":"My Friendly Little Island (World)","6156e8789ce8126c299892f34d2c9805":"Snow White and the Seven Dwarfs (Europe) (En,Fr,De,Es,It,Nl,Sv,No,Da)","617dcfac99f28045b8f4c46b9d75b58e":"Rampage 2 - Universal Tour (USA, Europe)","6181d450198ae4ec17f2aa86bbe2a1d1":"Pogo Pete (World)","618946a1d8d7154c200fe278ef030140":"Magical Drop (Europe) (En,Fr,De)","618be0636a482b1c5e5898e7cb5f1bb3":"Road Champs - BXS Stunt Biking (USA, Europe)","618e8914445053d1bd0901ad5297f927":"Tonka Raceway (Europe)","61d38e254879b2b99490573499a801b1":"Legend of Zelda, The - Link's Awakening DX (Germany) (Rev 1) (Beta) (SGB Enhanced) (GB Compatible)","61e893ad650d4f7003cd76ff55d244b4":"NBA in the Zone (USA) (Possible Proto) (SGB Enhanced) (GB Compatible)","620421795af2cb74429b9f2e30d9a38d":"Carrera (Europe) (En,Fr,De) (Proto)","62443f663965ba2f3a4181cd694d88a3":"Raku x Raku - Cut Shuu (Japan)","627c3542307661990802806ebd0acd90":"Oddworld Adventures 2 (USA) (En,Fr,De,Es,It) (GB Compatible)","628804db7252b7bb5a51f6aaea4b7077":"Checkmate (Japan) (En,Ja) (GB Compatible)","62922e55a0a4a4e9e90248ceb13b3c56":"Hunter x Hunter - Hunter no Keifu (Japan)","63073bf7cd416f5facbfe9e9d7d7e6c9":"Fireman Fred (World)","632793107d6a279a2f38236955353906":"Bomberman Quest (Japan) (SGB Enhanced) (GB Compatible)","634c5b73113b589530bc70cfb5ce3598":"Land Before Time, The (Europe) (En,Fr,De,Es,It)","636b1ae4118a8ae1a544b99fcd8d8cb1":"Ack Ack Attack (World)","637b90b33aeb3688187c6ac73db3488e":"Laura (USA)","637ece04f6c5f0c9f4871e5ed5255b0a":"Wink & the Broken Robot (World) (Beta 6) (GB Compatible)","63942b9b7ff673988fdbfbe8e1fdfc78":"Championship Motocross 2001 featuring Ricky Carmichael (USA, Europe)","639ae0f129bb98e17cc1b39e962cc43a":"Phantom Fright (World) (GB Compatible)","63b491b90be8a8ef9301c8b6557fa495":"Dusky Dungeon (World) (v0.1.0) (Proto) (GB Compatible)","63c3dd1377e60b2278ba4bf4c9b04f58":"Ice Age II (Taiwan) (En)","63f1430338d4f8053a34587429fb6b96":"Zoboomafoo - Playtime in Zobooland (USA)","641c8b63e7d9e31154b1f517e74b745c":"Gedou Jian Shen KF (Taiwan) (En)","64237b274859b5424353ca4bb3d6abda":"Tynesoft Commodore 16 Classics (World)","64396458bb3a82f26f522e85291b5fc5":"Caesars Palace II (USA, Europe)","644c2c3cf2dc2e3fce741844e497a18f":"Aladdin (USA)","64616a385482aeb9688a61fd7608b068":"Shuma Baolong 2 (China)","64a1264572a811e5e20831eff18f8ca3":"Shuma Baolong - Shuijing Ban (Taiwan) (Li Cheng)","64a63155c1500b50d6445558bd715787":"Super Fighters 99 (Taiwan) (SGB Enhanced)","64b533c76d258e5ee067a00dcebe700c":"Pokemon - La Version Esmeralda - Special Pikachu Edition (Spain) (Pirate)","64d2d5df9d0e5035ef549a189fbdb475":"Bug's Life, A (USA) (SGB Enhanced) (GB Compatible)","64e6738e474b22efd3132e786c18271f":"Dungeon Savior (Japan) (Rev 1) (Proto) (SGB Enhanced) (GB Compatible)","64f353e4310f83a5fbf2e211a63ec27e":"Pokemon Sapphire (Taiwan) (Zh)","64fa89b64514a71651c1b8dc629ba8f3":"Knockout Kings (USA, Europe)","651c7adc1d8cbcf2de53583f9d75195b":"Darklite (World) (Proto) (GB Compatible)","6556192c6fdfde1e7f7a538bb75ad6d9":"Taikong Zhanshi X - Fantasy War (Taiwan)","65973d7a1446346294f8ca9d2d1b7e66":"Tetris DX (World) (SGB Enhanced) (GB Compatible)","659b233dc37821379ec77f2e066a7619":"David Beckham Soccer (USA) (En,Es) (Proto)","65bd155f47eade36f7bd446cf58b9bdb":"Ultimate Fighting Championship (Europe)","65da43aef4c10cfd8feee70e842a46ae":"Monkey Puncher (Europe) (SGB Enhanced) (GB Compatible)","65ddb5e5db1b3f932d44a28c802e63cc":"Bob the Builder - Fix it Fun! (Europe) (En,Sv,No,Da,Fi)","65e85e5ad524ed60a9b0a8122a55d7af":"Sewing Machine Operation Software (Europe) (En,De,It,Nl) (Proto) (GB Compatible)","660fd044f1e744b8a208fc91481c030d":"Ou Dorobou Jing - Angel Version (Japan) (SGB Enhanced) (GB Compatible)","663eed7079113b1d1e1d7d40e9871cc3":"Powerpuff Girls, The - L'Affreux Mojo Jojo (France)","6655dde446c2f043ab9eafb0e2215086":"Tomb Raider 2 (Taiwan)","6660f1b04169b74397029f3ae3dab5e3":"Remen Gaoxiao - Shuma Guaishou III (Taiwan)","66a744231189d65db54aa4d670975c5a":"Army Men 2 (USA, Europe) (En,Fr,De)","66d0bd1c6da3c84e4d15b59a8a9db476":"Micro Machines 2 - Turbo Tournament (Europe) (Proto)","67117cc76e2b270e65c2778c734f905f":"Lion King, The - Simba's Mighty Adventure (USA, Europe)","671e9ad83a9f01cf7e04bb97bf757553":"Mojie Chuanshuo (Taiwan)","6736e0dc64fa3584ed48b1a9d845abcb":"Kisekae Series 3 - Kisekae Hamster (Japan)","6774580db542b838eff5a155128b7413":"X-Men - Mutant Academy (USA, Europe) (Rev 1)","67a4f5b76b83d37c888cb4de3293ca6d":"Crazy Climber (USA) (Proto 2)","67a76a42def402617d23961b3827d156":"G-Man (World)","67dd4724f032088506dc868078eb4e7e":"Puchi Carat (USA) (Proto 1) (SGB Enhanced) (GB Compatible)","67f1a15025b979833f4c5aa0ef561954":"Carl Lewis Athletics 2000 (Europe) (En,Fr,De,Es,It,Nl)","6800c72c57c0b85973262e45ddd48a6b":"Chaoji Jiqiren Dazhan X - Super Robot War X (Taiwan) (Alt)","6814576ee449d4119027dc4a85b92555":"Sesame Street Sports (USA)","6815ec13f522fd65637be46220371704":"Centipede (USA) (GB Compatible)","68242187b65166b5f8225b20e2021659":"Legend of Zelda, The - Link's Awakening DX (France) (Rev 1) (SGB Enhanced) (GB Compatible)","68271240c1b372f49b01adf583c91f83":"Mummy, The (Europe) (En,Fr,De)","68715e0a2805e3fc019fec35a9cff0d4":"Oddworld Adventures 2 (Europe) (En,Fr,De,Es,It) (GB Compatible)","688228b6718f9220f6e11db58a29220b":"E.T. - The Extra-Terrestrial - Digital Companion (Europe) (Proto)","68bffbbabc15da177c071eea0e055713":"Bakusou Senki Metal Walker GB - Koutetsu no Yuujou (Japan) (Rev 1) (Proto) (GB Compatible)","68c2e5e0b2f2f5d78c50515a1c6a47f2":"Days Without (World)","68cf797f26fdb624fd6a2e543a2f1c43":"Space Fleet (World) (Proto) (GB Compatible)","68e0db3785bc843790d6de9c3877003f":"Loppi Puzzle Magazine - Hirameku Puzzle Soukangou (Japan) (Rev 1) (SGB Enhanced, GB Compatible) (NP)","68e3ccbb7b37d60bc8c9d84a3c0a3b2b":"Shin Megami Tensei Devil Children - Aka no Sho (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","6902207e70e62fb38a07f49fcee77929":"Tasmanian Devil - Munching Madness (Europe) (En,Fr,De,Es,It) (GB Compatible)","691d6d252e22cbc7f039d0975582ca8f":"Land Before Time, The (USA)","693e77e4cd9c3845693f695a87f4444a":"Loppi Puzzle Magazine - Hirameku Puzzle Dai-2-gou (Japan) (Rev 1) (SGB Enhanced, GB Compatible) (NP)","695e4a82d1a97859365e3b5d5ba28e8c":"Catz (USA)","698c939536f83b474ce90351bae6a47e":"Rockman DX8 (China) (En)","699e1a69e9579545958f60106bb23a19":"DynaMike (Europe) (Proto)","69a6ebc942c7d0ecef2e514989debde6":"F1 World Grand Prix II for Game Boy Color (USA) (En,Fr,De,Es)","69b87b5555a44bcaba30b3f4a53275d8":"Black Onyx, The (Japan)","69c43b8daef3007b252824c22b3bf2ae":"Pandora's Blocks (World) (v1.8) (GB Compatible)","69c68b13bb0da057acbafe24e389e855":"Shrek - Fairy Tale Freakdown (USA, Europe) (En,Fr,De,Es,It)","69ebfa592721cd1d9c835d1b810b7266":"Powerpuff Girls, The - Panique a Townsville (France)","6a2a5ab0dc979f162cbfa4389d1cd71f":"Heroes of Might and Magic (USA) (En,Fr,De)","6a38f9f550a6858f7ced15ba03d2a8cd":"Super Nenas, Las - Lucha Con Ese (Spain)","6a5061a092cfd2c78b7fe65fdea15397":"Hamtaro - Ham-Hams Unite! (USA) (Beta)","6a6f5ec37846f1ee93caa37977e2a15e":"Shi Mian Maifu - Yingxiong Pian (China)","6acd649d8ab0ec4f26b8ca3930434264":"Street Fighter Alpha - Warriors' Dreams (Japan)","6ad6c159e20dfd12efbb3cf93a552909":"Smickeonn - The Game Boy Adventure (World)","6ae02bf9fc6765129b06734ac13e4da4":"Korokoro Kirby (Japan)","6af9bb4957485a0f5cebc9b44e805392":"Blue's Clues - Blue's Alphabet Book (USA)","6b02671ee66e3a9846db327f2b12e390":"Mirror Between Us, The (World) (GB Compatible)","6b055c6d12e477fbfd7bed1b495d56f7":"10-Pin Bowling (USA) (Rumble Version)","6b2118817985dbb1bb36a804a8240641":"Stuart Little - The Journey Home (Europe) (Fr,De)","6b3c4b0263becc3527f4a41e67588ef0":"Yinghan Zidian (Taiwan)","6b3ceb7bb280c0c0cb7543fe33925cb7":"Blade (USA, Europe)","6b63533c97a27dedc48aae58d4e47c1f":"Kisekae Series 2 - Oshare Nikki (Japan) (Rev 1)","6b648d40cb705fc139d045b124dfcf5e":"Foal's Creek (World) (v1.06) (GB Compatible)","6b7d527d4b2062ac2be2cab73aeebfe5":"TNN Outdoors Fishing Champ (USA) (SGB Enhanced) (GB Compatible)","6b94c050291c68d6fb13c642c46873ab":"Wizardry I - Proving Grounds of the Mad Overlord (Japan) (En,Ja)","6b953a346e1fe063d66d8a23f3bfa27d":"Polaris SnoCross (USA) (Beta) (Rumble Version)","6bb272f9361d57d9796cf2bb3615bf1a":"Gaiamaster Duel - Card Attackers (Japan)","6bbdbc468d32a31d21727ec0136ee419":"All Star Tennis 2000 (Europe) (AZTX) (Proto) (GB Compatible)","6bd1dea9af1ed4356c23043cb8af91ae":"Diva Starz (France)","6c024d8dcce9c86bab9dc16596794276":"Roi Lion, Le - La Formidable Aventure de Simba (France) (Rev 1)","6c0599a365bb7dffd2c9c67fa546c8b0":"Choro-Q (World)","6c34052ae5e516f8737982cb93a0845c":"Tweenies - Doodles' Bones (Europe) (En,Nl,Sv,No,Da)","6c7dc7ce74088a9e42a6fb8d98a67714":"Super Robot Pinball (Japan)","6ca4b011f72523dbd40d9ea470d2b4ea":"Pocket Music (USA) (En,Es) (Proto)","6cb5baab4f5d315b9e72a29f5ff8f89c":"Chaoren Tegong Dui (Taiwan)","6cc1cfbd1fc01b948e03f507c530260d":"Medarot 5 - Susutake Mura no Tenkousei - Kabuto (Japan)","6cd3ff8ceafd660a42d540eff59d4161":"Hunt the Gwumbus (World) (v2.1)","6cf89f96af36735e4f26247f93767afe":"Cross Hunter - X Hunter Version (Japan)","6d0d0d7de2730b9f9fdeeb4e202d5115":"Dinosaur (Europe) (En,Fr,De,Es,It)","6d1682824a006ddbde77527a2e62622a":"Puchi Carat (USA) (Proto 2) (SGB Enhanced) (GB Compatible)","6d320548645094a55aa2e6044aecd54f":"Pilgrim's Peril (World) (Demo 1) (GB Compatible)","6d450e010e7d293c743d6f62466b6004":"One Day (World) (GB Compatible)","6d51dcd9012c1140f73d7fd753698abf":"Beauty and the Beast - A Board Game Adventure (Europe) (En,Fr,De,Es,It) (SGB Enhanced) (GB Compatible)","6d6127ca9672dfb7435d6b4e9464725c":"Dragon Ball Z 3 - 2002 Fighting (Taiwan) (En)","6d6507bd38c76a9baa90b8e305ebea13":"Infinity (USA) (Proto)","6d66fe14e66911e36c483ecfccc01615":"Feed IT Souls (World) (v1.4)","6d7ec146b7c1a4a3bc1e948cd82abede":"High Noon (World)","6d8f9cd72201caabdfd0455a819af9ce":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","6d92fc307b0285b61a5b3ab0af991519":"Pokemon Jade Version - Special Pikachu Edition (USA) (Pirate)","6d9ab3b90805908d732c275157e29c79":"Animorphs (Europe) (En,Fr,De,Es,It)","6db4b6a1cceebc9ab2629c83a5c838ae":"Frogger 2 (USA) (Rev 1)","6dbc891774265f4bc8ccba65f9383aec":"Super Bombliss DX (Japan) (En) (SGB Enhanced) (GB Compatible)","6dbe685543a02c8a52ff08ef94d784b0":"Monty on the Run (World)","6def7d77e305997838c4b64b5163e3c2":"Snoopy Tennis (Japan)","6e0e4a0131c8bc9904955d97c02933d3":"2123 (World)","6e1b62771a0325ed755adf99a7b501ba":"Jaguar Mishin Sashi Senyou Soft - Kirby Family (Japan) (Proto)","6e2c510ef5562393cda32a807af4069a":"Another Adventure (World) (En,Es) (GB Compatible)","6e6eca68f57407cfb0040c57218064e3":"Chao Jinhua - Shuma Baobei D-3 (Taiwan)","6e863b582bddb6126bb63633f41befd8":"Tom Clancy's Rainbow Six (USA, Europe) (En,Fr,De)","6eab24805e2dea9c991d679fd00a5d87":"Medarot Cardrobottle - Kuwagata Version (Japan) (SGB Enhanced) (GB Compatible)","6eabc4876218996b5d9386fdad23cfc3":"Chaoji Jiqiren Dazhan X - Super Robot War X (Taiwan)","6ebb0ba4beacc1c846295996d92eda8c":"Zhihuan Wang 2 (China) (Zh)","6ebca05013af9c103aea798e0eb924c6":"Saru Puncher (Japan) (SGB Enhanced) (GB Compatible)","6efc4c27d06564f9000667c029ad02a3":"Asterix & Obelix (Europe) (En,Fr,De,Es)","6f0a4d09a4a40ca93a528f2409bb872c":"ATV Racing & Karate Joe (Europe) (Alt)","6f10189fd4a50c6a762eb7e77c52ef39":"Capybara Village (World) (v1.1) (Proto)","6f39124a6dfc3aaa28813286054a5fcb":"Pocket Color Billiards (Japan)","6f40be54d3680d87d36df07815e4c0c8":"Nyghtmare - The Ninth King (World) (v0.2.1) (Beta)","6f4b114b010c05ed286e4470d165abe2":"Kawaii Pet Shop Monogatari 2 (Japan) (Rev 1) (GB Compatible)","6f5aca1f721a92eb956286809f2af28d":"Loppi Puzzle Magazine - Kangaeru Puzzle Dai-2-gou (Japan) (SGB Enhanced, GB Compatible) (NP)","6f67b154450bd3d88924c179f8165721":"Godzilla - The Series - Monster Wars (Europe) (En,Fr,De)","6f77900a7f85480bd41c57d1c8ba1ce8":"Zook Z (USA)","6f94a1bf91839706d2ef586acc9a82c8":"Waternet (World) (Batteryless Save Flash Cartridge Version) (GB Compatible)","6fe80cdfcd6661467a6c1e6d607093de":"Fengkuang Dafuweng (Taiwan)","6fea46cebece96e6dbfb9d9d06ae4a59":"Digimon 02 4 (Taiwan) (En)","7039b471857d20f77a5ba7f48065ed53":"Hype - The Time Quest (Europe) (En,Fr,De,Es,It,Nl,Sv,Da)","7048098ff990c3f26a0f8937dc42e825":"Hopp It (World)","706062c2ab563e87ecd55b41ac4ca013":"Bingyuan Lixian Ji II (Taiwan)","70739bd1b6eb0ecb06fe5954f94d74fc":"Billy Bob's Huntin' 'n' Fishin' (USA, Europe)","70883b45a97984cb033c2b95028bef65":"Sakura Taisen GB - Geki Hanagumi Nyuutai! (Japan)","708f4c9e41d17b8f4fb11cc227fe9989":"Missile Command (Europe)","70a1de16d9a6b88f5ad6883eb658f285":"Pocket GT (USA) (Proto)","70a6a59623177ab1234f160d1ec7bb3f":"Pocket Monsters - Crystal Version (Taiwan)","70aa706f2831fe9736bf0ab76d925497":"Olympic Skier (World)","70ccaf1c458dc09b7c703191ef9b8541":"Konami GB Collection Vol.1 (Europe) (GB Compatible)","70e3ab7ef2061e7075d81aede74ea95c":"Roland Garros French Open (Europe) (En,Fr,De,Es,It,Nl)","7106845f7e0dca5abf221bd5765b587e":"Swing (Europe) (En,Fr,De,Es,It) (Proto)","71156f1794556acd255ae256d8195e32":"Mario Golf (Europe)","7146368b60c8291544ea5314747aed3b":"Test Drive 6 (USA) (Rev 1) (Proto)","71608f971986dd740c8e94f61f9cd020":"Pro Foot (France) (En,Fr,De,Es,It,Nl,Sv) (GB Compatible)","716de1a7f4178fd941edf22d1a907624":"Wacky Races (USA) (En,Fr,Es)","71844ae14b67fbe97b0ab5655e5a87b0":"What Friends Are For (World) (v2.0) (GB Compatible)","7187fe377729db40928fb6c6ee5a0809":"Koguru Guruguru - Guruguru to Nakayoshi (Japan) (SGB Enhanced, GB Compatible) (NP)","71a4659ae44b6594e75f98e013ce6853":"Love Hina Pocket (Japan)","71b5b10dd41f6c8449cb9ca52dd6e590":"Borbo's Quest (World) (GB Compatible)","71b646ac71dbae8984995ef51324f5f5":"M&M's Minis Madness (USA) (Sample)","72448fe75f534f70cd90469da95ef76f":"Pokemon - Version Argent (France) (SGB Enhanced) (GB Compatible)","728feea5c73b9bccd9dbbdde5fa88552":"Yu-Gi-Oh! - Duel des Tenebres (France) (Beta)","729934ddb7aa39779a456523a81b4a45":"Dragon Quest III - Soshite Densetsu e... (Japan)","72b6216fe3094d7798a359b9a4cdf7ed":"Taxi 3 (France)","72d6dc97291e659d0c36e977147c2fd2":"Karamuchou wa Oosawagi! - Okawari! (Japan) (SGB Enhanced, GB Compatible) (NP)","72e653c065ff90b33f77cffa78ebb11d":"True Color 25 in 1 (Taiwan)","7311f937a542baadf113e9115158cde3":"Mortal Kombat 4 (Germany) (En) (SGB Enhanced) (GB Compatible)","734f49ccbe8c131bf38e584a00ce7391":"Xtreme Sports (World) (Switch)","7351daa3c0a91d8f6fe2fbcca6182478":"Legend of Zelda, The - Link's Awakening DX (USA, Europe) (Rev 2) (SGB Enhanced) (GB Compatible)","73a78663a6388bf4d1c56e05bbf790d4":"Aliens - Thanatos Encounter (USA, Europe)","73bc46b4eb6e6924dc1b830e884a05f9":"Sangokushi - Game Boy Ban 2 (Japan) (SGB Enhanced) (GB Compatible)","73fca5b16e5d4d746ecabb8a9489cf48":"Tutti Frutti (World)","7455ea4fb9bc8ac752b4e43fd6864b7f":"Daiku no Gen-san - Kachikachi no Tonkachi ga Kachi (Japan) (SGB Enhanced) (GB Compatible)","745821122e423c09308ab2a97d645e20":"David Beckham Soccer (Europe) (En,Fr,De,Es,It)","748fa9419b35c0e8e43509457aaa1efa":"Game Boy Wars 3 (Japan)","74a6b62520a30ff28d5a7d19a7108c27":"Luca no Puzzle de Daibouken! (Japan) (SGB Enhanced) (GB Compatible)","74a74cfede8c9024c918e9038b5da47c":"Judy's Adventure (World) (v11.3) (GB Compatible)","74b9b221c2b32147422144b327bd5f30":"Tomb Raider (USA, Europe) (En,Fr,De,Es,It)","74c9fe928dd97ae193e9f937ce340dcc":"Harvest Moon 2 GBC (Europe) (SGB Enhanced) (GB Compatible)","74f0ca3425914df4af3210541ff619c8":"Looney Tunes Collector - Martian Quest! (Japan)","74f1d01cd75c5aaad93289e417a10c08":"Neclaus' Quest (World) (GB Compatible)","750640c9102e5e8b09af80601012fb05":"Adventures in Carnal Hell, The (World) (En) (v1.02) (GB Compatible)","7510fe2592accfa6ccd4745612e64f88":"Saban's Power Rangers - Time Force (USA, Europe)","7542ec9b695d4fe38adfdaaa57364d83":"Pokemon - Goldene Edition (Germany) (SGB Enhanced) (GB Compatible)","7545b127e8998e1e299289d79673ef63":"Ruby & Rusty Save the Crows (World) (Beta 3) (GB Compatible)","75519c8b57cea3ac91133b3dec7658de":"Pocket Monsters Gin (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","756664aa0c9418b200946aa4e1dddf53":"Blaster Master - Enemy Below (USA, Europe) (SGB Enhanced) (GB Compatible)","75b4f10c02a6797ab77a3a9a8f6ee237":"Pocket Puyo Puyo-n (Japan) (Rev 2)","75b4faffd8e9c0277b911d1d0e6ece6a":"Gift (Europe)","75be6e3561908e705d9e790b34eddb4d":"Tony Hawk's Pro Skater (USA, Europe)","75d839dd6c9231fb0c3104ba0060756f":"Diver 94 (World) (GB Compatible)","75e614f3741f6c5ca34efc52a2b35ed5":"Super Donkey Kong 5 (Taiwan) (En) (Rumble Version)","75e8c977bea49b53a3f3219e4cc23daa":"Gekido (Europe) (Proto)","75ea1034b4b26358e74874ad5f33dce4":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (Beta) (SGB Enhanced)","762954c946381fcc210bb19962fbfa1f":"Street Fighter Alpha - Warriors' Dreams (Europe) (Rev 1) (Proto)","762d6c94874d8ac894ad100c0a4b50ab":"Cannon Fodder (USA) (En,Fr,De,Es,It)","769f747801caa7ad653b74d3b62b43db":"Cavelon (World)","76a95fee3d90722fd935c7658512f5cc":"Game Conveni 21 (Japan) (GB Compatible)","76c04694db94b72afa78dd6612dfe4a9":"Bomberman Max - Yami no Senshi (Japan)","76e2195c8f2f35c5b88d73830bcb0a4c":"2003 Hali Xiaozi IV (Taiwan)","76fa4014bfbb0ee2b63267af7ac373f2":"Mr. Driller (USA)","77487f5bee8d40db42e7cd8800047919":"Spy vs Spy (USA) (En,Fr,De,Es,It,Nl,Sv) (Rev 1) (Proto)","7752b2476871760a8c00b06df93a89b7":"Guruguru Town Hanamaru-kun (Japan)","77724acf2c481f29e2edb1f538a47892":"Top Gear Pocket 2 (Japan) (Rev 1) (Proto) (Rumble Version)","77836df2b2ce5284e4dda233e118b914":"Zoids - Shirogane no Juukishin Liger Zero (Japan)","7784ff1a16b15e8e55a6b43159cc1774":"O'Leary Manager 2000 (Europe) (En,Fr,De,Es,It,Nl,Ca)","77893d4574b1013a0699c4199c271b8a":"Net de Get - Minigame @ 100 (Japan)","7792a07be51395a9f48043075c29c8d5":"Sanguozhi - Aoshi Tianxia (Taiwan) (Alt)","77c35992b64ab7f2642873a5f266ab79":"Muteki Ou Tri-Zenon (Japan)","781afd1e98b3743c835fcc16df624895":"Golden Goal (Germany) (En,Fr,De,Es,It,Nl,Sv) (GB Compatible)","782b88b1bf9768a2b1b139177a0c1c33":"Yu-Gi-Oh! Duel Monsters II - Dark Duel Stories (Japan) (SGB Enhanced) (GB Compatible)","7830328f323bd77d52a6985b1b10031f":"Metal Gear - Ghost Babel (Japan)","7877eb7a35465b50da15da1e4488663c":"Pokemon Gold (Taiwan) (En)","788cb84e59b3fbf571002cdf2220d845":"Super Fighters S (Taiwan) (GB Compatible)","789142292ee4dd3e2d55c444e04f58b4":"Cool Bricks (Europe) (Beta)","78959c37152e546c5c7c271ae418a453":"Daikaijuu Monogatari - Poyon no Dungeon Room 2 (Japan)","78b152baf4c60314eb96d4d433a3d8f3":"Back to Nature (World)","78f920f4e9174cd3382294129d30f373":"Snobow Champion (Japan)","7902c1e217d8a99d1f9d5b31fd1aa7e2":"Super Jacked Up Tomato Face Johnson (World) (v2.2)","79057202277940eb8a37257ebcb513c3":"POWA! (World) (Ja) (GB Compatible)","793c57f58d4e9c92088c333b129d1c7e":"Dear Daniel no Sweet Adventure - Kitty-chan o Sagashite (Japan) (SGB Enhanced) (GB Compatible)","7971c95ad9745fe20df52e03cd52f636":"Metal Gear Solid (Europe) (En,Fr,De,Es,It)","7984a4468bc3822caa6773075429ca74":"Lightseeker (World) (GB Compatible)","79aece8a042e4fa57aba9455c4d21a97":"Pocket Monsters Kin (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","79b84a54581ca90b245619522c09e523":"Roadsters (USA) (En,Fr,De,Es,It,Nl) (GB Compatible)","79b855a4daf613f1906f7bf423565c5e":"Minna no Shougi - Shokyuu Hen (Japan) (Rev 1) (GB Compatible)","79d382d378d49695e9867ede063eff17":"Roswell Conspiracies - Aliens, Myths & Legends (Europe) (En,Fr,De)","79e619a79be12b6ac59ae6d4602ffa5e":"Ronaldo V-Soccer (USA) (En,Fr,Es,Pt) (GB Compatible)","79f6386969a59d4974aece5dc7ed1f3f":"Razor Freestyle Scooter (USA)","7a0eadc011668df92933dec1e5b316b0":"Grimace's Birthday (World) (v1.4)","7a36423ec39604d7043336af71145010":"CyberTiger (USA, Europe)","7a58b84e406bd4df6b3c3b8807493aa8":"Pooh and Tigger's Hunny Safari (Europe) (En,Fr,De,Es,It,Nl)","7a826122ccc3818dce9a8e8db6d77edb":"Tom and Jerry in - Mouse Attacks! (USA)","7aa123c53442881d101036559e704dca":"Green Beret (Unknown) (Proto 1)","7acb577a59abc74234754569d49d854a":"Monkey Magic (World)","7b29bf304be1f747c83cf516239b9c61":"Pocket Bowling (Japan) (En) (GB Compatible)","7b312af167e073c60061d843198e724c":"GPC Rally (World) (v1.1)","7b4345daf8ebda416a84c5932bf817ec":"Godzilla - The Series (USA) (En,Fr,De) (GB Compatible)","7b5b0ba31464c55c6d6584e9288d6978":"Powerpuff Girls, The - Bad Mojo Jojo (Europe) (BJJX) (Proto)","7b671745f13bcc3abaa2d9351fc22f8f":"Tasmanian Devil - Munching Madness (USA) (En,Fr,De,Es,It) (GB Compatible)","7b82761db0d43066610abc5429e0d598":"Sanguozhi - Aoshi Tianxia (Taiwan)","7bbd65416ced257da963faa58536cf84":"Burai Senshi Color (Japan)","7bcf428844d32b279b7c25fb98f98a73":"Lode Runner - Domudomu Dan no Yabou (Japan) (GB Compatible)","7bf3b13931f2a50ebe071a18ea14f28b":"Gold and Glory - The Road to El Dorado (USA)","7c27756ee209e70e5d5c5b3e3cba01d1":"Taikong Zhanshi DX3 - Zuizhong Huanxiang (Taiwan)","7c513823f65b92a75e29067745839cc8":"Pokemon - Versione Cristallo (Italy)","7c700360a46f54796802ca7c7bf499c5":"Ganbare Goemon - Mononoke Douchuu Tobidase Nabebugyou! (Japan) (SGB Enhanced) (GB Compatible)","7c80aaf5cf8c1dfaea7a88b39b12c295":"Starseed (World) (GB Compatible)","7c8391e85de79338fc3ae4e5f72d5514":"Gunslinger (World)","7c95103dce318c28b5869984bee4cf8a":"Hightail (World) (Demo 4A)","7cbe6832545e4bea48f8f93b51451273":"Nv Wang Gedou 2000 (Taiwan)","7cf3670a8f345344e4789e41503d7da6":"Lucky Luke (USA) (En,Fr,De,Es)","7d15277dd347fa75d36e5f78a06a5504":"Daisu-ki (World) (v1.1.1)","7d54e3982090c614495c5f470a4cdd11":"Game Boy Camera Gallery 2022, The (World) (GB Compatible)","7d66c7afad2a454926a4d835276bf0ec":"Ghost of the Arcade (World) (v1.7)","7d78cacd5eee9569ebc1b85ff9f05c90":"Hamster Club - Awasete Chuu (Japan)","7d9585c947a7637703fb8ccd6a691ed7":"Top Gear Pocket 2 (USA)","7dae13af3d7373116e7c7558bc402bef":"Perfect Choro Q (Japan)","7de54692e7b42e945b318d20079a5efd":"Grand Theft Auto 2 (Europe) (En,Fr,De,Es,It)","7e0bc856feb59566d167350fc1a1775a":"Emperor's New Groove, The (Europe) (En,Fr,De,Es,It)","7e0df312ccd8f3e25bf3074e17d5aedf":"Worms Armageddon (USA) (En,Fr,Es)","7e32dc8b60413cfaa24f941691e545d2":"Megami Tensei Gaiden - Last Bible II (Japan) (SGB Enhanced) (GB Compatible)","7e35f36f4e91088ab85c4acee89e4157":"Ninja Master (World)","7e667e8c8aa169e5b1bd1e09ec4c0b91":"Swordsman on the Eternal Journey (World) (It) (v1.01) (GB Compatible)","7e6d077d50879c57ff70891aaa312e80":"Pop'n Music GB - Animation Melody (Japan)","7e8280463d7ac79662d8be587bb6b766":"Moorhuhn 3 - ...Es Gibt Huhn! (Europe) (En,Fr,De,Es,It)","7e9f03dcbf376fb935553684d6c7d8f5":"Medarot 4 - Kuwagata Version (Japan)","7e9fd020f578c846fa3ae1d39d0a4671":"Legend of Zelda, The - Link's Awakening DX (Germany) (Rev 1) (Beta) (SGB Enhanced) (GB Compatible)","7eb08ef6d67164251eeeabf537fedccb":"Pokemon Trading Card Game (Europe) (En,Es,It) (SGB Enhanced) (GB Compatible)","7ed224aa3117d2aee48ea72bacefd13e":"Slime's Adventure (World) (Proto) (GB Compatible)","7ee095116f1733dc6ba2b2de3f28f5ef":"Samurai Kid (Japan)","7efce91cccc497e6cd816508ddec3437":"Potbound (World) (Proto) (GBJam 10) (GB Compatible)","7f0d28d7c0268b55bb8682224c178308":"Doraemon no Study Boy - Kuku Game (Japan)","7f1830171eec29ac72ae976d4dfdfc65":"Frogger (USA) (Rev 2) (GB Compatible)","7f306f573ca9759fa2f7aa167ca2dd74":"Dance Dance Revolution GB 2 (Japan)","7f41fb9c4f9627828b6a1ae958a8c0a9":"Chaoji Yinsu de Xiaozi II - Super Sonik II (Taiwan)","7f6c3f5388d3bcc0d02e8a2ea0d5e988":"Doraemon no Quiz Boy (Japan) (Rev 1)","7f8c472f3c7bd1eec56a3bad10a2e94c":"Little Mermaid II, The - Pinball Frenzy (USA) (En,Fr,De,Es,It) (Rumble Version)","7f9dbafd6d16957e9687f89e33765f0b":"Network Boukenki Bugsite - Alpha Version (Japan)","7fa5a6dde384652120b46475b193dff9":"WWF WrestleMania 2000 (USA, Europe) (GB Compatible)","7fb36e36e1ba06bd222c31163213c426":"2002 Adventure Digimon 7 (Taiwan) (En)","7fbbfa00a51547639750e69ff802fa76":"Bugs Bunny et le Chateau des Catastrophes (France) (En)","7fd49763f6a8aceb6aea4cfe601a8b10":"Magical Tetris Challenge (Europe) (En,Fr,De,Es,It,Nl,Sv)","7fe77698974780fec4566d30d183a206":"PlayTime (World) (Proto) (GB Compatible)","8040970140b2e728a0078504c2bcd908":"Super Mario Bros. Deluxe (Japan) (NP)","8076243ea44e1885a9981682fe621eee":"Stars of Zureon (World) (Proto 1) (GB Compatible)","807c2f4a7698ee02ee06169a9e3423d9":"My Friendly Little Island (World) (GB Showdown) (GB Compatible)","808a86f3b113ece265bf882293310042":"Menghuan Moni Zhan II (Taiwan) (Zh)","809059ad595bec85ffc7ba37eba29204":"Pro Darts (USA)","809251d6205bc712211fbcab55190a3a":"Top Gear Pocket (USA) (Rumble Version)","809ec52e50279a174a4908e3ea46dcf6":"Game Boy Gallery 3 (Australia) (SGB Enhanced) (GB Compatible)","809fd84f0c8f4ace455ad40930aff59e":"Maus, Die - Verrueckte Olympiade (Germany) (Beta)","80cf4b05b2a0388a804e54f433cdd126":"Rugrats - Totally Angelica (USA, Europe)","80dd8c9ce55ee28c0a3ef44ea317ea17":"Croc (USA, Europe) (Beta 2)","8109642fb056dbf806c66acac8cfc0e4":"Cat Boy's Stellar Journey (World) (GB Compatible)","814042bfbc1ec31e5f992bde98ed613e":"X-Men - Mutant Academy (Japan)","81433716e1a23aefe5de0fc03ef55519":"Microsoft - The Best of Entertainment Pack (USA)","8150a3978211939d367f48ffcd49f979":"Tintin au Tibet (Europe) (En,Fr,De,Es,It,Nl,Sv)","816ce6275d9d5c78b8497e8d0b6a9ece":"Sylvanian Families 3 - Hoshi Furu Yoru no Sunadokei (Japan)","8187bb1e84f676f110bdf2166b4498d2":"Tiny Toon Adventures - Buster Saves the Day (Europe) (En,Fr,De,Es,It)","8190d7454206e1b8966c9b074eabc359":"Taikong Baobei (Taiwan) (Sintax)","81ae87adbbd59bd8bbb86040fbc530fe":"KnockOut (World)","81dd8a336e1b1b705235a7b20a536bc0":"Quest for Camelot (Europe) (En,Fr,De,Es,It,Nl) (SGB Enhanced) (GB Compatible)","81f4cbffbed0638f59a16203c07e364b":"Hamster Paradise (Japan) (SGB Enhanced) (GB Compatible)","81ff698f38896239d2d68fe1074038cc":"Daisu-ki (World) (v1.2)","820e0a19275fabc03fe619c42db47179":"Star Ocean - Blue Sphere (Japan) (SGB Enhanced) (GB Compatible)","821355e18a306e73ee015ab0ba8510b0":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (Beta) (SGB Enhanced)","821f70db4753f0b59a798b9de91cecfc":"Sesame Street Sports (Europe)","825de040ea4dff66661693f8712b1bdb":"Legend of Zelda, The - Oracle of Ages (Europe) (En,Fr,De,Es,It)","8268ae026f73e834f52ee8291bb125b8":"Ultimate Fighting Championship (USA)","82880772ebd67b839c497dfe4308a0a0":"Jim Henson's Bear in the Big Blue House (Europe) (En,Fr,De,Es,It,Nl)","828fa006f4913138bfb964b6685e3463":"Silent Hill 2 - 20th Anniversary Demake (World) (Proto) (GB Compatible)","829da007514e8a1ccc7efe6a7ee5226f":"Barbie - Magic Genie Adventure (USA)","82bd1d9171e60f147d9eeea13ef07a12":"Pocket Monsters Geum (Korea)","82cf6939eb9f1b4da785d8abc321f5e5":"Shoot It (World)","82d17beb1aefd1b93621d6fa61dfa1cb":"Metal Walker (USA) (GB Compatible)","82f9d9b020099e908ef588e1a9de5bb3":"Wing Warriors (World) (En,Fr,Es) (EGS) (GB Compatible)","83087e1a3fa7160a59ee7e4f0b5c3671":"Hoyle Card Games (USA)","830af5154de56ec668db1dd661d4c661":"RunieStory (World) (GB Showdown)","8339e84709ea33723fd11ed2f3e1abee":"Tetris Adventure - Susume Mickey to Nakama-tachi (Japan)","8347efb46014904144d40510d5c9fa05":"Chi to Ase to Namida no Koukou Yakyuu (Japan)","834fb201a446065c06e34f192f8586d0":"Dragon Tales - Dragon Wings (Europe)","83b67b8a10f704a9e3e7ca3814e5b3ca":"Mr. Nutz (Europe) (En,Fr,De,Es,It,Nl)","83ba49181a4eeb41e9628546a2dede19":"GPC Rally (World) (v1.0)","83c090899d4f9d7249249d7f8ec6be09":"Wing Warriors (World) (En,Fr,Es) (Beta 1) (GB Compatible)","83e34702e7c38cd36b506d1084e5ab97":"Monster Traveler (Japan) (Possible Proto)","83f1b6f79b8f0fecc4427efc9fa7d732":"Classic Bubble Bobble (Europe) (SGB Enhanced) (GB Compatible)","83f1f765efdd8d41cdd4f63edce42aff":"Grinch (Japan)","83f735d3357a32576516f6e20b5b7f19":"Rockman X2 - Soul Eraser (Japan)","83f791645ce282093a9d59c121ffc49d":"Mario Golf (USA)","840e1ddb2696ecae487fd264a3c34581":"Perfect Dark (USA, Europe) (En,Fr,De,Es,It) (Rumble Version)","842b07d0add5a3a88bd55653331671dd":"Hello Kitty no Beads Factory (Japan) (SGB Enhanced) (GB Compatible)","84973a134e9e4245d8138ac11807ca3f":"Get Chuu Club - Minna no Konchuu Daizukan (Japan) (Rumble Version) (SGB Enhanced) (GB Compatible)","84a0fe6c3fb014cf43c119c344f99965":"V-Rally - Edition 99 (USA) (En,Fr,Es)","84b71ee450ba95087d2194d17dd3bf1f":"Sanrio Timenet - Mirai Hen (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","84ee1ac070c9695b6d422adb5525db85":"Top Gear Pocket 2 (Japan) (Rumble Version)","84eede6bb298dd354f251eccb1259316":"Pocket Music (Europe) (En,Fr,De,Es,It)","852d68f167a5957f5e73954763f36ada":"Pokemon Pinball (Japan) (Rumble Version) (SGB Enhanced) (GB Compatible)","853eb2ec6feb27869b7af78f929fe7d2":"Legend of Zelda, The - Link's Awakening DX (USA, Europe) (Rev 2) (Beta) (SGB Enhanced) (GB Compatible)","8565f7b388a1741fe41a8c972d95869e":"Barbie - Avventure nell'Oceano (Italy) (GB Compatible)","85bbad46380dffa631f8ce732e9c5d89":"Spider-Man 2 - The Sinister Six (USA, Europe)","85be569fe89f58c40f60480313314c67":"Pocket Monsters Kin (Japan) (SGB Enhanced) (GB Compatible)","85c0c028e6177cda40401f14d16699f4":"10-Pin Bowling (Europe)","85e78f08c579b8c1d2e4c205a7711494":"Yurivania III - Circle of the Polycule (World) (v1.4)","8624db7ac6f7040b9001a87cc44f1fa9":"Legend of Zelda, The - Link's Awakening DX (France) (Rev 1) (Beta) (SGB Enhanced) (GB Compatible)","86316563964ab9314350c99765a2454d":"Xiao Taiji - Shenhua Lixian (Taiwan)","8632a46ba831eff50d1ac5fb00faab84":"Nyghtmare - The Ninth King (World) (v0.2.6) (Beta)","866994b67b78c02b70573076b27d18fb":"Space Invasion & Karate Joe (Europe)","866dca02365fd72f9ad396dca758d8b5":"Who Wants to Be a Millionaire - 2nd Edition (USA)","867971b1e3b751a6b736d03793241176":"Tweety Sekaiisshuu - 80 Hiki no Neko o Sagase! (Japan)","8691333d9fd10c3bc65bc5577856a72b":"VOX (World)","869d388027e0498e3d9994b0dc71984a":"Ken Griffey Jr.'s Slugfest (USA)","86c1b5f04495e22eedbec15e1a320ff3":"International Karate 2000 (Europe)","86cc962b8a8d51b589d86b2b71bd7e23":"Catwoman (Japan) (Proto)","86d769e211c85c1ac956c4556e77f8f3":"Powerpuff Girls, The - Battle Him (Europe)","86ed74283fe0071f8d3f05923051efab":"Revelations - The Demon Slayer (USA) (SGB Enhanced) (GB Compatible)","8707ad4ad9645d2dcfb33821697173a6":"Ganbare! Nippon! Olympic 2000 (Japan)","87397db3151f3dd5b53cdfbb24a98588":"Antz Racing (USA) (En,Fr,De,Es,It,Nl)","87422721dd67b96736861358c71d5a8b":"Tonka Construction Site (USA)","87599b7f88ae1680b490251cfd417792":"Test Drive 6 (Europe) (En,Fr,De,Es,It) (Sample) (GB Compatible)","8765ee1fe94c16e934ea0d004291e8b0":"Portal Runner (USA)","87a6f7ccb23054b225998225b5ea4089":"Nyghtmare - The Ninth King (World) (Free Version) (GB Compatible)","87a9da6697ed8695141f0ef84a0e26e8":"NBA Jam 2001 (USA, Europe) (Beta)","87b211fe7e0b8080961ddd26245ca1a5":"Pro Pool (Europe) (En,Fr,De)","87c5862edce9eae3d6afe964bfed5204":"WWF Attitude (USA, Europe)","88206c0a37bc9c6d42745211e0c18681":"NBA Show Time - NBA on NBC (USA) (Rev 1) (Proto)","882a7b4d2cadedd7ed2e21d22ca8f93d":"Daffy Duck - Fowl Play (USA, Europe) (GB Compatible)","88938327f7a5a8d11470d14d17f412b3":"Momotarou Densetsu 1-2 (Japan)","889e643c52ca6916a4948f4d1b8b955b":"Bouken! Dondoko Shima (Japan)","88babaabfc8c65454dd11590ff5c9f33":"Waternet (World) (GB Compatible)","88e01db4aee70b3c48324f991d149a2a":"Sylvester & Tweety - Breakfast on the Run (Europe) (En,Fr,De,Es,It,Nl) (GB Compatible)","88ee129f5f61078d8649e2134b2e78a3":"Robot Poncots - Sun Version (Japan) (SGB Enhanced) (GB Compatible)","88f1e88f141ded3b81d0d8789cbe7b5c":"Shuihu Shenshou (Taiwan) (Alt)","890733af5a3766bc1954c186d8f9ba65":"2003 Shuma Baolong - Gedou Ban (Taiwan)","8907aab5acf0ed74753d6f573e81be91":"Boarder Zone (USA)","890cc599a9ec49d5adf1cd225ebd233c":"Woody Woodpecker Racing (Europe)","8920d396b06f733dedc512007f4ef60a":"Chumbles Bumbles (World) (v1.2) (GB Compatible)","8931758738e8a662c88910fd2d33d365":"Pokemon - Crystal Version (Australia)","8940ba032d30f87e6956fbd8009420e3":"WCW Mayhem (USA, Europe)","89bb59dc49b59b0cd30b7384d9860bb8":"Pokemon - Versione Oro (Italy) (SGB Enhanced) (GB Compatible)","89d563bcc7b6f2f087cdafa8a78a8aa7":"Gex 3 - Deep Cover Gecko (Europe) (En,Fr,De,Es,It)","89de435cb69325b42d569015ca09f49f":"Barbie - Ocean Discovery (USA) (GB Compatible)","89de6d072a545f21fb6390f3b9e007d9":"Beach'n Ball (Europe) (En,Fr,De,Es,It) (Beta)","89e7aaec31f7d725864ecd9ebd47387a":"2003 Pocket Monster - Carbuncle (USA)","89f251b40b2420ae1dde4d22ca01ed72":"Tabaluga (Germany) (GB Compatible)","89fff31f11da93a6f1a3045f8ea088b3":"Tycoon Tex (World)","8a0bf3dec344271e01979cee50299897":"Crazy Climber (USA) (Proto 1)","8a626340f6b16ba45c1d4e07f2134875":"Pokemon - Edicion Cristal (Spain)","8a7f483857e251d56a16594ca84d1a7e":"Resident Evil Gaiden (Europe) (En,Fr,De,Es,It)","8ac8f913b5f1e31582de191b367648a9":"Hunter x Hunter - Kindan no Hihou (Japan)","8acdfec71941940bcb1410143254228f":"Snooze (World) (GB Compatible)","8aeedaab8a1df0bc26fae53b2b606b1f":"Qunxia Zhuan II (Taiwan)","8b01ed48b1f51f57cfba2f3024fa60d8":"Wings of Fury (USA) (GB Compatible)","8b071ddfa74c3969320acc839a03395f":"Shuma Baolong - Koudai Ban (Taiwan) (Alt)","8b25ad9bd8ecd09a346c736011ea612b":"Mahjong Quest (Japan) (SGB Enhanced) (GB Compatible)","8b3958e2d61921c787c9a40f4d3f13c0":"NBA in the Zone 2000 (USA)","8b437e964ca98e785010160160cf380a":"Super Gals! Kotobuki Ran (Japan)","8b6e5d99ca3267b8a22dbdef0f50565a":"Munch It (World)","8b8064a09b8fc56182ab423ebad9381b":"Looney Tunes Racing (Europe) (En,Fr,De,Es,It,Nl)","8b9a9f5125206b262348356be15bf598":"Inspector Gadget - Operation Madkactus (Europe) (En,Fr,De,Es,It,Nl)","8bf8f9a1e0080d257820ec5506a3fc8f":"Mat Hoffman's Pro BMX (USA, Europe)","8c0212d475d0ac89e5821291abf87816":"Return of the Ninja (World) (Limited Run Games)","8c188939044778f311bdaf2bc9aca076":"Tsuri Sensei 2 (Japan) (SGB Enhanced) (GB Compatible)","8c3bcd751ebc34abc02e666d8ff057c4":"Front Line - The Next Mission (Japan)","8c41132cb09279febe26e21bd3f1a120":"Primera Division Stars 2001 (Spain) (Proto)","8cbb9b7401be513c913a3a54eee0da54":"NBA 3 on 3 Featuring Kobe Bryant (USA) (SGB Enhanced) (GB Compatible)","8ce641b1efbf76cc5f2a841942345a0f":"Kawa no Nushi Tsuri 4 (Japan) (Rumble Version) (SGB Enhanced) (GB Compatible)","8d0a97cc2c5235656e722b0fb9627504":"Wizardry II - Llylgamyn no Isan (Japan) (En,Ja)","8d222a58636551f679177e37c83eb134":"Nakayoshi Pet Series 5 - Kawaii Hamster 2 (Japan)","8d2a6b487aade7ca05696548c2efb181":"Minna no Shougi - Shokyuu Hen (Japan) (GB Compatible)","8d4b4907e207a824a065b0012b22c62c":"Doug's Big Game (Europe)","8d4e41eb71dda41ef945512eb3b53fb3":"Bugs Bunny - Crazy Castle 3 (Japan) (GB Compatible)","8d9c413f30885be0bb0fe08a1817c842":"Pocket Bowling (USA) (GB Compatible)","8db0381e11b2acb529d6534b97ab967b":"Rockman (World)","8dbab7618855360b2029bdf2841067ab":"Loppi Puzzle Magazine - Hirameku Puzzle Dai-3-gou (Japan) (SGB Enhanced, GB Compatible) (NP)","8dc38a2906306949576e60b8d4babc5f":"Sweet Ange (Japan) (SGB Enhanced) (GB Compatible)","8dfe7db1a07feae65f521a4403ba9d8e":"Larion's Tinker Toys (World) (Proto 1)","8e1c9863cf7ad15c824f2af6acf130c4":"International Rally (USA) (SGB Enhanced) (GB Compatible)","8e23226758be3ae7a83803f9147ada5e":"Jimmy White's Cueball (Europe)","8e7298d92bd4eaec572a7f1bcb223200":"Deadly Skies (Europe) (En,Fr,De)","8e79dcdee0e15ef069b3f376a0fee37d":"Dragon Warrior Monsters 2 - Tara's Adventure (USA) (SGB Enhanced) (GB Compatible)","8e7d7b91c08169d779fda0a49c4dd3b7":"Hamunaptra - Ushinawareta Sabaku no Miyako (Japan)","8e8b42b33f5c0867a9bcaf8374fdc337":"Dragon Ball - Final Bout (Taiwan)","8eb8951d69263571392192bf3d928099":"Space-Net - Cosmo Red (Japan)","8ee55a0ad476a0497a483a30c0b28316":"Mr. Driller (Europe)","8f293537e992cb718f0d055c6d08f882":"Pocket Color Block (Japan) (En) (SGB Enhanced) (GB Compatible)","8f3a309320bceffbee2b430e5bb5de4f":"Pocket Smash Out & Race Time (Europe)","8f43bc56783f98e97fe7f51603c1a025":"Oide Rascal (Japan)","8f490735c17b983c2e2fbc3a9425ffe7":"Ungrateful Son, The (World) (v1.1) (GB Compatible)","8f569486abff8a5a5356956f4fe47212":"Pact, The (World)","8f9c21b8e8ff2cd19c1cfd9743d5509e":"Yixing VS Tiexue Zhanshi (Taiwan)","8fbc58ce16cc0c571eb43a8038c97e83":"Colin McRae Rally (Europe)","8fd828532500c3d3e893fe86b725ade3":"Pac-Man - Special Colour Edition (Europe) (SGB Enhanced) (GB Compatible)","8fe6340c822daa9cb07c7d8ab8509751":"Project S-11 (USA)","8ffcf9da76aa9ba1c5b1789a92f47d21":"Midway Presents Arcade Hits - Moon Patrol & Spy Hunter (USA, Europe) (GB Compatible)","900f66d94349339d3b416b5ff0806314":"20 Second Platformer, A (World) (v1.1) (GB Compatible)","9017ebe4c004fd9597557e28d711316a":"NSYNC - Get to the Show (USA)","90280833c156e2ca8e4eaa29adf369b2":"Shadowgate Classic (Europe) (En,Fr,De,Es,Sv) (Rev 1) (GB Compatible)","904929235f090aa2c875a10f6f5d5e64":"Katakis 3D (Europe) (Proto)","906c78f13135691d300aa6d23dc58037":"Space-Net - Cosmo Neo (Japan) (Proto)","9094e49551e838184d0c9290b1ef3694":"36 in 1 (Taiwan) (SL36-0032)","90c8448a9a4edf4ea6a265d5b4560191":"Dragon Ball Z - Guerreros de Leyenda (Spain) (Beta) (All Unlocked)","90d9ddb15cc652fcd3a158a54ece8808":"Xtreme Wheels (Europe)","90dfd51f7a508a4fac1608fb7a44317f":"Seme COM Dungeon - Drururuaga (Japan) (GB Compatible)","90e6f6d8989d241d386bb1c021687099":"Potbound (World) (Proto) (GB Compatible)","90eb27deb7ab0aaae19c393690e234c0":"Gedou Qi Long Qiu 2002 (Taiwan) (Zh)","90ecc5fb29cc95d58c33d44fe630d12e":"Puzzle Master (USA) (GB Compatible)","90f41034a9d4928bdf4b56d2e5c9b62c":"Fire Ant (World)","90fb966cbb46d038ec7d74b2f3f6487f":"Tintin - Le Temple Du Soleil (Europe) (En,Fr,De) (Beta)","9108d1246f11d0e0f2cec608e79efd65":"Puzzled (USA)","9146fdd44befde06269c9c1642678c94":"F-1 World Grand Prix (Japan) (En) (Beta 1)","916042289eeb231324ccd9bc57c7c254":"Taxi 2 (Europe) (En,Fr,De,Es,It,Nl) (Proto)","916d740fc366ecbf9e5626218e56562d":"Wetrix (Europe) (En,Fr,De)","917ec38fa03325cbbd527ac3465611c1":"Legend of Zelda, The - Link's Awakening DX (France) (Beta) (SGB Enhanced) (GB Compatible)","91889ebca9b20510ece17eabdf2f071a":"Suske en Wiske - De Tijdtemmers ~ Bob et Bobette - Les Dompteurs du Temps (Europe) (Fr,Nl) (Beta 2)","919c330030214de201278fc6a232a661":"SD Hiryuu no Ken EX (Japan) (SGB Enhanced) (GB Compatible)","91eb6db42e92e2df05cc2b40f0dbc2f0":"Gex 3 - Deep Pocket Gecko (USA)","91fd1e446ef8af51080409b7940391e9":"Toonsylvania (Europe) (En,Fr,De,Es,It,Nl)","921074a40d44b70db878f88f7c3b51de":"Bomberman Selection (Korea) (Beta 1)","9253aae0d9257d82f52d879813cf3c19":"Turok 2 - Jikku Senshi (Japan) (GB Compatible)","92637d816181b2515f2c78f30fa41e4e":"Jibaku-kun - Rei no Itsuki no Kajitsu (Japan) (Proto)","92978c96b2368e4aebd84966af8bd06f":"Pop'n Music GB - Disney Tunes (Japan)","929b5bfc4506e14d4abe958091af9cbe":"Adventures in Carnal Hell, The (World) (Es) (v1.02) (GB Compatible)","929b9a2332cb7c1d74692c3a65ffbe99":"Super 16 in 1 (Taiwan) (En) (Sachen)","92d36245a65305a209700608971b0597":"Trade & Battle Card Hero (Japan) (SGB Enhanced) (GB Compatible)","92e01e78a83c86c22ee1dcbbf4c7c2f4":"Monopoly (Japan) (SGB Enhanced) (GB Compatible)","93226ce541766d8b8b7d1f70866ad530":"Austin Powers - Welcome to My Underground Lair! (Europe) (En,Fr,De,Es,It)","9324855fef2227a4410725ed20845bfb":"Dragon Ball Z - Guerreros de Leyenda (Spain)","9354cc341aa23da3e29829da76b8888e":"Shin Megami Tensei Devil Children - Shiro no Sho (Japan)","9357c3dab850692ac8184ccf655d4efd":"Pokemon - Versione Argento (Italy) (SGB Enhanced) (GB Compatible)","9361a8850493dcfd7209b16052c8f9f0":"Xin Shediao Yingxiong Chuan (Taiwan)","93644489ccccff6f5fbe1489fa67b0e4":"Raffles (World)","93671715c210c20ce3a6a1d47de86382":"Equestriad 2001 (Europe) (Proto)","93d1eae88ac42199afa4e45a9900182d":"Retro Quiz Tower (World) (v1.2) (GB Compatible)","93dbee715a523e2081a17c44d7a16459":"Pokemon Trading Card Game (Europe) (En,Fr,De) (Rev 1) (SGB Enhanced) (GB Compatible)","93ff3f6b4bfe0a138d8a8897899e8cb0":"Quest - Brian's Journey (USA) (GB Compatible)","943d6c35c9b43494b90ffbde49eac53f":"Merlin (Europe) (En,Fr,De,Es,It,Nl)","9462bc81907e38c59acccd739690e6f9":"Pokemon - Edicion Oro (Spain) (SGB Enhanced) (GB Compatible)","94716503c16f0387f9f78962bca5b30c":"Microsoft - The 6 in 1 Puzzle Collection Entertainment Pack (Europe) (En,Fr,De,Es,It)","947f96cfd5bab7a03ec2f3fc0ae9238d":"Dragon's Lair (USA, Europe) (En,Ja,Fr,De,Es,Zh)","948f4ff45e8c3a7cd94c08aeac6dbef5":"Forest of Fallen Knights (World) (GB Compatible)","94a53f23bf6200905006082508ea43bf":"Bubble Trouble (World)","94ae7f7e9135b2ba30365e91030a8779":"Mount Vesuvius (World)","94cdb66509527746395b3eed6b16fd73":"2003 Crash II Advance (USA)","94d2aa3fbda301f9c0d0c16e00743183":"Commander Keen (USA, Europe)","94e1575453f54cbe157d13eae6e78d92":"MTV Sports - Pure Ride (USA, Europe)","94f4306cb0c27686661e37a96eef730b":"Chee-Chai Alien (Japan) (Rumble Version)","9562a0aad16857f2f1a8e4169163c18a":"Looney Tunes Collector - Martian Alert! (Europe) (En,Fr,De,Es,It,Nl)","956b38b3692985fbd2850d8983916ddb":"GameShark MX (USA) (v1.02)","957b3a018cd37a886ea3d0f956e966b0":"Wing Warriors (World) (En,Fr,Es) (Kitmaker) (GB Compatible)","958670daeccc225fe23e74a60be59541":"G.B Corp. (World) (Beta) (GB Compatible)","95b284df7ba2f862406f747b4ca7c380":"Qix Adventure (Europe)","95de0eb82c6013224a449fd972006d6f":"Gremlins - Unleashed (Europe) (En,Fr,De,Es,It,Pt) (Beta)","967488fc18b9ee5140c33090fedd7a79":"Powerpuff Girls, The - Paint the Townsville Green (USA)","96935055414491738c463c19081aaa90":"Zhong Zhuang Ji Bing (China) (Pirate)","96a21eff22c8e465cd2c730763aea541":"Canoe Slalom (World)","96ada1aaa3214b4f6ee5c77f7dc61a26":"Skelby (World)","96d2795fd83f03986c5142ec288d384e":"Pumuckls Abenteuer im Geisterschloss (Germany)","96d2f46187d1eee4a7e0253e1f51c7aa":"Triple Play 2001 (USA, Europe)","96d365425eb1134944e1255f0ade1fd7":"Blaze (World)","974d6664dc7114e637c2c1cc2f252724":"Austin Powers Episode IV (Europe) (En,Fr,De,Es,It) (Proto)","975afeb42d4dca06ab6d0b029def64af":"Mountain Climber (World) (En,Es) (GB Compatible)","975b5b649d64fd2334cb69f81bca4c9c":"Sonic Adventure 7 (Taiwan) (En)","978ef3e4e41f9b5330f17cf9a6de9595":"Nakayoshi Cooking Series 5 - Cake o Tsukurou (Japan) (Beta 2)","979eb4fd473c344cb2cfc6ea4211ca5a":"Dragon Quest Monsters 2 - Maruta no Fushigi na Kagi - Ruka no Tabidachi (Japan) (SGB Enhanced) (GB Compatible)","97a3474440373af59774d611d5c52c27":"Owarai Yoiko no Geemumichi - Oyaji Sagashite 3 Choume (Japan) (SGB Enhanced) (GB Compatible)","97b6eb86385cc51fed8f65c6db04548a":"Yurivania 0 - Soul Night Prelude (World) (v1.3) (GB Compatible)","97f3fb212fabe26392d110c13e053173":"Top Gear Pocket 2 (USA) (Rev 1) (Proto)","986bcb950df452ade78fff94a83c56f3":"Cross Hunter - Monster Hunter Version (Japan)","9884397baf27070bf210138ac6b5c4e7":"Mission - Impossible (Europe) (En,Fr,De,Es,It) (Rev 1) (Possible Proto)","9889afc5b4e72c9f96db8e6b4260f6b7":"Hollywood Pinball (Europe) (En,Fr,De,It) (GB Compatible)","9896e3a34ae29d05dd0f5d2a298a75ad":"Ruby & Rusty Save the Crows (World) (Beta 2) (GB Compatible)","98ce3dda6530b382036478bf9850f1a1":"Quest Arrest (World) (v1.1) (Digital) (GB Compatible)","98f7778539e22307d074cf0abb37d05c":"Konami GB Collection Vol.3 (Europe) (GB Compatible)","991957a67a63f1e54bf34a3715402ca5":"Full Time Soccer (Europe)","995cebd28aaa5d94b8a230e9f22606b3":"Nakayoshi Cooking Series 4 - Tanoshii Dessert (Japan)","99825e86250ab53b5ea8ac702930919d":"Flintstones, The - Burgertime in Bedrock (Europe) (En,Fr,De,Es,It)","99c2598c7d38b14a35594083f8a20130":"Gedou Jian Shen - Soul Falchion (Taiwan) (En) (Alt)","99c7758531a1e79a1988f0d6ba26d3d4":"Race Time (Europe)","99ff6f711e458726eac291d560c82d10":"TV-Chan's Great Escape! (World) (Proto) (GB Compatible)","9a43179573d212b528d8f74da044511c":"Dragon Tales - Dragon Wings (USA)","9a8e8451edb7a0ce6b19ac89457cb3fc":"Tiny Grasshopper Goes Away (World) (En,Hu) (v1.2) (GB Compatible)","9a908fd85216b1b3a994ec75d2cf9318":"Hot Wheels - Stunt Track Driver (USA, Europe) (SGB Enhanced) (GB Compatible)","9aa127615d6f0de4ccc534774fe54c37":"All Star Tennis 2000 (USA) (Proto) (GB Compatible)","9abaf0dfeb58b76d6b5cce4b42756c8e":"Arle no Bouken - Mahou no Jewel (Japan) (SGB Enhanced) (GB Compatible)","9ae9d43fc7ec5570badf7a19ae006afd":"Naminori Yarou! (Japan) (NP)","9af19423c5fa3dbe4fdcc78d2bc7d1c0":"Pokemon - Version Or (France) (SGB Enhanced) (GB Compatible)","9af23c3cdf945b6a78f13dbaebbaefc0":"Ultimate Paintball (USA, Europe)","9afe57208b564946dec44244409a9a15":"Zidane - Football Generation (Europe) (En,Fr,De,Es,It) (Beta)","9b2d3dfd0f545b1ac8b10b25f9fbe56b":"Tom and Jerry - Mouse Hunt (USA) (En,Fr,Es)","9b3f141b7747d6d23bca68ec1ff7af35":"Ganso! Doubutsu Uranai (Japan) (Proto)","9b846e9a4eb6b80cdbc8e6c82f2b9e9e":"Ghosts'n Goblins (USA, Europe) (GB Compatible)","9b8869fa36562a32edec76717632875e":"Super Breakout! (USA) (GB Compatible)","9b9be252c3ac04112068db69c4c56512":"Zodiac (World)","9ba7b607ec310589c5ccfb1a8149df59":"Mr. Nutz (USA) (En,Fr,Es)","9bbe3cb922a017053d86d1355ee69794":"Doraemon - Kimi to Pet no Monogatari (Japan) (GB Compatible)","9bdc654fc8acb425fe4b68269928fbfb":"Robot Poncots - Star Version (Japan) (SGB Enhanced) (GB Compatible)","9c1cb86cccb4fa2bbc6137a81d92a3b1":"Return of the Ninja (Europe)","9c3800babd418a937f4429bbaaf2b81d":"Antz World Sportz (Europe) (En,Fr,De,Es,It,Nl)","9c3ae66bffb28ea8ed2896822da02992":"Pocket Monsters - Crystal Version (Japan)","9c6a9c38b987e50001153ad12eb5fcc8":"Hamster Monogatari GB + Magi Ham no Mahou Shoujo (Japan)","9ca299a1f1b3a62d4ef96ef9c9835442":"Neonsomnia (World) (v0.1) (Proto) (GB Compatible)","9cf5135bd746fa7f475c65f46e1ae2e1":"Repugnant Bounty (World) (v0.1.023) (Beta) (GB Compatible)","9cf75b247ec97b8838181ad75d5f983a":"Men in Black 2 - The Series (USA) (En,Fr,De)","9d1067c75dcbce5aacabacabb06b95c4":"Monster Traveler (Japan) (Rev 1)","9d2256a877d29f6b12a81d9961a33cea":"Elang 2003 - Mark of the Wolfs (Taiwan) (En)","9d238ed036bb656acf9765589119f68c":"Pro Mahjong Tsuwamono GB 2 (Japan)","9d2f7e1ac30a46456a841c264963e5ea":"Survival Kids 2 - Dasshutsu!! Futago-jima! (Japan) (SGB Enhanced) (GB Compatible)","9d319a32492c1f4964c244477f6188ea":"Gridtrap (World)","9d3bcec616f238ed41146a2ce94ab562":"Telefang - Power Version (Taiwan)","9d3e582f7a50cd50f37c848ba24ee382":"Tarzan (Germany)","9d5808671cdb4bd5d4e4f0c44d171d6e":"Feng Kuang A Gei III - Chaoji Zhadan Ren (Taiwan)","9d64f8607e9bc3e788f30fff123be448":"AirForce Delta (Japan)","9d79034c9b026f448f84f9898c6ccfd6":"Shadowgate Classic (USA, Europe) (En,Fr,De,Es,Sv) (GB Compatible)","9d80032f7d8dddb30aabf19455e9c6e3":"Mary-Kate and Ashley - Pocket Planner (USA, Europe) (GB Compatible)","9dcf58ce7c379a01c3288975e90624f3":"Jim Henson's Muppets (Europe) (En,Fr,De,Es,It,Nl,Sv) (GB Compatible)","9dd91576606411b753e4a722eb12f296":"Sylvanian Families 2 - Irozuku Mori no Fantasy (Japan) (Rev 1) (Possible Proto)","9de083ff607f9a8022fde52d598160e8":"Mary-Kate and Ashley - Winners Circle (USA, Europe)","9dece7202bd00a2806b36b5848ca985e":"Racin' Ratz (USA)","9e3d4ff0ba3d6deec5080f6dbed4fef8":"Fushigi no Dungeon - Fuurai no Shiren GB 2 - Sabaku no Majou (Japan) (AFMJ)","9e6624b386788a0cebd708f23701eadb":"Guzzler (World)","9e857e7a438acd2e8d9965f49dd21411":"Quest - Fantasy Challenge (USA) (SGB Enhanced) (GB Compatible)","9eb8be5600d2408352bf9ef32b91d1df":"Cubix - Robots for Everyone - Race 'n Robots (USA) (En,Fr,De,Es,It)","9eccd7d587ce52ebf90722dac7fb1eac":"Battle Star (World)","9f28e403eb338a7457f54dee7a6f443e":"Xtreme Wheels (USA)","9f2922b235a5eeb78d65594e82ef5dde":"Pokemon - Crystal Version (USA)","9f4382352a6fd43c844c3aced7cd842a":"Megami Tensei Gaiden - Last Bible (Japan) (SGB Enhanced) (GB Compatible)","9f6135616b201739af43236fcfd5c273":"Millennium Winter Sports (USA)","9f61847ddf25f5244257641bc971c1fd":"Puchi Carat (Japan) (SGB Enhanced) (GB Compatible)","9f77adbb0a6af7bd85d21a8ef9fdea49":"Fix & Foxi - Episode 1 - Lupo (Europe) (En,Fr,De)","9f7fbde333caa987d9069e6d993c4993":"Sam the Optimistic Hedgehog (World) (GB Compatible)","9f88bdc053b035240ff1478ca11e7c23":"Test Drive Off-Road 3 (USA) (Rumble Version) (SGB Enhanced) (GB Compatible)","9fde547bcb70b108895e259da4c4e100":"Spider-Man (USA, Europe)","9fe3162d87054504eb82113f7ae8d6f8":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (GB Compatible)","9ff602e5ebc9be5b1f7ad6a637c35c9f":"Daisu-ki (World) (v1.2.1)","9ff78c16081934ee86be9c7e6c543da6":"Shuma Baobei DX6 (Taiwan)","a00012533e76649f4e7e1b7aa5a9ee07":"Lufia - The Legend Returns (USA)","a01026f30b0b0483f3c048b4eb2513ed":"Matel Gear II (Taiwan) (En)","a0361b10f4006f1fea4b21f5403b5b95":"Xiyou Ji (Taiwan)","a03e3cd1a2c78be11e3a52fe995cec71":"Nakayoshi Cooking Series 5 - Cake o Tsukurou (Japan)","a08b575b947d0249cdf214fc130706ce":"31-in-1 Mighty Mix (Australia) (31B-001, Sachen)","a0993894d9c1bb543caa7acbaf7ca5c0":"Hightail (World) (Demo 4F)","a0b4538f687fc61bc88f7ee111170355":"Tomb Raider - Curse of the Sword (USA, Europe)","a0ceaf6ebf640a48e2bf54478d2e4a63":"Mask of Zorro, The (USA)","a0f33ee506052fe421c741e81a395355":"Super Mario Special 3 (Taiwan) (En)","a0f537747bab3d8599281deae17ff47f":"Proof of Destruction (World)","a10a70354cc998e31f0b5fb27c471c37":"B-Daman Bakugaiden V - Final Mega Tune (Japan)","a11802247b7f38f508f71cb257ff76ab":"Taito Memorial - Chase H.Q. - Secret Police (Japan) (SGB Enhanced) (GB Compatible)","a119452d83b0a2e72bfc0ac706325667":"Mask of Zorro, The (Europe)","a1304bdefa239600bd6116081bae2e23":"Space Invaders X (Japan) (En) (GB Compatible)","a13623a452327ede4553ee2bd1b89a1a":"Magical Tetris Challenge (USA)","a173eb46ef11840b9318a8832828280b":"Gedou Jian Shen - Soul Falchion (Taiwan) (En) (Alt 2)","a18746b05badafb5b8456ace6ba3e65f":"Austin Powers Episode III (Europe) (En,Fr,De,Es,It) (Proto)","a18fcd9883846e35c507eb3ec98dcd73":"Towers II - Plight of the Stargazer (USA) (Proto 3)","a1cf50da360d45d78075ae48313a18fa":"Antz (Europe) (En,Fr,De,Es,It,Nl) (Beta) (GB Compatible)","a1d7687a557dd2a3948c9f498703f4a3":"Beast Fighter (Taiwan) (En) (Sachen)","a20d6884a7d6bc5610ef4078a72ce460":"Phantom Zona (Japan) (SGB Enhanced) (GB Compatible)","a2500f1123909abfa0b0a4fa33ef2905":"Powerpuff Girls, The - Paint the Townsville Green (Europe) (BPTX) (Proto)","a2623acf15ec36ab072ee5b92b88b613":"Sgt. Rock - On the Frontline (USA)","a26cfbd01895b12ad64b7191a607fc11":"Tony Hawk's Pro Skater (Japan) (Proto)","a28184f9cd3f24e67c3fb5d84b3aa78b":"Barcode Taisen Bardigun (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","a290f281cde7d00059e0e567bffb0d3b":"Hamster Paradise 2 (Japan)","a2a41746a1ec29a25d3e715342cb71f2":"Super Jacked Up Tomato Face Johnson (World) (Jam Version)","a2d07e7da188092c88ef6d9fd2e5eaa4":"LEGO Racers (USA) (En,Fr,Es)","a30b8e40344bcfbeb08110c79de4af14":"Black Bass - Lure Fishing (USA, Europe) (GB Compatible)","a31652b6d1e7fc647c4af7b9dfe05ff5":"1942 (USA, Europe)","a320f9de83767bb1bc1bbbc6fbd96011":"Mario Tennis (Europe)","a34819a548e7a1a2b8a6d1d5ed6e912d":"Wicked Plague (World) (v0.1.1) (Proto)","a3491f8e6f09dd5945448477d4b8f79b":"Zagan Warrior (World)","a35c0fa2e3b3d1c1779cd9f2352bc427":"Pokemon - Kristall-Edition (Germany)","a36188fae0070066ba5989cebaf2a1b6":"Joryuu Janshi ni Chousen GB - Watashi-tachi ni Chousen Shitene! (Japan) (SGB Enhanced) (GB Compatible)","a366feb4c07a1f70890d0bf3e13de38b":"Gamer Boy Mission (World) (GB Compatible)","a3799918a413d72787d4434935df2117":"Pokemon - Silberne Edition (Germany) (Beta) (SGB Enhanced) (GB Compatible)","a395cafa0678f64114e6a8577ed58bfe":"Usurper Ghoul (World) (v1.9) (GB Compatible)","a3c65d746e0e171843e9013e8d8e1021":"Tales of Phantasia - Narikiri Dungeon (Japan) (SGB Enhanced) (GB Compatible)","a41843374fe3bce0b61a641fafd6f415":"Laura (Europe) (En,Fr,De,Es,It,Nl,Sv,Da) (Rev 1) (Proto)","a42bfef360186003c6a8a617581a1155":"Pocket Lure Boy (Japan)","a455a70d52a9ffcfe8c4d8c164267500":"Super Impostor Bros. (World) (GB Compatible)","a456d96b9c3ed51cdf58369fc1f07880":"Pocket Puyo Puyo-n (Japan) (Rev 1)","a4a756be0d12c2ba7ca5a6420bb2198e":"E.T. - The Extra-Terrestrial - Escape from Planet Earth (Europe) (En,Fr,De,Es,It,Nl)","a4af66b229f3bed283f361275484d84d":"Tools of Nexaura (World) (Beta 4) (SGB Enhanced) (GB Compatible)","a4b4323b2786ddf738a0feedd912a909":"Vixen (World)","a4b695325ac28be2e388f5b9186987ba":"Antz (USA) (En,Fr,Es) (GB Compatible)","a4df533c6b9b3423f71385e68bd5c421":"Ojarumaru - Mangan Jinja no Ennichi de Ojaru! (Japan) (GB Compatible)","a4e6f256943c4b7f99a75b73bdd3a3e0":"Harbour Attack (World)","a537394fbf3378116a27a57ca6d588b7":"South Park (USA) (Proto)","a539a0ae1b1ed8034fc3a4733b4298c3":"Looney Tunes (Europe) (GB Compatible)","a539a7a02639395ad8d7723199c81eae":"Harvest Moon 2 GBC (USA) (SGB Enhanced) (GB Compatible)","a55b8d588bbaa4ebcb4d53dbb534329f":"Planet of the Apes (USA) (En,Fr,De,Es,It,Nl)","a562bbe876b8467cc530213ec84eba0a":"Gimmick Land (Japan) (Proto)","a57d5976214d5f8d52dae5faf4354abb":"Ms. Pac-Man - Special Colour Edition (Europe) (SGB Enhanced) (GB Compatible)","a594843d9a5b85cc8c673c6b97945ad2":"Rootin' Tootin' Cowboy Wizard Lizards (World) (Proto) (GB Compatible)","a5bc2e2ad58bbd78609478a60dcda8d7":"Harvest Moon GB (Europe) (SGB Enhanced) (GB Compatible)","a5be435543968412caac1fe7c914472e":"Wario Land 2 (Japan) (SGB Enhanced) (GB Compatible)","a5bfa8b98969ca67811ed2d7bfbf5535":"Spy vs Spy (Japan)","a5c6583784900008ea52b49761f035b8":"Swordsman on the Eternal Journey (World) (En,Ja) (v1.00) (GB Compatible)","a5d013a0066ee9874e88a1c455cc454a":"Kanji Boy 3 (Japan) (Beta)","a601e9009c88c7dcfac8aaea41dd45d8":"Super Chinese Fighter EX (Japan)","a62923faa62daf5e7e5363d238a1d32c":"Pokemon Gold Version 2 (Taiwan)","a649ef1410ae4c24020fb8b0113739e3":"102 Dalmatiner (Germany)","a67cb573673f041098f23f868a153019":"Noddy and the Birthday Party (Europe) (En,Fr,De,Es)","a680117a75204cc8c6f7f0d80f1d8f24":"Cat Jumper (World) (GB Compatible)","a68e210e9e08cfbcccb0350333b5ff4f":"Langrsr II (Taiwan) (En)","a6924ce1f9ad2228e1c6580779b23878":"Pokemon - Gold Version (USA, Europe) (SGB Enhanced) (GB Compatible)","a6d93b1626f127adecc65bb675672cdb":"Hajimari no Mori (Japan) (Proto)","a70b5728772725f9688f91330bc4fbda":"Wayfarer Boo - Pushing Through (World) (v1.1)","a721520df37c636ed924dbc268cdd753":"Micro Machines 1 and 2 - Twin Turbo (USA, Europe)","a7217c8338a2de76b9e50d09589f350a":"Second Edition Harry Boy, The - The Secret of the Chamber of Secrets (USA)","a72a4d45b155f4a41bd2613d0bb3f5fa":"Nyghtmare - The Ninth King (World) (v0.1.2) (Beta) (GB Compatible)","a767370eefdaad9831acb4c3c3258c44":"Hugo (World)","a779f9fd31f32e78d6b4cea27aa15541":"Project S-11 (USA) (Beta)","a7a083bd154392a188dc8ed62c145ea4":"Burger Paradise International (Japan)","a7a2c27cb6fc2c6cf67eb8af2b99c612":"Terrifying 911 (China) (En)","a7af89e99a4cbb2afbe08549088d8fda":"Forest of Fallen Knights (World) (Beta) (GB Compatible)","a7d2695b3ddc268389e36f916815f96d":"F1 Racing Championship (Europe) (En,Fr,De,Es,It) (Beta)","a7e34f3cf77e1df0ef8896a712d7ca82":"To The Stars (World) (GB Compatible)","a7edd8b2fc42450a4ee4874fa67c24de":"Dragon Ball Z - I Leggendari Super Guerrieri (Italy) (Beta) (All Unlocked)","a7f23a751078922169df0f73a1db1564":"Nakayoshi Cooking Series 1 - Oishii Cake-ya-san (Japan)","a87e78da9b5d0d937dd67ddeb970700a":"Baiwan Dafuweng - Jin Ban (Taiwan)","a881f04dee6d67c7bc4be388e247a6fe":"Haunted (World) (GB Compatible)","a8ea5b8df744d028e681f9b608cff68a":"Skycon (World)","a8ee3ff6fbce24d27334cf532a000206":"Pokemon Diamond (Taiwan) (Zh)","a9049c52dd706737a6515822739db1c9":"Hunter in the Lost Forest (World) (En) (GB Compatible)","a9401fbd85e48cf0105ea3aabaf012a2":"Pocket Monsters Diamond (Taiwan) (En)","a94939498326beaec405d3947a7ce2df":"Robin Hood (Europe) (En,Fr,De,Es,It,Nl)","a94a1c6268555926ca1a3b439a2fb65c":"Dragon Ball Z - Densetsu no Chou Senshi-tachi (Japan)","a95f4953766e427456f1f991bb3143dc":"Dragon Ball Z - Guerreros de Leyenda (Spain) (Beta)","a96e95e150e34db6080724c5eeec1348":"Pop'n Pop (Europe)","a9847d8a5683cbcacd7e45e2762c365c":"Princess Poffin and the Spider Invasion! (World) (GB Compatible)","a9a4d4db13b2c35f0e260bf067087055":"Burger Burger Pocket - Hamburger Simulation (Japan) (SGB Enhanced) (GB Compatible)","a9cc81bffb2d1d3a9caa38f04e6f6c1d":"Gute Zeiten Schlechte Zeiten Quiz (Germany) (GB Compatible)","a9d2f36d6c2a334e0b2261c57c20f0d4":"Turok 3 - Shadow of Oblivion (USA, Europe) (En,Fr,De,Es)","a9da27b4eb19db857d3040b6cd1d2328":"Capcom Fight 2003 (Hong Kong) (En)","a9ee6c9625c9bd187bc7fd90df3a4fc4":"Loppi Puzzle Magazine - Hirameku Puzzle Dai-2-gou (Japan) (SGB Enhanced, GB Compatible) (NP)","a9ee7c9fcfe647a75d9f0ce4dde1b64d":"Thunder Blast Man (Europe) (Sachen)","aa0ccc0c4d2472b5fb657aba003efb81":"Daffy Duck - Subette Koron de Oogane Mochi (Japan) (GB Compatible)","aa1bf5ff55e7106b496850e3c6cf7c14":"Tsuriiko!! (Japan)","aa2b420b9eca7479f83423c46b106823":"Cuthbert in Space (World)","aa7235fbdf5f0c7fb5a67bc6d24dd4df":"Micro Maniacs (Europe)","ab00def91c7d2f6d29d3f0c629102033":"GB-Wordyl (World) (Kw) (GB Compatible)","ab2ebc72473b5669dbcfe4d29081c18b":"Fengkuang Dafuweng (Taiwan) (Alt)","ab3245958e1ddea3209841c62ca8448e":"Bob et Bobette - Les Dompteurs du Temps (Europe) (Fr,Nl)","ab38e871b66ee8ad1bb8ea7d92934fd1":"TG Rally 2 (United Kingdom)","ab44aacb4e4c17f5815a8ee1444045fa":"Shi Mian Maifu - Fengyun Pian (China)","ab58102005b510a2d905ed7de9d6267a":"Densha de Go! 2 (Japan)","ac1f4ad52996882c60ce83cac01e9ccf":"Power Quest (USA) (En-US,En-GB,Fr,De,Es,It) (SGB Enhanced) (GB Compatible)","ac2985f193cf8acc1d1cc5124fc2e406":"Nyghtmare - The Ninth King (World) (v0.1.9) (Beta) (GB Compatible)","ac29eaef5fc03f8dd08215a8e162cd2e":"Airwolf 16 (World)","ac2a045c58145b030f9ed61f526fc233":"Capcom vs SNK - Millennium Fight 2001 (Taiwan) (En)","ac38dfd19646ca6e143024d699145c70":"Stuart Little - The Journey Home (USA, Europe)","ac3dfc02635524fbb01dcacd2db3d066":"RPG Tsukuru GB (Japan)","ac46bc779e1e844674de1d4c13d06f96":"Dragon Ball Z - Legendary Super Warriors (USA)","ac812a2c6eaf743efd64972d8fa5a3c4":"World Soccer GB 2 (Japan) (SGB Enhanced) (GB Compatible)","acb10288f383c6b475e11e936aa56c70":"Dino Breeder 3 - Gaia Fukkatsu (Japan) (SGB Enhanced) (GB Compatible)","acb6b136fa26888d42b5f95871a75eaa":"Klustar (Europe) (En,Fr,De,Es,It) (GB Compatible)","acb82a5584f830d6d7bc33f4827571b9":"Xena - Warrior Princess (USA, Europe) (En,Fr,De,Es,It,Nl)","acd26c013ffa1c3a7905be69dd79c67c":"Zoids - Jashin Fukkatsu! Genobreaker Hen (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","acfa3540921a88cae136da1040ca2302":"Tweety's High-Flying Adventure (Europe) (En,Es,It)","ad2dd8db576cf8aa1262cca24df6ff59":"Exploits of Fingers Malone, The (World)","ad358f284c3303db01212016ed3944d5":"Bomberman Quest (USA) (SGB Enhanced) (GB Compatible)","ad37726c92f43ad7915225b7eaf94ffd":"Heroes of Might and Magic II (USA) (En,Fr,De)","ad380d123ed38ecc6a8068f61602daf7":"Gods of the Universe (World)","ad945d22680a6b2a149079cb564a238e":"DryMouth (USA)","ada59e7dafe1a6b70add7020959c1b23":"Sesame Street - The Adventures of Elmo in Grouchland (Europe) (GB Compatible)","adb95251cfd973f8245e6a869925d6da":"Test Drive Le Mans (USA) (En,Fr,Es)","adfb8d9dc0d5633b1c385be79f3b425f":"Kettou Transformers Beast Wars - Beast Senshi Saikyou Ketteisen (Japan) (SGB Enhanced) (GB Compatible)","ae0a7c2524b627b354098078def54f18":"Xtreme Wheels (Japan) (Possible Proto) (NP)","ae29aed4e24109e18ffe893da6b77fee":"K.O. - The Pro Boxing (Japan)","ae7dd19e6e8b3130498e4a27476e2931":"Outward (World)","ae9b4ed5cd8c80029a3c01096963ee19":"Pitfall GB (Japan) (GB Compatible)","aeb6ac2b389cef6e6133461b38474a7e":"Castlevania - Demon Castle (World)","aeeb6c737c55d4a4d0691e27ec831eec":"Max Steel - Covert Missions (USA) (En,Fr,De,Es) (Proto)","aeec41031271f75b5e0b1d132b8a4505":"Powerpuff Girls, The - Paint the Townsville Green (USA) (Rev 2)","aef3a27b97dd65b17a9c7263eff11322":"Game Boy Wars 2 (Japan) (SGB Enhanced) (GB Compatible)","aef66e8a7c75323ae0981ff5a20722a4":"Pocket Puyo Puyo-n (Japan)","aef9b41fbc898a58fd2aaaeabc2787e9":"Mobile Trainer (Japan)","af157e560d1ff87970c1bd2ee90d0932":"Magical Drop (USA)","af1d1e17a5c568df796f4004be872649":"Xtreme Sports (USA)","af4565bf1ea33c785fc9e05be2a9bad0":"Robot Wars - Metal Mayhem (Europe) (En,Fr,De,It,Nl,Sv)","af584eea2b34afdbb6193348ecb58f11":"Janosch - Das grosse Panama-Spiel (Germany)","af8e059196fcdd29cc0fc417d3abf9ff":"4 in 1 + 8 in 1 (World) (4B-007, 4B-008, 8B-004, Sachen)","afd4ae2f42da36ddb740fa6a5b06d74e":"Shantae (USA) (Beta)","afd9281eac1eacd73c200cbc69f57b9e":"Power Spike - Pro Beach Volleyball (USA)","afe14eef683f3eb910b67ea2e3feb124":"Mage and the Grimoire of Beast (World) (En) (v1.01) (GB Compatible)","afe51a74c6967711ddd263e3998b7afd":"Jim Henson's Bear in the Big Blue House (USA) (En,Fr,De,Es,It,Nl)","afeec69d5ba3afa3ce2279fcda944576":"Prince of Persia (USA, Europe) (En,Fr,De,Es,It) (GB Compatible)","aff1aa8c293dc5e26fa704eb1693dc0c":"Mission - Impossible (Europe) (En,Fr,De,Es,It)","b0080c2f1919a4bb0ea73b788f4a6786":"Legend of Zelda, The - Link's Awakening DX (Germany) (Rev 1) (SGB Enhanced) (GB Compatible)","b03138ad381d8581f245ca6ff88f9ef8":"Mummy Returns, The (USA)","b061db3dd5861addeaf22a83af802491":"Beyblade - Fighting Tournament (Japan)","b06e4ef225fbf01771dea02679f3775e":"Sam the Optimistic Hedgehog (World) (GB Compatible)","b077f0acbb5d2ca07a2d9c035856e01e":"Dinosaur'us (Europe) (En,Fr,De,Es,It,Nl)","b0849abcac5411fc88c90f28b3166bc2":"Tomb Raider (Taiwan)","b08ab767c367afebaa23b1be93f7f318":"Dicee! (World) (v1.1) (GB Compatible)","b090fc649463f99dc413fbae246d400a":"Lee Carvallo's Putting Challenge II (World) (v1.1) (GB Compatible)","b092bd8fc2001baf51d60ce89fe0915e":"Shuihu Zhuan Zhi Qunmo Fengyun Lu (China)","b093e59f676d7e9fc4827139b0cfdc74":"Basketbrawl (World)","b11b76bf7344f01f0608b8b8da83b46b":"Cookie Monster Munch (World)","b11f6063fd7006426d136da1ee27b27a":"Mona and the Witch's Hat Deluxe (World) (GB Compatible)","b12265f9c7139a51d55d354aa5ade32a":"Pachinko Hisshou Guide - Data no Ousama (Japan) (GB Compatible)","b138e131aeee6f969e45673821221b07":"Sei Hai Densetsu (Japan) (SGB Enhanced) (GB Compatible)","b13bbd668d6a9714fc13a8fa903dfe13":"Moshou Shiji - Zhanshen (Taiwan)","b13dda5f217d1e8050af087a3f5ac6bc":"GB-Wordyl (World) (De) (GB Compatible)","b14bf550163b000a7d1ba3caa43ac508":"Lodoss-tou Senki - Eiyuu Kishiden GB (Japan) (SGB Enhanced) (GB Compatible)","b1729716baaea01d4baa795db31800b0":"X-Men - Wolverine's Rage (USA)","b173870c83682e97fcc43b6d3ee9ac7f":"Top Gear Rally (Europe) (Rumble Version)","b1c7dbc6db86ea54fa8caab4eb3148e2":"Unholy Friend (World) (GB Compatible)","b1dba18c324554a433893073599777a7":"Medarot Cardrobottle - Kabuto Version (Japan) (SGB Enhanced) (GB Compatible)","b1e72ba9c23587d002bf1059504ad6db":"Ganbare Goemon - Seikuushi Dynamites Arawaru!! (Japan)","b23248da379be11b7ea91eb6a7c95b2c":"Mission Bravo (USA) (Proto)","b25025224eb338963fc9c0fee91f2c39":"Duke Nukem (Europe) (En,Fr,De,Es,It)","b250ee7ce8d2eaae25379723e054516c":"Daa! Daa! Daa! - Totsuzen Card de Battle de Uranai de! (Japan)","b284dbf9549a8322eadf291c631c057e":"Cops and Robbers (World)","b28a4a00b8a2a0a6055f79d13928f9ff":"Neclaus' Quest (World) (v1.1) (GB Compatible)","b28c999d1b43e8e39998827ff39965cc":"Dragon Quest Monsters - Terry no Wonderland (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","b290f995cec5958d396055c6c0ff8a3b":"Rocky Mountain - Trophy Hunter (USA)","b2d3713267c9e21b3dae3cb5f437fccd":"Duke Nukem (USA) (En,Fr,De,Es,It)","b2fe715038778210c0c2c8dd06b2a11f":"Super Gals! Kotobuki Ran 2 - Miracle Getting (Japan)","b311207a613d72a52a779b2aa3b3990c":"Rig Attack (World)","b3142aae557bc4e04e2f0f740fae9577":"Dropzone (Europe) (GB Compatible)","b3347b3219a7183697e83655f4628827":"Bionic Commando - Elite Forces (USA, Australia)","b3550a7c733b9392477f5b2e4502d7a8":"Shaman King Card Game - Chou Senjiryakketsu - Meramera Hen (Japan)","b397066e3cad5ae33a31e4adfff0bff5":"Legend of the River King GBC (USA) (SGB Enhanced) (GB Compatible)","b39c09e1a033f08d8160bf5dfa4082bc":"Raku x Raku - Moji (Japan)","b3a3b81d16bf534afe80200995dfc683":"NBA in the Zone (USA) (Rev 1) (SGB Enhanced) (GB Compatible)","b3af66996b1ae8315ad94880af361cec":"Hauntsfield (World) (GB Compatible)","b3bd4adc4613ff8f4b9cf8c80ff0a6ef":"Rocket Power - Gettin' Air (USA, Europe)","b3d08bf6b51ec11b62e1865f484717df":"Dia de Sol Noite de Lua (World) (GB Compatible)","b3e63b970dd30375664a119fa80e9382":"Taikong Baobei (Taiwan) (Li Cheng)","b3e8e32a3f8c3366cb12b4ea7b0a9169":"Powerpuff Girls, The - Paint the Townsville Green (Europe) (BPTP)","b3e97d514a8ad26a0802640a4b8386be":"Dragon Ball Z - Les Guerriers Legendaires (France) (Beta) (All Unlocked)","b3ebf79679aeb1e7fa4840484fcb94c5":"Towers II - Plight of the Stargazer (USA) (Proto 2)","b3f1a058f5702384af5e5d79ee855824":"Top Gear Pocket (Japan) (En) (Rumble Version)","b40dbe0f8ac98ede81f05c37dd0f67b1":"Aqualife (Japan) (SGB Enhanced) (GB Compatible)","b40f87a5332e9638cb92b98cfa4b202b":"Dork's Dilemma (World)","b410f6f84f4e4be7d1e8332067984207":"Yinyang (Taiwan) (De)","b44f01ea2d8a7d1987df04ed1424c260":"Yongzhe Dou E Long VIII (Taiwan)","b4718458fffedc4552c94c2428b78ba4":"Cold Nights (World)","b4c21d6cf67f5742ef3a19860eb31d2e":"Mr. Driller (Japan)","b4da49116eaf8e63d5dd912bc8da33f4":"Cross Country Racing (Europe) (En,Fr,De) (SGB Enhanced) (GB Compatible)","b50ef76b1e81615cf079c373b50c0ab9":"Grinch, The (Europe) (En,Fr,De)","b53d2cbd2377cbadb4f55b03fe58cbac":"Tiny Toon Adventures - Dizzy's Candy Quest (USA) (Proto)","b53eaf56f0c95887f4c009c4a95f28a2":"Grave Encounter, A (World) (v1.21) (GB Compatible)","b541848e14b7b70b679cb640915e8de2":"Take Your Medicine (World) (En,Pt) (v1.0) (GB Compatible)","b542fbcf77dea9de05ceab312648af6d":"Suske en Wiske - De Tijdtemmers ~ Bob et Bobette - Les Dompteurs du Temps (Europe) (Fr,Nl) (Beta 1)","b56c25cc4c2b086055d9d72a04baa1e8":"Ripjack (World) (GB Compatible)","b587d5ae7c464408526489b67dfca07d":"Dragon Ball Z - Legendaere Superkaempfer (Germany)","b59fa772b15a07f44110d5b7aa24b424":"Taito Memorial - Bubble Bobble (Japan) (SGB Enhanced) (GB Compatible)","b5a71128227f5bc953fd55cb0025807f":"Super Mario Bros. Deluxe (Europe) (Rev 2)","b5e7ac93cb6ad3290ee58e4d589e081b":"Digimon - Yellow Jade (USA)","b5eb859e6ea60a0bd83100a10206d9c9":"Warlocked (USA)","b5f00d021a370663458b346fad6903cc":"Tonic Trouble (Europe) (En,Fr,De,Es,It,Nl)","b5fe88bbde541c28625e32b83239e6f0":"Moorhuhn 2 - Die Jagd geht weiter (Germany)","b60a022c89a8e0a2c597dee3de807f32":"Fellowship of the Rings (Taiwan) (En)","b60dbf70d1a54e327a1cd668ade9f43b":"Hole in One Golf (USA) (Rumble Version) (SGB Enhanced) (GB Compatible)","b62cd45af888f008be2ddb84b778af4e":"Madden NFL 2002 (USA)","b639c0dbb1ca57df4f77eac898ea5710":"Powerpuff Girls, The - Il Terribile Mojo Jojo (Italy) (Proto)","b69bbc95fccabd83c8130d7215884504":"Capybara Quest (World) (v1.0) (GB Compatible)","b69e0d23832e1a8631b72d250c0d23c7":"New Super Color 145 in 1 (Taiwan)","b6b81d98a27596443792f47812f15b67":"Worms Armageddon (Europe) (En,Fr,De,Es,It,Nl)","b6c357bb1a544fb1f8731cbdc3046596":"Looney Tunes - Carrot Crazy (USA) (En,Fr,Es) (GB Compatible)","b6ea71372c0acb3cdc8cc64a4b2add2e":"Micro Machines V3 (USA, Europe)","b702980f1562a0d66106ff8722675eb9":"ATV Racing & Karate Joe (Europe)","b717e9a48b44a5d367e8bcb4a5e68535":"Matchbox Emergency Patrol (USA, Europe)","b71d8408e211d4ae4daf7745af550b18":"Diva Starz - Mall Mania (USA)","b71f9207f81109a0358aebba688418b1":"Remi's Pizzaria (World) (GB Compatible)","b734829913e6d58e678441de37dbf88a":"RoboCop (Europe) (En,Fr,De,Es,It,Nl)","b73582e8872c1185f5ca7f5aecd7c7f8":"Cargo (World) (GB Compatible)","b73c9b2f3b03444fa9a098a03691a79e":"Featherless Cake Delivery (World) (v2.0) (GB Compatible)","b742e2ca9ba371665c32173315f8ff5c":"Super Marrio Sunshine (Taiwan) (En)","b749ab5629d40cc4da3e4136f49d7cd8":"Who Dares Wins II (World)","b74b6132326bafcd75e415ddcd9a2932":"Dragon Warrior III (USA)","b74e388091f84c552ea4e2c1be3fba95":"Spider-Man (Japan)","b7598a51e0acc0d74ca8f464826371ed":"Wario Land II (USA, Europe) (SGB Enhanced) (GB Compatible)","b7c5022990adb215bdfa6cb2714c34d2":"Gun Law (World)","b7cc57aba9190a1db492b56716ba048c":"Fugazim (World) (Pt) (GB Compatible)","b7d6335b8d3a34b15ce0b631bb9731a2":"Asterix & Obelix Contre Cesar (Europe) (En,Fr,De,Es,Nl) (GB Compatible)","b7d7a761d1666d4cf9832435c49eb14a":"Rugrats - Typisch Angelica (Germany)","b80371a8c851a4c0b9c944fd14b44d6e":"Wings of Fury (Europe) (En,Fr,De) (GB Compatible)","b814eb1064975392a2db18b5f410abf7":"Yurivania - Uhaul of the Night (World) (v1.5) (GB Compatible)","b81ddb7d86302384efe1675f75cc35f6":"Pac-Man - Special Color Edition (USA) (SGB Enhanced) (GB Compatible)","b85674c7d71d84cef9dcc9b2e35185d3":"Legend of Zelda, The - Link's Awakening DX (USA, Europe) (Rev 2) (Beta) (SGB Enhanced) (GB Compatible)","b85fa198c52bb1aeb40358dd712800a5":"Booty (World)","b863839c61e45db5c6c6492d24688032":"Dragon Quest Monsters 2 - Maruta no Fushigi na Kagi - Ruka no Tabidachi (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","b868fa9f3cecfa2d39df43a5d1b13b60":"Hello Kitty no Magical Museum (Japan) (SGB Enhanced) (GB Compatible)","b8814bfe24f20d38700822f4904f5c8e":"Legend of Carrot (World)","b883323e9ae3c85548169babe3f9b4f0":"From TV Animation One Piece - Maboroshi no Grand Line Boukenki! (Japan) (SGB Enhanced) (GB Compatible)","b8be3a0807b09038d4feb48dc2ab1e70":"Pocket Racing (Europe)","b8ce3f17001f042e55c8803f0e04cc74":"Pacifist, The (World) (GB Showdown) (GB Compatible)","b8d3db1fd7025e861975433cd718f8d6":"Treasure Island Color (World)","b8e7f2f760dc0e7010ac5a83a793fbd3":"Wendy - Der Traum von Arizona (Germany)","b928699d63702e21a3599b887b947041":"Yu-Gi-Oh! - Das Dunkle Duell (Germany)","b941941050fc32406eca4733926a3779":"Rayman (USA) (En,Fr,De,Es,It,Nl)","b943d261884c20de0b2838cf1416b3a3":"Xin Fengshenbang (Taiwan)","b9795b5d6397d36c1666c3a0bada059f":"International Track & Field - Summer Games (Europe)","b980da92693762bd3a7a4791fe08766e":"Yu-Gi-Oh! - Monster Capsule GB (Japan) (SGB Enhanced) (GB Compatible)","b9a686e4dbc7241bdf72aca235f7f92f":"NYR - New York Race (Europe) (En,Fr,De,Es,It,Pt)","b9bc4621f069f59e22eee05eeb6503cd":"Supreme Snowboarding (Europe) (En,Fr,De)","b9cf2cc6ff8cbe94cb58ffa958475ab8":"Star Wars Episode I - Obi-Wan's Adventures (Europe) (En,Fr,De,Es,It)","b9cf8d2416f8a6dd3b412afd91337f40":"3-D Ultra Pinball - Thrillride (USA) (Rumble Version)","b9fc9e6b9b6a0113c530f5cb0a34da71":"20 Second Platformer, A (World) (GB Compatible)","ba01289e8d646e1407f70275a50114b3":"Love Hina Party (Japan)","ba0aeedae367f82a1fd2760cfcda2bd9":"Soccer Manager (Europe) (En,Fr,De,Es)","ba0d9c7eec69cee04a7ff4faf91f2c4b":"Lucky Luke - Desperado Train (Europe) (En,Fr,De,Es,It,Nl) (Beta)","ba0debf5e0cda9adfa409dab91abb6a9":"Robot Poncots - Moon Version (Japan) (SGB Enhanced) (GB Compatible)","ba1195224261abd308db025d69ee2227":"B-Daman Bakugaiden - Victory e no Michi (Japan) (SGB Enhanced) (GB Compatible)","ba199806fd4f5af5f76fd9c1515b299d":"Casper (Europe) (En,Es,It)","ba1d07a8282202081af5ad985f0c31ad":"Gobs of Games (USA) (En,Fr,De)","ba205296796ad7cdc8ca180b280714d1":"Las Vegas Cool Hand (USA) (GB Compatible)","ba2f38d5c6b03aa44d892b56395a683b":"4 in 1 + 8 in 1 (World) (4B-001, 4B-009, 8B-001, Sachen)","ba2f86e301d723422e92dc2d23fbc976":"Fix It Felix Jr. (World) (GB Compatible)","ba516f1573bd24659e6a73cfbd5da789":"Yuenan Zhanyi X - Shenru Dihou (Taiwan)","ba5624d81e12bd6131cde70f0d9bd18a":"RunieStory (World)","ba7297329e355c7c52a3ae457f0e6069":"Ultimate Surfing (Europe)","ba85a2ae8aa5829c440eef2d5549506c":"Harry Potter and the Sorcerer's Stone (USA, Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da,Fi)","ba9822126b90c2dc7cd93f45e4780a42":"Caise Gedou 29 in 1 Diannao Huamian Xuan Game (Taiwan)","ba9a1c310a60c37fc2a7dc908ec1e442":"Midterm Moments (World) (GB Compatible)","bad2778ba7e134623a371e986e7356e6":"Mojie 3-bu Wanme de Shijie (Taiwan) (Zh)","bad95d30c38a92e7906feecb6d6bd272":"Aladdin (Europe) (En,Fr,De,Es,It,Nl)","baea8ed885dcdf816e9adddd3e1412b5":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (GB Compatible)","baf1c3ae7147141962d0b61d5176d9ee":"Megaman X4 (Taiwan) (En) (Rumble Version)","bafeee7c09f44ff52570841a135f0f9e":"Yingxiong Jian 2 (Taiwan)","bb0de10abd5c34ec0a203ded19d15cd9":"Gangdan Wuyu 2 (Taiwan)","bb5562d1de66e525271d4673d1376273":"Pocket Pro Wrestling - Perfect Wrestler (Japan)","bb8e268f1413adbbbf8654daa5c645b4":"Koenig der Loewen, Der - Simbas grosses Abenteuer (Germany)","bbbe3c8987de434cffa7839676132e0d":"Star Heritage (Europe) (Proto) (SRAM Version)","bbd777c45d97cd88a5cf7c7bdacac82a":"F-18 Thunder Strike (USA, Europe) (Beta) (Rumble Version)","bbf9b39219ecec88bea41b98c8352634":"Other Life - Azure Dreams GB (Japan) (SGB Enhanced) (GB Compatible)","bbfd881158bae49739dce7e60c6aeab2":"Barbie - Pet Rescue (USA)","bc56b4a1ec8b993b06405f6eccc982b3":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (GB Compatible)","bc60280596bce42d050b764b647dc39b":"Harry Potter and the Chamber of Secrets (USA, Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,Da)","bc910c865527dd524818597b4b4f7f8a":"Shikong Xing Shou (Taiwan)","bc9c451415f5317dbf404b79b059f8b2":"Shuma Baolong 9 - Baolong Pian (Taiwan) (Zh)","bcc135b000c1c54f12f4ae87c7673b0c":"Alfred's Adventure (Europe) (En,Fr,De,Es,It)","bceeb4182da245db9402dd55eedba53f":"F1 World Grand Prix II for Game Boy Color (Japan) (En,Ja)","bcf0f4e74c63c6f11e46353cf51c27dd":"Klustar (Japan) (Proto 1) (GB Compatible)","bcf3e2445346b4ef40c1278b4b46408c":"Gift (Europe) (Sample)","bd34182264a2f503d4e6982718d3bb6d":"Three Lions (United Kingdom) (En,Fr,De,Es,It,Nl,Sv) (GB Compatible)","bd564a55bee8b797bf35ded0c4d9d218":"Vegas Games (USA) (En,Fr,De) (Rev 1) (Proto)","bd81ecd1dfbc99ff8592a0169fe5e7c3":"Bitterroot (World) (En) (GB Compatible)","bda8c4e5e18070924261823e5fca655c":"Chicken Run (USA, Europe) (En,Fr,De,Es,It)","be091e7efda10e4c004eadc3a1a0f27d":"Tezhong Budui (Taiwan)","be116ebc3666cd9de17ec00cc9f74d02":"Pro Pool (USA) (En,Fr,De)","be54c9b734c4d64fd4c22c6b9fc36651":"Feng Zhi Gou II (Taiwan)","be5ddc5d5c429713232599d7303d3fce":"Taikong Zhanshi - Jingdian Ban (Taiwan)","be7c823a2c6feba614afa32606edebe5":"Puchi Carat (Europe) (SGB Enhanced) (GB Compatible)","bea053b0d658d549444a2f3e71a3e135":"Yurivania II - Josette's Quest (World) (v1.3)","bef8d1dd00650a7080e23153d2734cb1":"Hunter in the Lost Forest (World) (Ja) (GB Compatible)","bf02f5bfc27ef44ceb2878359c7a9e0e":"Cardcaptor Sakura - Tomoeda Shougakkou Daiundoukai (Japan) (Rev 1) (Proto)","bf52d7ebed63cdd9f905695504da69c1":"Startled 911 (Taiwan) (En)","bf5c2f39b42212b8af8776b12f31d466":"Rugrats Movie, The (Europe) (SGB Enhanced) (GB Compatible)","bfc30d30c1d5aadcbc71be23e90f7b8d":"Shaoling Legend - Hero, the Saver (Taiwan) (En)","c017cce5845b3c1df8f8c13589f53c16":"Koudai Yaoguai Lu Baoshi (Taiwan)","c046f62bb3baf1f8398f5e3fb93dd82a":"Atlantis - The Lost Empire (Europe) (Fr,De,Nl)","c07737d6917eef4cc044b92c89a8b048":"Sonic Adventure 8 (Taiwan) (En) (Rumble Version)","c0b8edc2ccefc3ed95cf68c84a813609":"Kinniku Banzuke GB 3 - Shinseiki Survival Retsuden! (Japan)","c0e42b4b7ba5605c3ab7b83b1e2fab6d":"Shamus (USA, Europe) (GB Compatible)","c0fb030099f7a347b676d27a8a52d5ea":"Daisu-ki (World) (v1.1)","c0fd19d90d3d876cc321074239c7334e":"Medarot 2 - Kabuto Version (Japan) (SGB Enhanced) (GB Compatible)","c13132e59221fc42ed79dbebc42f7d0e":"Robin to the Rescue (World)","c159483205c4855951fbde09af451984":"Pocket Music (World) (Proto) (Riff Sampler Test)","c16f93ef289c6524dff09b8906eef668":"Loppi Puzzle Magazine - Kangaeru Puzzle Dai-3-gou (Japan) (SGB Enhanced, GB Compatible) (NP)","c18bf7a9e03ba337658060a9392f2e3f":"Cookie's Bakery (World) (v1.0.3) (GB Compatible)","c194c03c9d31ec629fd126551f7364fe":"Luke Yingxiong 2 - Zook Hero 2 (Taiwan)","c1a1a97800c76036e5223e4098b1eefe":"Ghost Town (World)","c1b1a97f28e06ad24516538849fff8d0":"Rockman X3 (Taiwan)","c1cf2d44f37a31fa7d5cdc7d523fd145":"Mia Hamm Soccer Shootout (USA)","c1dee0a8036d61d1483a793126da3b45":"Rugrats in Paris - The Movie (USA, Europe)","c1ef769ab7525ca2b2c3b0eb88b1c49c":"Warp Coin Catastrophe, The (World) (GB Compatible)","c202f380d697a36347aa1fb628e89c4b":"International Superstar Soccer 2000 (Europe)","c20886be531dcaa1157920a7ffa51240":"UXB (World)","c21dc91b8ba1032f7fe9d46fc23638ec":"Pro Mahjong Kiwame II GB (Japan) (SGB Enhanced) (GB Compatible)","c2274789b0a45c67f1ed84a3822b4c52":"Super Gran (World)","c22a900acae07be5aa036d569281adbb":"Mayhem (World)","c23c356a1ed788942e7d0b2cdac2fd36":"Granduel - Shinki Dungeon no Hihou (Japan) (Sample)","c2432f63206255ee5e616c0d7862538c":"Ide Yousuke no Mahjong Kyoushitsu GB (Japan)","c259cf18b489d1ddecb4b7a04fedfd2e":"Super Real Fishing (Japan) (Rumble Version)","c275de8abc3dd903038737a2139b0c18":"Warau Inu no Bouken - Silly Go Lucky! (Japan)","c2a2490640ef568e6fa326ab149bfacc":"Watashi no Kitchen (Japan) (Rev 1)","c2aa8555dad975a7005ab85bd8fefc04":"Pilgrim's Peril (World) (Demo 2) (GB Compatible)","c2bdeda559f02973c213e5085fd0d4df":"Fix My Heart (World) (GB Compo 2021) (GB Compatible)","c2d515839dcbe3717d5ce5a811bea914":"Skull Nightmare (World)","c2f9d399accca79c44cc63c9f79b8c87":"Game Boy Camera Gallery - Mystery Show (World) (v1.2) (Digital) (GB Compatible)","c30add585d87114288ff8e3726c5381b":"Yu-Gi-Oh! - Dark Duel Stories (USA)","c3115fdc071cf3f656555b327a11ee9c":"Guiwu Zhe 2 (Taiwan)","c38509b681a7f16ad7831ba1f2fa6e31":"F1 Racing Championship (Europe) (En,Fr,De,Es,It)","c3987a4d734c37b7d8324f654a45de70":"Dragon Warrior I & II (USA) (SGB Enhanced) (GB Compatible)","c3a774c513a2ab5a2b134e0210b6caf1":"Autumn With You, An (World) (GB Compatible)","c3c33d274e6d7ec077ee9935da8ed7f3":"Mission Mars (World)","c3c3932d5471bc0028ade1cd7a102d43":"Resident Evil (World) (Proto 1)","c3c4b88e40538c1c99b85313bc88df6d":"Saban's Power Rangers - Lightspeed Rescue (USA, Europe)","c3e86e1dd7ad48602f5682401e5c34bf":"Game Boy Camera Gallery - Mystery Show (World) (v1.4) (Digital) (GB Compatible)","c40cc786c254ebb58ff23054e3654635":"Hali Xiaozi Dier Bu - Mishi de Mi (Taiwan)","c40dcff155901f2d6046fec19017fe37":"Nakayoshi Cooking Series 3 - Tanoshii Obentou (Japan)","c4110ff080c6730fa39c290b2e02d8a7":"Driver (Europe) (En,Fr,De,Es,It) (Beta)","c4114cdae922b6b483f6c076b822719b":"Super 6 in 1 (Taiwan) (En,Zh) (6B-001, Sachen)","c412f76e37a24cd8e006e00cc344425e":"Bubble Frog (World) (GB Compatible)","c416450b06fc81fc07ab792c07790d3a":"Friday the 13th - The GB Game (World) (GB Compatible)","c4354362e13a4dcda40b063d96bd6580":"Puzz Loop (Japan) (GB Compatible)","c43ce6e1c66e6fcfc259762a9244a63d":"Mario Golf GB (Japan)","c4583c9127d08f9a7dec2056a8c21c1f":"Zebco Fishing! (USA) (Rumble Version)","c4639cc61c049e5a085526bb6cac03bb":"Legend of Zelda, The - Oracle of Ages (USA, Australia)","c468c6d714a2d86e2f68bdcdbb40b658":"LEGO Stunt Rally (USA)","c48ab40a864707e54688b9cf8db15faa":"International Track & Field (Europe) (En,Fr,De,It) (SGB Enhanced) (GB Compatible)","c48de261bb5111681bd77ca5f0d68a1b":"Army Men - Air Combat (USA, Europe) (En,Fr,De)","c48f26f5079ad1b411c78fbcb2738d67":"Tobu Tobu Girl Deluxe (World) (GB Compatible)","c49c17b7c695d382ff80ae49899109ba":"Iron Cor - Stainless (World) (v2.0) (GB Compatible)","c4ac0427318b26d5a616025edfae68ac":"RunieStory (World) (Alt)","c4cd1e337bb76ad0f7307f5cfa1ef6bc":"Rox (USA, Europe) (GB Compatible)","c50667baee3e2abdb1588394cc5d4534":"Ohasuta Yama-chan & Raymond (Japan) (SGB Enhanced) (GB Compatible)","c53d2f538f6a5f421c87f935a42aa912":"Swing (Germany)","c569cda6ff220773ec5fce7ea38ef777":"Razmoket a Paris, Les - Le Film (France)","c576f119cb3ad8ad7b5f18e6755232f3":"Microsoft - The Best of Entertainment Pack (Europe)","c58361b88496e7ad0179b59122afd687":"Tiger Woods PGA Tour 2000 (USA, Europe) (GB Compatible)","c5e3bb77000c5d3755e816f6c0eed489":"All Star Tennis 2000 (Europe) (AZTP) (GB Compatible)","c5effc311c2248d6de58b487e729406b":"Medarot 4 - Kabuto Version (Japan)","c5fbee23b0f8fc7502046f1a9fc9587e":"Runner (World)","c64b45177c93d6465618199543e1805a":"2003 Hali Bote 2 - Xiaoshi de Mishi (Taiwan)","c663691b1eca7eeeb501c4d00b4b186f":"Dragon Ball Z - Legendary Super Warriors (Europe)","c680639fa687146d2d821bad6b7447d8":"Harry Potter 3 (USA)","c69bf9512a815c37363da0e7ff418d68":"Pocket Cooking (Japan) (Beta)","c6cc317c220b2de231ce6db9af40bd83":"NBA Pro 99 (Europe) (SGB Enhanced) (GB Compatible)","c6d4f6037588f79def05e767f5dd8893":"Sergio Kidd (World) (En,Es) (v1.995)","c712c2c9955893f00a2dcc4c9444a761":"Xzap (World)","c718cd9fa02d51d389d498ac0469c3be":"Silent Hill 2 - 20th Anniversary Demake (World) (Proto) (GB Compatible)","c720432fe26cefbb5b177920ce20cd80":"Bomberman Max - Hikari no Yuusha (Japan)","c720b196e885fe116d8b0c2154438c0e":"Uno (USA) (GB Compatible)","c721161c0ee8b4731d71448b481c93ae":"Winnie the Pooh - Adventures in the 100 Acre Wood (USA)","c72e9b28a77971fe7b6e9c6d3030b24d":"Shuma Baolong - Shuijing Ban (Taiwan) (Vast Fame)","c73016626b9e7eae04b9a53a3dc4fb78":"Legend of Zelda, The - Link's Awakening DX (Germany) (Rev 1) (Beta) (SGB Enhanced) (GB Compatible)","c73b80f668e138c6828c9bcca13a13ba":"Powerpuff Girls, The - Bad Mojo Jojo (USA) (Rev 2)","c74c40b7da1a54568f4d5ccd3eb56090":"Legend of the River King GB (Germany) (SGB Enhanced) (GB Compatible)","c74c728ce3177a3a9abc5870b6762885":"Atsumete Asobu Kuma no Pooh-san - Mori no Takaramono (Japan)","c75bf50b9fec4e89ced9a2bdfbeb4245":"Army Men (USA, Europe) (En,Fr,De)","c768e670d408f2dc1cc41f42de981087":"Bomberman Selection (Korea) (Beta 2)","c7799bcf50583c9dde914e71d559d7d4":"Fishing for Asteroids (World) (v1.0) (Mini Jam 153) (GB Compatible)","c779f71e7a64d6eab07db8668a6fe216":"Elang Chuanshuo - Shiji Zhi Zhan (Taiwan)","c7a879befd45bbc5cdab7413d86fff76":"Pokemon Puzzle Challenge (Europe) (En,Fr,De,Es,It)","c7bcdd8ace2dfac5fdce889880472f80":"M&M's Minis Madness (USA)","c7cf1e919682b3ee613dd155cc12a15a":"Dance Dance Revolution GB (Japan)","c7f39d8f17fa808ee91b21b2e45d8d90":"2003 Digimom Sapphii (Taiwan) (De)","c83e117ad79a22c6a91586a419cdf1f5":"Legend of Zelda, The - Link's Awakening DX (France) (Rev 1) (Beta) (SGB Enhanced) (GB Compatible)","c8402b8dbd686fb77fe9489e651cbd4d":"Gambler Densetsu Tetsuya - Shinjuku Tenun Hen (Japan) (Rev 1)","c84bc300653ada16fc0b95d14205d992":"Silent Hill 2 - 20th Anniversary Demake (World) (Proto) (GB Compatible)","c851452c0cb8837add5802ad214eca15":"Pokemon Adventure (Taiwan)","c888149fe40d8d760ce490a74ca98263":"Nakayoshi Pet Series 2 - Kawaii Usagi (Japan) (GB Compatible)","c8aaf7b73f70f3d600a1d6c435f8349e":"GB-Wordyl (World) (Ca) (GB Compatible)","c8b51becb4edacc3b115a81329aa12c0":"Shougi 2 (Japan) (GB Compatible)","c8f68e280f379ff7cc10c8ec4ed89142":"Powerpuff Girls, The - Paint the Townsville Green (USA) (Rev 1)","c8fafcbb7a673765ade44b404b734a92":"Bugs Bunny in - Crazy Castle 4 (Europe)","c8ff99c216603ff09733bb4f80e2bc61":"Kawaii Pet Shop Monogatari (Japan) (SGB Enhanced) (GB Compatible)","c9146a0bf581d7f99aeeac0e8dfa04df":"Hamster Club - Oshiema Chuu (Japan)","c9156b49032e63498df93e132b0307b3":"Watashi no Restaurant (Japan)","c954d72f5a9131667aaa06ae185638b4":"Player Manager 2001 (Europe) (En,Fr)","c9799917bf3c583453b3da3cd5547398":"Pocket Family GB 2 (Japan)","c987f711dfb9cba8dc1174219877360f":"Bomberman Max - Blue Champion (USA)","c9a1dab66e0b13d5835c392437b16a5a":"Monster Race 2 (Japan) (SGB Enhanced) (GB Compatible)","c9a5171978e3587475bd6ffb17300b75":"Majokko Mari-chan no Kisekae Monogatari (Japan) (Rev 1) (SGB Enhanced) (GB Compatible)","c9c2f79adc7d23bad885f9289bc12283":"Kanji Shishuu (Japan) (Proto)","c9c39627ee5049e47ce1acd67fff7b8a":"POWA! (World) (En) (GB Compatible)","ca00c843a575efd01814fcbf7d84a8dc":"UEFA 2000 (Europe) (En,Fr,De,Es,It,Nl)","ca5f9281e0652b85b68120b9d8e5db70":"Tynesoft Commodore 16 Classics II (World)","ca73fc9c13dd686a34b4807bb50d5390":"2003 King Lion Advance III (USA)","ca74e5da2f81da8280ca6aa6e6fc4788":"Dragon Ball Z - Legendaere Superkaempfer (Germany) (Beta 3) (All Unlocked)","ca9d65eba8af25068242c946c50b6753":"Yu-Gi-Oh! - Duel des Tenebres (France)","cab48584e4caeb5ba3b1260f7d64c829":"Dragon Ball Z - Densetsu no Chou Senshi-tachi (Japan) (Beta) (All Unlocked)","cae65f307fc388ea2ad237cd12a2a507":"Ravenia (World) (GB Compatible)","cae6f72a359b1088efe6c641cbae2f97":"Watashi no Restaurant (Japan) (Beta 2)","cb2969699ac7deca731d67aa473e0024":"Golf de Ohasuta (Japan) (GB Compatible)","cb2f61ea9d959f7270eec59a5eb51aff":"4 in 1 + 8 in 1 (World) (4B-005, 4B-006, 8B-003, Sachen)","cb5348c1b469d698eccddce99a16d384":"Vigilante 8 (USA) (Rumble Version)","cb5ac6ddcac8d7c7ff29bd10e1751344":"Koudai Yaoguai - Baijin Ban (Taiwan)","cb5fe636114fcb0925d08ceced82dc23":"Legend of the River King GB (Europe) (SGB Enhanced) (GB Compatible)","cb689dc8d4e95fe9d190f6f5ad1d0ed4":"Sabrina - The Animated Series - Zapped! (Europe) (En,Fr,De)","cb8eefcdd6dbce5b9cabf9b1f0d93e42":"Stratagem Hero (World) (GB Compatible)","cb9c9001a0df32e6f89216e291684836":"Antz Racing (Europe) (En,Fr,De,Es,It,Nl)","cbb8140e3f755dbff588e60dff4a2d57":"Real Pro Yakyuu! - Pacific League Hen (Japan) (SGB Enhanced) (GB Compatible)","cbc55f3bb98f8c0443917ae477e56e51":"Medarot 3 - Kabuto Version (Japan)","cbdc5112eb8b9878fa5fe905e0aca556":"Sesame Street - The Adventures of Elmo in Grouchland (USA) (GB Compatible)","cbf4a5b2ff566554b014118e3d0e3e9a":"Game & Watch Gallery 2 (USA, Europe) (SGB Enhanced) (GB Compatible)","cc130e8228a37ecc3d38f7f34aafedaa":"Barbie - Diepzee Avontuur (Netherlands) (GB Compatible)","cc17f52e5140c0d1ad892d1856d05212":"X-Men - Mutant Academy (USA, Europe)","cc1d5175df56961476d3e92761cab9f2":"GB-Wordyl (World) (Pt-BR) (GB Compatible)","cc58fc8ca9583d4d7ba3361d93a68a21":"60 Minutes til Rot (World) (v1.6b) (GB Compatible)","cc5a11a92e0a0f6f476341237efa4b10":"JumpStart Dino Adventure - Field Trip (USA)","cc7639a2269210338b52e626096a99d9":"Mary-Kate & Ashley - Get a Clue! (USA, Europe) (GB Compatible)","cca8749da97aae49def1132a6a72d047":"Carmageddon - Carpocalypse Now (USA) (En,Es) (Beta)","ccb604ca00f176ae6ca40f4fc33d8c1a":"Wizardry Empire (Japan)","ccbb56212e3dbaa9007d389a17e9d075":"Legend of Zelda, The - Link's Awakening DX (USA, Europe) (Rev 1) (SGB Enhanced) (GB Compatible)","ccdcb901229a2278d0be673472f411b9":"Puzzled (Europe) (En,Fr,De)","cd197f8f5638f3b5af7b1a7d6e88772e":"Binary Monster 2 (Taiwan) (En)","cd4ca93b289aa0d7ef6a26b848e5e06a":"Donald Duck - Daisy o Sukue! (Japan)","cd5c8be982147d4ba99376c2b60bdbcf":"Yogi Bear - Great Balloon Blast (USA)","cd679208722a1c68ec9537394d6b2d35":"MetaFight EX (Japan)","cd93b7c015782bec5c9e21494421a76b":"Heebie Jeebies (World)","cd9448b31bfcf7c14be4782e874ebff3":"Trade & Battle Card Hero (Japan) (Rev 1) (3DS Virtual Console) (SGB Enhanced) (GB Compatible)","cdb21e5e2502dc8b9d0cc0acde7841fc":"Yu-Gi-Oh! - Duelo en las Tinieblas (Spain)","cdf275a96518efd2236f0bbb5321c0e3":"Batman Beyond - Return of the Joker (Japan) (NP)","ce1b3efd190f51e089bec904e92a5f01":"Barbie - Meeres Abenteuer (Germany) (GB Compatible)","ce6cd6dccc2de88a8fdc4d08612af359":"Kanji Boy 2 (Japan) (SGB Enhanced) (GB Compatible)","ce749b7cec312369d201336c1b90ced7":"Juedui Wuli (Taiwan)","ce74c7ece3f8475cd64b9bcf5f10d465":"Jingling Wang III (Taiwan)","ce826815852f1896518c9e43e24b23e1":"Jieba Tianwang 4 (Taiwan)","ceb1a6c3ce3d2921c0fb65f420f811fa":"Bakusou Senki Metal Walker GB - Koutetsu no Yuujou (Japan) (GB Compatible)","cecc79084e6515e9c59ce8d63d49eace":"Hands of Time (USA, Europe) (En,Fr,De,Es,It,Nl)","ced299d2952ae83c7bbfbb64767e4634":"Rhino Rumble (USA, Europe)","cf0917a92643bed6798b47a84ceb928e":"Panik!16 (World)","cf0dd6ce83aa648a1aa1e6dc7c3846f8":"Tazz (World)","cf27c9d0c3633d6b805c390f49b38642":"Harry Potter II (USA)","cf364669fe4197209fde5d0c32713d53":"Bokujou Monogatari 3 GB - Boy Meets Girl (Japan)","cf43504c5f14fea347dc937efec04049":"Take Your Medicine (World) (En,Pt) (v1.1) (GB Compatible)","cf45b5414ec4515f7a1021c139edd71e":"Super Black Bass Pocket 3 (Japan) (SGB Enhanced) (GB Compatible)","cf9ed892228e2c7ddee857758ea372a9":"Rocket Power - La Glisse de l'Extreme (France)","cfa42de596faaeb161bea96d3f6b9e6a":"Test Drive 6 (Europe) (En,Fr,De,Es,It) (GB Compatible)","cfac8209d5119235f678303dfb3cc0f2":"Asteroids (USA, Europe) (GB Compatible)","cfb6a98bef18c56e466d27b885e20f8f":"F-1 World Grand Prix (Europe) (En,Fr,De,Es)","cfdd9df7434c0a8d0e0ad3fdb04ea9b7":"Vegas Games (Europe) (En,Fr,De)","cffbcb83ed97a4ff88f71ee383bd0eba":"Absolute X (Europe) (Proto)","d0009c14cfdcd02695d84d068c0d4abe":"Doraemon Kart 2 (Japan) (SGB Enhanced) (GB Compatible)","d00eb270d07d5531e31c7e81e97a3f40":"Wicked Plague (World) (v0.1.2) (Proto)","d01e66fa8d96d2c6b1fd029856d7c14b":"Kisekae Series 2 - Oshare Nikki (Japan)","d0308455ba266cc5b0cd6ca9b671cb4b":"Klustar (USA) (GB Compatible)","d054a2c3a5f203e9930d8c4b88cd6a33":"Cardcaptor Sakura - Itsumo Sakura-chan to Issho (Japan) (Rev 1) (GB Compatible)","d05a3c8e6af26686166b5049f1438dff":"Winnie the Pooh - Adventures in the 100 Acre Wood (Europe) (En,Fr,De,Es,It,Nl,Da)","d05a9da7cd90cc9822e9655fb5476d54":"Gremlins - Unleashed (Europe) (En,Fr,De,Es,It,Pt)","d076ab5be2ec4972376de685c3705ff2":"Piecrust (World)","d0ac42bca20014e1cd0fb38540c1a9c7":"Shuma Baolong - Koudai Ban (Taiwan)","d0aeac956185e9fca207aa419fd769ea":"Closet Monsters (World) (GB Compatible)","d0c1449229a8208d0e6753fa05685df3":"Dinosaur (USA) (Beta)","d0c6ffc3602d91c0b2b1b0461553de33":"Bomberman Selection (Korea)","d0ca48aee3ffb5fd44fc4d4359c5d44b":"Polaris SnoCross (USA) (Rumble Version)","d106d2513aa3bcf6ba34b7f8cbbffe28":"Ou Dorobou Jing - Devil Version (Japan) (SGB Enhanced) (GB Compatible)","d10d56951b817115477d72a855d7c025":"Doraemon no Study Boy - Gakushuu Kanji Game (Japan)","d14c8cbcca2510a3c92107312999bebc":"Backgammon (Japan) (GB Compatible)","d154381bd849d7a04cb90e789f32bb8e":"Adulting! Soundtrack (World) (GB Compatible)","d1934b308085c92b2ee492faa0d159c2":"John Romero's Daikatana (Europe) (En,Fr,It)","d197d271f067afb8a4e41c1336e03098":"Zhizhu Xia III - Dianying Ban (Taiwan)","d1b2c36def4b361645eae44f6a0c53ea":"Gifty (Germany) (En)","d1bf9c15a1499231d6f2a8f0c4dd9041":"Pokemon - Mewtwo Strikes Back (Taiwan) (Zh)","d1e875cb7dac0092e83b9e7799b06653":"Star Wars Episode I - Racer (USA, Europe) (Rumble Version)","d219a65aa70fd9e1e75c65bdf97913da":"Mary-Kate and Ashley - Crush Course (USA, Europe)","d240328faacf5583804a30b7003743b3":"Rats! (USA) (En,Es) (GB Compatible)","d26054cdb11d2ea6f4e991de75b30164":"Dark Winter Wander, A (World) (GB Compatible)","d2711ff066f40c4e6c471b79da0f08b7":"Marble Madness (USA, Europe)","d2731c794aaa3fb4700c83727d8583e2":"Watashi no Restaurant (Japan) (Beta 3)","d29f8f062aa966917f0933365f3682ef":"Sergio Kidd (World) (En,Es) (v2.013)","d2a65d336cec301779641a1699ad96d8":"Super Jacked Up Tomato Face Johnson (World) (v2.3)","d30ad90e521ff7c4105129f25bde6dcf":"Chromanoids (World) (v1.1)","d315dc5767c97e99d3d2aec84d6ea226":"Jissen ni Yakudatsu Tsumego (Japan) (Rev 1)","d31bad86d4c8397c85ecf1c8338afe66":"Cross Hunter - Treasure Hunter Version (Japan)","d34abda546c5f42e40a2eeb28d029de4":"ESPN National Hockey Night (USA)","d3c08c1eb4f93b64c30fcb0bb7ff8924":"Zelda no Densetsu - Fushigi no Kinomi - Daichi no Shou (Japan)","d3c6c44a4f6021b4d5a6454a87af9a6c":"Snoopy Tennis (Europe) (En,Fr,De,Es,It,Nl)","d3edbd375df5b18b6dc21380fe1374ee":"Dream Shark - Part 1 (World) (Beta 2) (GB Compatible)","d40ebe25a1447c9e08f66682fc9085d2":"Dragon Ball Z - Legendaere Superkaempfer (Germany) (Beta 1)","d4255175d7cbca6080c31ec839893d05":"Painter (Europe)","d4353731d8d6b29c0fa9969c767994a6":"Mud Warriors (World) (GB Compatible)","d455f4ae266279daa36f3f3e54569239":"Monster Farm Battle Card GB (Japan) (SGB Enhanced) (GB Compatible)","d4662b64f1ecb3683f87c6439d1e6061":"Halo - Combat Devolved (World) (GB Compatible)","d4876d692dcb6ca68786e1df3af361a6":"Kinniku Banzuke GB - Chousensha wa Kimida! (Japan) (SGB Enhanced) (GB Compatible)","d493254422eb969a504242529a8780a0":"Shuma Baolong 02 4 (China)","d4b6a73e0b9c9bd7dc88baa36c839723":"From TV Animation One Piece - Maboroshi no Grand Line Boukenki! (Japan) (Beta 1) (SGB Enhanced) (GB Compatible)","d4ecb934836df8e3f26af4c976cae730":"Dawn Will Come (World) (GB Compatible)","d5161ed7380af488b22302691c9a33cd":"Keep the Balance (Europe) (En,Fr,De,Es,It)","d53652b59f1d8b50d1b30d75a44f4135":"Mahjong Joou (Japan) (SGB Enhanced) (GB Compatible)","d55433c70617d18bb078426e8cd99708":"Anpfiff - Der RTL Fussball-Manager (Germany)","d56e7601673af3c0f78def06c34c8efa":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (1998-07-05T215532) (GB Compatible)","d5961426b8ea089e2f74a91a747acfdb":"Ready 2 Rumble Boxing (USA) (Rumble Version)","d5a4819a4ca8c2d1baaf340abff03430":"Adventure (World)","d5a558f3f63771ac1e40d53976e090ef":"Bugs Bunny & Lola Bunny - Operation Carrot Patch (Europe) (En,Fr,De,Es,It,Nl) (GB Compatible)","d5aef2fb975eebf3b66ea89c469d0d7c":"Warp Coin Catastrophe, The (World) (v1.1.2) (GB Compatible)","d5b4fd7fd703b447bcb8e1f78865208f":"Itsudemo Pachinko GB - CR Monster House (Japan)","d5cde4a6f4877a71b06278a4802c7cce":"Rox (Japan) (En) (GB Compatible)","d5e1af0598a8db7b93f57eb2909edc17":"Flintstones, The - Burgertime in Bedrock (Europe) (En,Fr,De,Es,It) (Beta)","d5ebdbeda4156b34e3c0f01d55a4221c":"Frogger (Europe) (En,Fr,De,Es,It,Nl) (GB Compatible)","d5f373b287d29e882a1f1182542d5b68":"Spy vs Spy (USA)","d60bc0b1aa3f89229420f6685aafdeb8":"Zap'em (World)","d62e0c703bc1a84e0fce512f4b9c46e7":"Monsters, Inc. (Europe) (En,Fr,It)","d6311339384cb70c35975c8d30a1cd98":"Crazy Bikers (Europe)","d63504ea68f55d3c290cd01d71d4d1cc":"Deja Vu I & II - The Casebooks of Ace Harding (USA)","d645be8abbdf5ae2271ec50522edf274":"Don't Forget About Me (World) (v1.1) (GB Compatible)","d69fdc8dafd38ab4f48cc6a6b8fa1df9":"Hercules - The Legendary Journeys (Europe) (En,Fr,De,Es,It,Nl)","d6a568f56d59772c7a83b5e8504c86d6":"Melanie and the Magic Forest (World) (v1.1) (GB Compatible)","d6acc2206f227aacd81b22edcab2da1c":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (Beta) (SGB Enhanced)","d6ce41d6e3593ebb7bd5298e959cee8a":"Buried Behind the Cabin (World) (GB Compatible)","d6dce5c8dc02ce77d58f8852653e42e4":"Pitfall - Beyond the Jungle (USA, Europe) (GB Compatible)","d6e59ad9058f410a56356accce0cb488":"Space Invasion & Painter (Europe)","d6f78d93f6c784ed58e43c1c6779f2e4":"Bitterroot (World) (Es) (GB Compatible)","d710cd23e7e38023297d04e935dbebae":"Super Robot Taisen - Link Battler (Japan) (SGB Enhanced) (GB Compatible)","d73b7f013ab9e347398683363f720ab7":"Hamster Club 2 (Japan) (GB Compatible)","d741a2a13d654e45a9b24be6e202a32c":"RunieStory (World) (v1.1)","d794a2c5f75d6b2362aebe684935c694":"Tyrannosaurus Tex (World) (Piko Interactive)","d7a018169bc80c1de1e33c024e0991b7":"Cuthbert in the Cooler (World)","d7b5b58cec32e37c4d29336f4b7c61b7":"Daikatana (USA) (Proto 2)","d7b8309532d3316447a9202cb2f19018":"Bob the Builder - Fix it Fun! (Europe) (En,Fr,It)","d7e62b77572a4db9b8d533141c999ff8":"Shuma Baobei - Chao Mengmeng Fanji Zhan (Taiwan) (Zh)","d7f3a39d4fde196fbe2ddbb2a6e575a3":"Holy Magic Century (Europe) (En,Fr,De) (SGB Enhanced) (GB Compatible)","d7f63bbb351a95d73d085a58c8e9f449":"Mario Tennis GB (Japan)","d80951a01c8e329fd3ccc99f95808857":"Turbo RC Racing (USA) (Proto)","d81945176908cc834d3be242528dde96":"Liberator (World)","d849d85a81be386a0617bce591cf1c40":"Death Race 16 (World)","d8595af2c6a3dbb2659acadbc9440515":"Titi - Le Tour du Monde en 80 Chats (France)","d864d40e51fea6c3ed7e4e340f4613fd":"Pocket GI Stable (Japan) (SGB Enhanced) (GB Compatible)","d8800afecf6c190119f508d450f456df":"NASCAR Heat (USA)","d89dcd9cf1a9f6ec694da01b59541401":"Feed IT Souls (World) (v1.3)","d8de3e22c969198f8701bf861cc60974":"Game Boy Gallery 2 (Japan) (Possible Proto) (SGB Enhanced, GB Compatible) (NP)","d94e22b4c08ab3c7b1929f5490adcbf2":"Frogger (USA) (GB Compatible)","d952041d1970551ee4bedbe341556e6f":"Totsugeki! Papparatai (Japan) (SGB Enhanced) (GB Compatible)","d9575286a0da1da5f6036f649024298c":"Toobin' (USA)","d97055e4a2fd4624fc924c4834ace35e":"Alone in the Dark - The New Nightmare (USA) (En,Fr,Es)","d987545c6662cab8f28eca59b456f2b7":"Magician's Curse, The (World)","d99a820e6fabc76264ee1a08b41ef794":"Men in Black 2 - The Series (Europe) (En,Fr,De)","d9d85b81d1b0b4d3c86c95a6e1846f5a":"Action Man - Search for Base X (USA, Europe)","d9ffed48998c978d6bad4a23ae2567b9":"Pocket King (Japan) (SGB Enhanced) (GB Compatible)","da3fe9c44254b6c2dadcf58187d898ef":"Emo Dao (Taiwan)","da5586315ca857071d557a8fde26c108":"From TV Animation One Piece - Yume no Luffy Kaizokudan Tanjou! (Japan) (SGB Enhanced) (GB Compatible)","dabfbdc9aba5f2edc21f884c52881e0d":"Medarot 3 - Kuwagata Version (Japan)","dad39d89a24962b0457dd8e65b7c6ad1":"Muchang Wuyu GB 6 (Taiwan)","dae7b7625d41d8a06266b09924154bb2":"R-Type DX (USA, Europe) (GB Compatible)","db1aeaa7135bd5707dbbccc427808cd7":"Street Fighter Alpha - Warriors' Dreams (USA)","db87fcfe3cc0fecd88ac09dd2f48c845":"Everlasting Summer (World) (Proto)","db9d9e20af969a2ee248ae9af42a5d36":"Sesame Street - Elmo's ABCs (USA) (GB Compatible)","dba35ac5202ee0b8578a1a275ee13b93":"Crazy Golf (World)","dbada1fdfaba283bede36852843f5ed8":"Dance Dance Revolution GB - Disney Mix (Japan)","dbc9bc98ad0f7730b9136d98992ae656":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Rev 2) (Beta) (SGB Enhanced) (Alt 2)","dbcbac05906548b7c7fb8c5639fb7910":"Dicee! (World) (v1.4) (GB Compatible)","dbd7bc8a47d78e84016f0c240e6aa179":"Roswell Conspiracies - Aliens, Myths & Legends (USA) (En,Fr,De)","dbf74341f9d23fe32899ebc9f4bf20c8":"Dragon Ball Z - Densetsu no Chou Senshi-tachi (Japan) (Beta)","dc131a70357d28bc43649c4ad6cd4397":"Dukes of Hazzard, The - Racing for Home (Europe) (En,Fr,De)","dc15bf4d545a2c537f46598cb9204daf":"Solomon (Japan)","dc1680ac734e67945bc4ce002b15d4da":"Harry Potter 3 - Shen Qi Zhi Guang Lun (Taiwan)","dc1ab5d860adc30b57fdadcaf04bf9ef":"Sheng Shou Wuyu - Shenlong Chuanshuo (Taiwan)","dc640627128579ee52c3fb0ff38a96f0":"Supercross Freestyle (Europe) (En,Fr,De,Es,It)","dc835fa5664aa83ff90dc2ff6cc83f24":"Bust-A-Move 4 (USA, Europe) (GB Compatible)","dc94079146ee90d7dd7d72280a3faad5":"Donkey Kong Country (USA, Europe) (En,Fr,De,Es,It)","dca07583bc53befabea1d5467d4ec4d2":"Klustar (Europe) (En,Fr,De,Es,It) (Beta) (GB Compatible)","dcc4505e35d2d4780a56d39c8d268e1c":"Super Donkey Kong 5 (Taiwan) (En) (Rumble Version) (Alt)","dcc73cdf818a54657230bf552504abe1":"Find Out (World) (GB Compatible)","dccb2adec6b97ac35614414a427abdbb":"Barbie - Pet Rescue (Europe) (En,Fr,De,Es,It)","dccbe12f558f971148eb147c32318431":"Madden NFL 2000 (USA, Europe) (Beta) (SGB Enhanced) (GB Compatible)","dce795b0fe13ca2617edb2273cccf0be":"Shin Megami Tensei Devil Children - Shiro no Sho (Japan) (Rev 1) (Proto)","dd1505a3f4d7289b37107c6a98931eb4":"International Superstar Soccer 99 (Europe) (SGB Enhanced) (GB Compatible)","dd34a89c4839949f4a983786ec63a993":"Yu-Gi-Oh! - Racconti Oscuri (Italy)","dd52cfda22b54bb69a4274b85930934c":"Speedy Gonzales - Aztec Adventure (Japan) (Proto) (GB Compatible)","dd53d483612e848d5f636aac67665f72":"Puzzle Bobble Millennium (Japan)","dd6b704cde7ff9516c09ba86833a7f9f":"Aardvark (World)","dd818318641f6c81b8254bc9e04e99af":"Space Baby (USA)","dd8b136f46a0c2ce1381506396e77fde":"Wai Xing Tanxian Zhi Xingqiu Dazhan (Taiwan)","dd9e7c40f202f2c3963930e195d75f4d":"Batman Beyond - Return of the Joker (USA)","ddc44d19f27100e9e9cf440820436152":"Hissatsu Pachinko Boy - CR Monster House (Japan)","dddbe98001059d52284539a631094799":"Trouballs (USA) (Beta)","ddecba0a4e0d1373fad858316faf6f33":"Dinosaur (USA)","de204ad9ae3e29cf2c06ceb372ec9cd2":"Pocket Puyo Puyo Sun (Japan) (SGB Enhanced) (GB Compatible)","de3c7f4b7df2d8c95ea1c5c622c332e8":"Loppi Puzzle Magazine - Hirameku Puzzle Soukangou (Japan) (SGB Enhanced, GB Compatible) (NP)","decde704dfe0a7e4644e3f6c4c9474f3":"Nyghtmare - The Ninth King (World) (v0.1.2) (Beta) (GB Compatible) (Alt)","dedb5679bb7fd73893272195e3c48d9e":"Zhihuan Wang - Shoubu Qu (Taiwan) (Zh)","deef0140c464bff3435061b90e01b70d":"Hamster Paradise 2 (Japan) (Rev 1)","df12fd885c09702ef5f02bfd2a5e1ec3":"Roadsters '98 (USA) (Proto) (SGB Enhanced) (GB Compatible)","df15cf120ba0db664adab8d52f0e4d57":"Rayman - Mister Dark no Wana (Japan)","dfc1c1fa9731807aa8bb5aa7d4849984":"Lemmings VS (Japan)","dfd98373a954974a62043f85fc1e85ae":"Loco-coco (World)","e019b0790ef6e7b2dd39afdbec8ba651":"Glocal Hexcite (Japan) (SGB Enhanced) (GB Compatible)","e0245d992101be481c355e3e2c2cbb83":"Hoyle Casino (USA)","e027bb984964e07be2feeaa712715987":"Dragon Dance (Europe) (Proto) (SGB Enhanced) (GB Compatible)","e041a65713ac7070c9d16cb6501e1a6e":"LEGO Alpha Team (Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)","e0b8537949322d3233cc72ee8c1fce15":"Astro Plumber (World)","e0ee709c3bbe5c59be87944dee1c7dcb":"Boing! (World)","e12fecf7cfa7aa217fb30c16fba18499":"Block Droppin' (World) (v1.0) (GB Compatible)","e155c9d08645a64fb63cd09bc3f56edc":"Escape from Vostok (World) (Proto) (GB Compatible)","e16141de4a31074438eb44e808fb6789":"Hime's Quest (World) (Digital)","e1836b1ec913a6bfa1e02fc250727fa9":"Jisedai Begoma Battle Beyblade (Japan)","e1ae3e808f17b972d063a0bb0d58888e":"Aventures de Buzz l'Eclair, Les (France)","e1af297b7083e1958352bbc5655ef480":"Hana Yori Dango - Another Love Story (Japan)","e1bf59102bcd5e3601f4b24b3e873fd2":"Toki Tori (USA, Europe) (En,Ja,Fr,De,Es)","e1da550bf08b9db2ac142da1a76b7456":"Bub-O Escape - Tournament Edition (World)","e1de60430a3de8b26f68e7472d9cae58":"Jet Set Willy (World)","e1ef19561d4f816c0becc3380139af58":"Dusky Dungeon (World) (v0.2.0) (Proto) (GB Compatible)","e1fcd22f776dc38d0bcffa697794cb1e":"ESPN International Track & Field (USA)","e20f2057c2143993c0f844097d0086d5":"Extreme Sports with the Berenstain Bears (USA, Europe) (En,Fr,De,Es,It)","e24141ed6fc94b149bbf43b4bd9658e8":"Atlantis - The Lost Empire (Europe) (En,Es,It)","e260c0118fd3a6b4dfbec651d156bf3a":"Host, The (World)","e27e5d2079fb84a439dbafda7c6e2ef1":"Konchuu Fighters (Japan)","e2b6cfc93021d361ab1cac347499b493":"Hollywood Pinball (Japan) (GB Compatible)","e2b6edd74568e18e37356a1bd75c216b":"Starseed 2 (World) (GB Compatible)","e2f33aaf29750f1142b2b6017b454bd4":"Zoids - Jashin Fukkatsu! Genobreaker Hen (Japan) (SGB Enhanced) (GB Compatible)","e31b25f35267460f474f7079e445025d":"Grand Casino (Japan) (Proto)","e333c74332067d817732f06cf301d736":"Waternet (World) (Batteryless Generic Save Flash Cartridge Version) (GB Compatible)","e35a91c87173b3ddd332b94a85f67257":"Kikstart (World)","e3809354341cfb1f2ebb3e4dd1bc8828":"Yu-Gi-Oh! Duel Monsters 4 - Battle of Great Duelist - Yuugi Deck (Japan)","e3846151ea7d911c9b0b76de2fe5239a":"Blue's Clues - Blue's Alphabet Book (USA) (Rev 1) (Proto)","e384f3789ef10051159217048c62fb16":"Xtreme Sports (World) (Limited Run Games)","e39b039557a7c0629553ce7fed602bb3":"Legend of Zelda, The - Link's Awakening DX (Germany) (Beta) (SGB Enhanced) (GB Compatible)","e3c757e5f4261e962cacc8a999ec0f87":"NBA in the Zone 2000 (Europe)","e3d17744fcbb85d392b746ebb9f49147":"Boxing Master (World) (Proto) (GB Compatible)","e3edbfe8aba5dd198a9e2e0f0141785b":"Tanimura Hitoshi Ryuu Pachinko Kouryaku Daisakusen - Don Quijote ga Iku (Japan) (SGB Enhanced) (GB Compatible)","e4064df09a734c3ed04f69a970715f6f":"Porklike (World) (v1.0.13)","e43684f551fd471b7dd2d694748cdde1":"Tom and Jerry in - Mouse Attacks! (Europe) (En,Fr,De,Es,It,Nl,Da)","e4594f3d22fce6b71642a9f3049a6054":"Denki Blocks! (Europe) (En,Fr,De,Es,It)","e4874674056451f1df22c2cbf7a25f93":"Zok Zok Heroes (Japan)","e49185b5b5268f17a923a459e84bed0d":"Taisen Tsume Shougi (Japan) (NP) (GB Compatible)","e4c1111dcc4dc23860ce016daf584dc1":"Antz (Europe) (En,Fr,De,Es,It,Nl) (GB Compatible)","e4cf23360373168bacf6a7e4925a27ef":"VR Sports - Powerboat Racing (USA) (Proto)","e4e5488d10d69c4c12eb2a9a522ffc7b":"Tonka Raceway (USA) (Rumble Version)","e51c03fc9ed1a31a9e2be404f9e01068":"Deja Vu I & II - The Casebooks of Ace Harding (Europe) (En,Fr)","e56e69bc23281c85a8a17a48a6f2abdb":"Tyrian 2000 (USA) (Proto) (GB Compatible)","e585b4fc4acf013599938e3d84e4afe3":"StarFox - Grounded (World) (GB Compatible)","e599e5aab2cfe2fc95d340a5c910d87e":"Doraemon no Study Boy - Kanji Yomikaki Master (Japan)","e5a5ff83ab27aa5b20d40dd2ddf3100d":"NBA Jam 2001 (USA, Europe) (Beta)","e5bfbe8dd1f3017834496626208b9d7d":"Super JetPak DX (World) (GB Compatible)","e5cf736f37cbbbbe6957e172de5626fc":"DX Jinsei Game (Japan)","e5d8aea67aef0ee94acf1ed35900ea74":"Azarashi Sentai Inazuma - Dokidoki Daisakusen! (Japan)","e6007f4f4d8d671d7c94390be47e6dfa":"Agent B (World) (GB Compatible)","e6009a3556e22fa2f42134999759d366":"McDonald's Monogatari - Honobono Tenchou Ikusei Game (Japan)","e6149202059598ffb69cf5ad6fff0da7":"Tiledentity (World) (v1.0) (GB Compatible)","e6534476aa084c2933a03392e7202473":"Pancho (World)","e69da049d745b89fd28c79fe20a2b861":"Granduel - Shinki Dungeon no Hihou (Japan)","e6a3d906bc47516138ca14578601af02":"Dokidoki Densetsu - Mahoujin Guruguru (Japan)","e6a4ef193f15c78fa2463a693bfb0928":"Trickboarder GP (Japan)","e6b7301f1f8b127fb6a493c50a0c233c":"Shuihu Shenshou (Taiwan)","e6cfb4de1afee7579d21938eba5a69b3":"Grave Encounter, A (World) (v1.3) (GB Compatible)","e6e14aa92b3969da7edd57abef060ba2":"Carnivale (USA) (Proto)","e6f36322946499f2f55b724c3db916cd":"Bomberman Quest (Europe) (En,Fr,De) (SGB Enhanced) (GB Compatible)","e718083d717d4262d3f26eba4040f8e4":"Action Replay Online (Europe)","e7719bb0d0619e2e5fb10dab75f78654":"NBA Hoopz (USA)","e7775efddf4d0a5e6a9e8534f5efc2ef":"Dokapon! - Millennium Quest (Japan) (SGB Enhanced) (GB Compatible)","e77bbfc1ffb3c846752410a371e098ce":"Chibi Maruko-chan - Go Chounai Minna de Game Da yo! (Japan)","e79ce8c2b2e9ea0c0907cfbfadaa8744":"LEGO Alpha Team (USA)","e7c022031cb882912e81970eb63d4f61":"Beatmania GB (Japan) (SGB Enhanced) (GB Compatible)","e81e4977a1380a6a0bac49bfd9e04671":"Wizardry III - Diamond no Kishi (Japan) (En,Ja)","e84bf72a6a82a76237813e3701551ee8":"UEFA 2000 (Europe) (En,Fr,De,Es,It,Nl) (Beta)","e89653bd33d07e1a50a3ff78c2818a53":"NBA Show Time - NBA on NBC (USA)","e8a7906583a479b95e3bc26677f485a0":"World Cup (World)","e8af8eb59a3f8ab95c68769e651ed138":"Climb It (World)","e8b4a4231325adc851229bbde40d2284":"Top Gun - Fire Storm (USA, Europe) (En,Fr,De,Es,It,Nl)","e8bb2b9629f352fdc0f59a7bffdd66bb":"Meteorite (World)","e8e8c096bebc6b6412fa810422ffd872":"Pokemon Trading Card Game (Europe) (En,Es,It) (Rev 1) (SGB Enhanced) (GB Compatible)","e8ea4eeae15080840086fdc5f047b69c":"Slime Dungeon (World) (GB Compatible)","e91752013f0fb62cf0e52873c412ceeb":"Bibi und Tina - Fohlen Felix in Gefahr (Germany)","e91fd46e7092d32ca264f21853f09539":"Legend of Zelda, The - Link's Awakening DX (Germany) (SGB Enhanced) (GB Compatible)","e923107e9c8b13a769371d041ee383d2":"Jankyuusei - Cosplay Paradise (Japan)","e952d78a439e47ab4d77b563973797d5":"Great Battle Pocket, The (Japan) (SGB Enhanced) (GB Compatible)","e95cf6f2c0e1a7276f37ad8926b3f901":"Moomin no Daibouken (Japan) (Beta)","e96fad823b6771c00c04dab88ede40bb":"Katou Hifumi Kudan - Shougi Kyoushitsu (Japan) (SGB Enhanced) (GB Compatible)","e98124b30408c00786068387353e39e5":"Bust-A-Move Millennium (USA, Europe)","e98b6a7bb91bb0a7e80e40985eefb1d0":"Emperor's New Groove, The (USA)","e99687d3558fd7fc4af702ea1abd9957":"Casper (USA)","ea1d92074995590ebe4766f28f476db9":"Sofia the Witch - Curse of the Monster Moon (World)","ea3cfb50763df7977b3e45b280066742":"Kakurenbo Battle - Monster Tactics (Japan)","ea991b38b2a74d10c6d075f509d9b555":"Meitantei Conan - Norowareta Kouro (Japan) (SGB Enhanced) (GB Compatible)","ea9f362f629124c9423a8d9ba933eced":"Rayman (Europe) (En,Fr,De,Es,It,Nl)","eac27e6d4cd1d38d07f2a18ad8169af1":"Logical (USA)","eb14f75bda32d51b8f5751869743bf7a":"Nakayoshi Pet Series 1 - Kawaii Hamster (Japan) (GB Compatible)","eb76fda958f100fb791111b928ffe46f":"Lucky Luke (Europe) (En,Fr,De,Es)","eb8a8817e782cddb4fe0474922a3405d":"Nakayoshi Pet Series 3 - Kawaii Koinu (Japan)","eb8c8c397482963a027aad7bcb60706a":"Egbert (World)","ebb19fe17fd6d13d9d52239e8da9711a":"Rockman X - Cyber Mission (Japan) (GB Compatible)","ebed797f57ecff8918a4a13de340d83d":"Don't Forget About Me (World) (GB Compatible)","ebfe05828463cc004898e6a95ee57fea":"Keitai Denjuu Telefang - Speed Version (Japan) (GB Compatible)","ec0985bdad4b519c492f07f2d01f1613":"Puyo Puyo Gaiden - Puyo Wars (Japan) (SGB Enhanced) (GB Compatible)","ec11bd38c10913047913eab36b06c2a0":"Shantae (World) (Limited Run Games)","ec1613010e8f9e0bd729f37248c435a8":"Out on a Limb (World)","ec1a1e432cba04e33c408a7dad314997":"V-Rally - Championship Edition (Europe) (En,Fr,De,Es)","ec1c9035be5c529795048546b1f35ca5":"Full Time Soccer & Hang Time Basketball (Europe)","ec39462e39e3cbcabe03667fabf12d5a":"Sabrina - The Animated Series - Zapped! (USA, Europe)","ec3ef08bb6d73b1b57958322d1085dad":"It's a World Rally (Japan) (SGB Enhanced) (GB Compatible)","ec648c50e1bc337c399ab40b58b40509":"WDL - World Destruction League - Thunder Tanks (USA) (En,Fr,De)","ec64d367cdc02cfb9019d058ab5a0fdb":"Pocket Densha 2 (Japan) (SGB Enhanced) (GB Compatible)","ec6d8099aa51acc791e3846558c81ebb":"Roadsters (Europe) (En,Fr,De,Es,It,Nl) (GB Compatible)","ec764e03228d212ca794ac0b9df62857":"Super Mario Bros. Deluxe (USA, Europe)","ecf0d8121278d810bf40c4de8a2a080b":"Game Boy Wars Pocket Tactics (Japan) (Beta)","ed002e5b29f7082a6a37191bf5af1d08":"Pocket Cooking (Japan)","ed23c6ab13f2397becf476509e7e1802":"Xian Dan Chaoren - Ultraman (Taiwan)","ed351bbc74e47f7adb4a926c8c59af8b":"BIG2SMALL (World) (Digital) (GB Compatible)","ed517a9923865f4e4945ca4095313fe2":"Dancing Furby (Japan) (GB Compatible)","ed5a1efc26ceb76f61c133303173ab31":"Sanguozhi Wudai (Taiwan)","ed679655b3721327ea36c857c554427a":"Konami GB Collection Vol.2 (Europe) (GB Compatible)","ed842f9b8786b9f7d8cfa082a4cf47b9":"Gedou Jian Shen - Soul Falchion (Taiwan) (En)","edf021b521a496fe7afc5e15949f5c80":"Fish Files, The (Europe) (En,Fr,De,Es,It)","ee133ab2f9ea5b18e9a19ce9b599a883":"Paperboy (USA, Europe)","ee37c79e8df6475d90e99e527823f92f":"AirForce Delta (USA)","ee44254c96fa9318a26a1a5b0a9b48fe":"Montezuma's Return! (Europe) (En,Fr,De,Es,It) (GB Compatible)","ee4fc61afd79c8a20e57fa04f49ad1b3":"Mummy Returns, The (Europe) (En,Fr,De,Es,It)","ee55d33109a6cd761fb3b5f7bc21c6c0":"Xploder GB (Germany) (v1.2.2G) (GB Compatible)","ee5fe52488da10e838a123649d33d809":"Klustar (Japan) (Proto 2) (GB Compatible)","ee6f509cea8b3350c6171d5204f2a797":"New Addams Family Series, The (Europe) (En,Fr,De,Es,It,Pt) (Rev 1) (Proto)","ee700a60bf4e72287e0b9eb377e981d2":"Dragonmaster (World)","eeb8a7311a959035e8a3c3822329ea48":"Sakata Gorou Kudan no Renju Kyoushitsu (Japan) (SGB Enhanced) (GB Compatible)","eec6986c0380b1071a2ca6d25a29b8d4":"Spy vs Spy (Japan) (Rev 1) (NP)","eec8ef2cedff516fa121f6b1698eac31":"Shishang Chaoqiang RPG + Gedou + Yizhi Ban Zuhe Ka 18 in 1 (Taiwan)","ef032b6f603b3a290a91d40cb9c4b3e6":"Toy Story 2 (USA, Europe) (SGB Enhanced) (GB Compatible)","ef24106662ae769dba0c410933736332":"Golf Daisuki! (Japan) (En) (SGB Enhanced) (GB Compatible)","ef2a181785cc591ac53e960c68e14216":"Donkey Kong 2001 (Japan)","ef451d968a8d2494840385c85c128e6f":"Alone in the Dark - The New Nightmare (Europe) (En,Fr,De,Es,It,Nl) (Beta)","ef5566473e95b1d4413b0e2e858ac56d":"Pokemon - Mewtwo Strikes Back (Taiwan) (En)","efa5853ddae4ab47301b2ca0416583a9":"Chiki Chiki Machine Mou Race (Japan)","efab73ec361b19896bfe5a09ceb53c25":"Nyghtmare - The Ninth King (World) (v0.2.5) (Beta)","efc589169180e3b278be99af8cae1a64":"Majokko Mari-chan no Kisekae Monogatari (Japan) (SGB Enhanced) (GB Compatible)","efe18a36fc03264e23ccbb81fef2beba":"Honkaku Hanafuda GB (Japan)","efeb35261663e96d216615704c469a77":"Green Beret (Unknown) (Proto 3)","eff2f1335219f77a8025e881fecf538c":"Cult of Blood, The (World) (Demo 4) (GB Compatible)","effc5fcd69d188d423c2ddf9ee0f7536":"Shi Mian Maifu - Tianlong Pian (China)","f012b129cebd445c8b63f4ddc475bb26":"Diva Starz (Germany)","f0462eba75d879c40668e20d1dbdb612":"Gex - Enter the Gecko (USA, Europe) (GB Compatible)","f0538d924e04ce032c469268c58b1c8b":"Rockets Vs Cars (World) (GB Compatible)","f0568c53b8ec915dda258955a531f37b":"R-Type DX (Japan) (En) (GB Compatible)","f0656cf3aa3d6b539fb1b7da0fd27617":"Warriors of Might and Magic (USA) (En,Fr,De)","f0691682463eb9d3ea942a2f60f29aa9":"Maus, Die (Europe) (En,Fr,De,Es) (Beta)","f09214d17150911af6aacbe5d89bc00f":"Soreike! Anpanman - 5-tsu no Tou no Ousama (Japan)","f0ae420d6ce590baac5b2ca03f4b2ba6":"Chessmaster (USA, Europe) (GB Compatible)","f0bfbded7125dd312eaf36d16c1556a1":"Rampage - World Tour (USA, Europe) (GB Compatible)","f104769941c0c25e8b468c2ae274d632":"All Humans Must Die! (World) (GB Compatible)","f16c1e8b98e0dbe969214fe3df4562d1":"Sylvanian Families 2 - Irozuku Mori no Fantasy (Japan)","f18339f4c836530bea39086969d28964":"Qui Qui (Japan) (GB Compatible)","f19153c5bc422a2b1b13a4b9ff5d7bd9":"Little Mermaid II, The - Pinball Frenzy (Europe) (En,Fr,De,Es,It)","f1a64423cc8cc50338ab69feee3199f6":"Hugo 2 1-2 (Germany) (GB Compatible)","f1b1776986bbadfa4e6771395fbc6214":"E.T. - The Extra-Terrestrial and the Cosmic Garden (USA)","f1bb0127347994b46258adbda0dc0b16":"Game & Watch Gallery 3 (USA, Europe) (SGB Enhanced) (GB Compatible)","f1e27ad24bb3bf71d1d7b048ae21f0b5":"Uno (Europe) (En,Fr,De,Es,It,Nl) (GB Compatible)","f1f013cd591bc4ea77305bbc9f8cbb3c":"Pokemon - Silberne Edition (Germany) (SGB Enhanced) (GB Compatible)","f204617e057286c4320529bf6679740f":"2003 Digimom Sapphii (Taiwan) (En)","f23a400ac0ac9c33fffb464a82ee9ba9":"Pacifist, The (World) (GB Compatible)","f270519e6357bc32fd07fc6386e14dec":"WWF Betrayal (USA, Europe)","f274752501c49963b509168cb9cdd818":"Kanji de Puzzle (Japan) (GB Compatible)","f2842c70cae57f3e7619966bd1dae886":"Pocket Golf! (USA) (Proto) (SGB Enhanced) (GB Compatible)","f2be814c8bf513e8a709254d9b72d361":"Supershot Golf Robot (USA) (Proto) (SGB Enhanced) (GB Compatible)","f2dc6c4e093e4f8c6cbea80e8dbd62cb":"Legend of Zelda, The - Oracle of Seasons (USA, Australia)","f2e24776d93082362c9b435abc167d89":"Kirby - Tilt 'n' Tumble (USA)","f2f1e41f5843c54c35e731445d6a2beb":"Tiny Toon Adventures - Dizzy's Candy Quest (Europe) (En,Fr,De,Es,It,Nl)","f32210eedc7a619a09339764887e2b93":"Wild Thornberrys, The - Rambler (USA)","f32b31ad27ffb8f40c93f92675b72bd3":"Caise Gedou 24 in 1 Diannao Huamian Xuan Game (Taiwan)","f3414d53473e2cc43347774cc5f40495":"Konami GB Collection Vol.4 (Europe) (GB Compatible)","f36a0ed25a601c039b1171d9daf241d6":"Crystalis (USA)","f36cd3e0a8a8eacf4a9c5a2a755f237e":"Wetrix GB (Japan) (SGB Enhanced) (GB Compatible)","f3ab5b9cd7e7d9478cad2cad85f3a3e6":"Knit-Wit (World) (v1.1) (GB Compatible)","f3da15bac37fd41582d8901d55fdc203":"EuroSport XS Racing (Europe) (Proto) (GB Compatible)","f3daa6ce7708668405674c735bea9745":"Monsters, Inc. (Europe) (En,Es,Nl)","f418cde12a87673da824d354a92f93e5":"Kakutou Ryouri Densetsu Bistro Recipe - Gekitou Foodon Battle Hen (Japan) (SGB Enhanced) (GB Compatible)","f47edc51d53ae8f416898b80bd3022a1":"Dragon Quest Monsters 2 - Maruta no Fushigi na Kagi - Iru no Bouken (Japan) (SGB Enhanced) (GB Compatible)","f48db23d4efec93d401aeb888088bf87":"Shengui Diguo Zhi Emo Cheng (Taiwan)","f4aa77a3a2609f42b879bc27983289bc":"Monster Go! Go! Go!! (Taiwan) (En)","f5325eaf1ecbf7cd6e1e561a3b5d77f7":"Meitantei Conan - Kigantou Hihou Densetsu (Japan) (SGB Enhanced) (GB Compatible)","f55ed9e6a8fece5220e9876fb515e222":"Monster Rancher Explorer (USA)","f56a4dd7e30ca39cfe6da0e6e6a28668":"31 in 1 (Taiwan) (31B-001, Sachen)","f5767f97f44365b703eae78afb7562e6":"Road Rash (USA, Europe)","f5780199efb64e9eee31ca35f68489da":"Cannon Fodder (Europe) (En,Fr,De,Es,It) (Beta)","f57c93ad02dab5141f7a5ba9b228977f":"Konchuu Hakase 3 (Japan) (Beta)","f5aa2d1278788af857ee082c0c03a02e":"Legend of Zelda, The - Link's Awakening DX (France) (Rev 1) (Beta) (SGB Enhanced) (GB Compatible)","f5bbcea31c08651a944a9f3ee8ee37b2":"Luoke Yingxiong EXE5 (Taiwan)","f5c243c844137701560617cf9eb7cd97":"Elemental Fighter (USA) (Proto)","f5e14b069eaddee42735572bd23f7ef8":"Pocket Monsters Eun (Korea)","f5e2ceff766584d558eff4eadbc97f2d":"Astro-Jump - The Sequel (World) (GB Compatible)","f5f4239fa64d1ea9144dd834f087c5c0":"Spectipede (World)","f66b21af086612f0f26448e63aa7a9fd":"Woody Woodpecker (Europe) (En,Fr,De,Es,It)","f67e8aa1d9c49401bfbc8dd148223d99":"Swordsman on the Eternal Journey (World) (En,Ja) (v1.01) (GB Compatible)","f687b51a0fab72e03766356b62261a49":"Looney Tunes (USA) (GB Compatible)","f6b6ddfaaf03392dc469f4eed49ec15d":"Azure Dreams (Europe) (En,Fr,De) (SGB Enhanced) (GB Compatible)","f6dd1b1e5747412b9e5f25376c972d5a":"Metal Gear Solid (USA)","f6e5ce8f0b2f886c6f26af215e2438cf":"Gakkyuu Ou Yamazaki (Japan) (Possible Proto) (GB Compatible)","f6ede04cda0b777b8973a9bcb64e4931":"Hime's Quest (World)","f7034b8297393fa04d9752d461f749a5":"Moomin no Daibouken (Japan)","f70756d7502b1374e05c7fce48a4d283":"Toonsylvania (USA)","f71ac6ac4bb335f59bfd2b594d47ab49":"Dragon Warrior Monsters 2 - Cobi's Journey (USA) (SGB Enhanced) (GB Compatible)","f722b68c0f532ed567397a3e53909ccf":"Magical Chase GB - Minarai Mahoutsukai Kenja no Tani e (Japan)","f73c5cc4935ede64f5b2d62754c90262":"Carmageddon - Carpocalypse Now (USA, Europe) (En,Fr,Es,It)","f746b0ace75ac81f1fe1122087087514":"Hauntsfield (World) (v2.0) (GB Compatible)","f75874e3654360094fc2b09bd1fed7e8":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (SGB Enhanced) (GB Compatible)","f765e4019c3ab207c5804ca530173a31":"Looney Tunes Collector - Martian Revenge! (Europe) (En,Fr,De,Es,It,Nl)","f7a5dc02b67118f6b7b8211f75625ac4":"Vegas Games (USA)","f7db0c6343b12fbef11605077af5d9a2":"GameShark Online (USA)","f7e13de010decf104efa3db865971f34":"Shanghai Pocket (Europe) (Rev 1) (SGB Enhanced) (GB Compatible)","f7e5f82ff68aa678b92e41159db34e90":"Sesame Street - Elmo's 123s (USA) (GB Compatible)","f80034c5241a063e200bce777a9f41fa":"Grimace's Birthday (World) (v1.5)","f8228ad67881ba0b2947f7a0b67de2b1":"Zelda no Densetsu - Yume o Miru Shima DX (Japan) (Beta) (GB Compatible)","f84f21fd860d1d9cfb8ca6ea62a0da8f":"Yu-Gi-Oh! Duel Monsters 4 - Battle of Great Duelist - Jounouchi Deck (Japan)","f853150641026abf3c66dbfb65da428f":"Block Droppin' (World) (v1.1) (GB Compatible)","f855638ad74a7b31cca5786a32bb8868":"International Track & Field (USA) (SGB Enhanced) (GB Compatible)","f85593061b776695d8c0daf0d411eef8":"Shanghai Pocket (USA) (SGB Enhanced) (GB Compatible)","f8690cdd39e182f3bdf09ac5559676ef":"Silent Hill 2 - 20th Anniversary Demake (World) (Proto) (GB Compatible)","f88959b615f284cc120cd17f5263d018":"Elevator Action EX (Europe) (En,Fr,De,Es,It)","f8a6836a0f3448fae3f2e79ba1d32769":"Nobunaga no Yabou - Game Boy Ban 2 (Japan) (SGB Enhanced) (GB Compatible)","f8dd50a061e428e361fd79153a7beb5d":"Mythri (USA) (Proto 2)","f8f8fedf07e783a97a50cd0e05544fc3":"Wizard of Wor (World)","f91bc9d802e1fa17e5611bdd9f0d4d60":"Pine Creek (World) (En-US,Es-MX,Pt-BR) (v2.2) (Beta) (GB Compatible)","f94b2a0548f59d5b90533ed79db9d43e":"Digimon 3 Crystal (Taiwan) (En)","f94f61e6beaec6222e0d35229e2e271e":"Balloon Fight GB (Japan) (SGB Enhanced, GB Compatible) (NP)","f9594360b2a4ed8745b63304063baabb":"Inspector Gadget - Operation Madkactus (USA)","f9726ee26bcba4308493cbbb2ae7b3ea":"Yuenan Zhanyi - Chong Jian Tian Ri (Taiwan)","f985329ca65d773c7bdb40e22612199a":"POWA! (World) (Eu) (GB Compatible)","f9af3abe9471549ff21cea6d81bafc63":"Adventures in Carnal Hell, The (World) (Ja) (v1.02) (GB Compatible)","f9be99d213760ba2e9525abea1de3cb6":"Maus, Die (Europe) (En,Fr,De,Es)","f9c554dfce8383f16e554b61083f0922":"Evel Knievel (USA) (GB Compatible)","f9ec4cc3c9df3887dc731ccf53663ffb":"Pokemon Puzzle Challenge (USA, Australia)","f9feabe8eb6d7921a883fd74faf08bcc":"Ruby & Rusty Save the Crows (World) (v2.6) (GB Compatible)","fa646273b3c23600957c8ccb390a4c51":"AF+ER (World) (GB Compatible)","fa826469ab786988785b6ef36e902010":"Beauty and the Beast - A Board Game Adventure (USA, Australia) (SGB Enhanced) (GB Compatible)","fa8360094cae37a838fabcfd333ae300":"Wizardry Empire - Fukkatsu no Tsue (Japan)","faab6966e9ed5e80ff724cafde1e903d":"Driver (Europe) (En,Fr,De,Es,It)","fac13870841c0f570fff95b0c53a6e24":"Tom and Jerry (USA, Europe)","fac7b33c7d7d3b92e39dfd325e9c7f9a":"Trouble City - Pocket Mission (World) (GB Compatible)","faf6768ebd1b7a72783a2c30fd3eca17":"Musical Notes (World)","fb16f88f0454e1d038c53be5682a017d":"Autobahn (World)","fb343f6c1e4d9ddb10f160ede0f3410e":"Sewing Machine Operation Software (Europe) (En,Fr,Es,Pt) (Proto) (GB Compatible)","fb3c040f2cc720ee26f9744e55371d07":"Trick Boarder (USA)","fb74342ca6ca49f3bad3f6934e13e10f":"Number Builder (World)","fb7b02c4a6e29303255bf0bc6fc819fb":"Friendly Fire (World)","fbbf7c3c11242356586abf2a2c99a6b6":"e'Fighter HOT (Taiwan) (En)","fbc62eb7d5e05f092fd8412bcb9754e3":"Chrome and Blood (World) (v1.00) (Proto) (GB Compatible)","fbd15fa51a3bce25d9041cc522af7fb4":"Hero Hero-kun (Japan)","fbe20570c2e52c937a9395024069ba3c":"Pokemon Pinball (USA, Australia) (Rumble Version) (SGB Enhanced) (GB Compatible)","fbf1ffe76883dffcca299228c81f171f":"Mobile Golf (Japan)","fbfbec8d91d281ca13e52085819058c5":"Nightmare Hamlet (World)","fc03e910ec8028a30f15feee2243d9cb":"Chase H.Q. - Secret Police (Europe) (SGB Enhanced) (GB Compatible)","fc2629620c6a8b67550df2773333788d":"Roi Lion, Le - La Formidable Aventure de Simba (France)","fc327cdb1f787046dae8a17305f10261":"Pumuckls Abenteuer bei den Piraten (Germany)","fca034c2494a20c8a75dd1ff0bcc7545":"Game Boy Gallery 4 (Australia) (SGB Enhanced) (GB Compatible)","fcdd17dd69e273c2830e4eb886fdaf78":"Chaoji Gedou 2001 Alpha (Taiwan)","fcdeae417e8bdf89f1300311e4be5c57":"Postie (World) (v1.1) (GB Compatible)","fce7079639133df3c4d1f7beb8a89b21":"Neighbor (World) (GB Compatible)","fcf910e4d2f27bab40244eb7bf4aa2d3":"Wizardry Empire (Japan) (Rev 1)","fd1f17aa8c4b5c2963db8b0444673a3d":"Battleship (USA, Europe) (GB Compatible)","fd4c412dfb452c267edb508b0e899fdb":"Tristam Island (World) (v1.6) (GB Compatible)","fd5d1ad9fa778895fa24d1fe1eca52b7":"Powerpuff Girls, The - Bulle Contre Lui (France)","fd91d5d69c43f2f0406b3626d625b6e6":"Resident Evil (World) (Proto 2)","fdade90c72f29a498e045323dda5ad37":"Varmit (World)","fdf70472390282fe62765a0838318e52":"Casper (Europe) (En,Fr,De)","fdf704aff61ad3e6848642241ddb6032":"Marvin Strikes Back! (USA) (En,Fr,Es)","fe002ee7d615bf7b728bf6031645b168":"Spy vs Spy (Europe) (En,Fr,De,Es,It,Nl,Sv)","fe22797c8098ac1c18a80875e29aa09b":"Inspector Gadget - Operation Madkactus (Europe) (Fr) (Beta)","fe2df6252f512957b081c1663086b588":"Guaishou Go! Go! II (Taiwan)","fe510196e7fd81b5d9ab9cca091435d7":"Powerpuff Girls, The - Bad Mojo Jojo (Europe) (BJJP)","fe5f723b01bc8cdf7ec1c4a3a61e4ba8":"Shuma Baolong - Diannao Pian (Taiwan) (Zh)","fe97e6bb194bd38e5baeb889b4c8e251":"Marie no Atelier GB (Japan) (SGB Enhanced) (GB Compatible)","feb32471ea029a55d7bdea7e0bdc6961":"Rayman 2 (USA) (En,Fr,De,Es,It)","febd6cdb9f12b6003d7ef33045ef7079":"Spawn (USA)","fee6336f969c9e72e9b78be53d512c1e":"Conker's Pocket Tales (USA, Europe) (En,Fr,De) (SGB Enhanced) (GB Compatible)","ff0001c209fc894c26b339a1519f38a6":"Daikaijuu Monogatari - The Miracle of the Zone II (Japan) (SGB Enhanced) (GB Compatible)","ff1b35a16b0eca8e1fb10af164e66421":"Backgammon (Europe) (En,Fr,De,Es) (GB Compatible)","ff3531643a965dd351b54f32c280c9c0":"Stratacombo (World) (v1.2) (Proto) (GB Compatible)","ff69bcdedca5ac1325af47d8a1e4823f":"Daikatana (USA) (Proto 1)","ff92e59c47a990815bc548e5e253c390":"Chase H.Q. - Secret Police (USA) (SGB Enhanced) (GB Compatible)","ff9b78e1f399fc2bd665b8a08ba27456":"Mickey's Speedway USA (USA, Europe) (En,Fr,De,Es)","ffa003fa747731a9fd547260598538cb":"Dragon Ball Z - Les Guerriers Legendaires (France)","ffadefd2e7e6325cd33f834915a09c8b":"Floracy (Europe) (Proto)","ffe6f6d5b40e249a03b8c80ab140f56d":"Commando (World)"} \ No newline at end of file diff --git a/lib/gemba/emulator_frame.rb b/lib/gemba/emulator_frame.rb index 37ebe55..1ca8bf4 100644 --- a/lib/gemba/emulator_frame.rb +++ b/lib/gemba/emulator_frame.rb @@ -88,6 +88,7 @@ def initialize(app:, config:, platform:, sound:, scale:, @input_recorder = nil @save_mgr = nil @rewind_frame_counter = 0 + @achievement_backend = Achievements::NullBackend.new end # -- Public accessors ------------------------------------------------------- @@ -113,6 +114,17 @@ def initialize(app:, config:, platform:, sound:, scale:, # @return [Integer] turbo speed multiplier (0 = uncapped) attr_reader :turbo_speed + # @return [Achievements::Backend] + attr_reader :achievement_backend + + # Swap in a new achievement backend. Registers callbacks that forward + # unlock events through EventBus for any UI consumer to handle. + # @param backend [Achievements::Backend] + def achievement_backend=(backend) + @achievement_backend = backend + backend.on_unlock { |ach| emit(:achievement_unlocked, achievement: ach) } + end + # @return [Boolean] def muted? = @muted @@ -272,7 +284,7 @@ def init_sdl2 # @param bios_path [String, nil] full path to BIOS file (loaded before reset) # @param rom_source_path [String] original path (for input recorder) # @return [Core] the new core - def load_core(rom_path, saves_dir:, bios_path: nil, rom_source_path: nil) + def load_core(rom_path, saves_dir:, bios_path: nil, rom_source_path: nil, md5: nil) stop_recording if @recorder&.recording? stop_input_recording if @input_recorder&.recording? @@ -284,6 +296,7 @@ def load_core(rom_path, saves_dir:, bios_path: nil, rom_source_path: nil) FileUtils.mkdir_p(saves_dir) unless File.directory?(saves_dir) @core = Core.new(rom_path, saves_dir, bios_path) @rom_source_path = rom_source_path || rom_path + @rom_md5 = md5 new_platform = Platform.for(@core) if new_platform != @platform @@ -307,6 +320,8 @@ def load_core(rom_path, saves_dir:, bios_path: nil, rom_source_path: nil) @next_frame = @fps_time @audio_samples_produced = 0 + @achievement_backend.load_game(@core, @rom_source_path, @rom_md5) + @core end @@ -415,8 +430,17 @@ def save_state(slot) def load_state(slot) return unless @save_mgr - _ok, msg = @save_mgr.load_state(slot) + ok, msg = @save_mgr.load_state(slot) @toast&.show(msg) if msg + # After a save state loads, memory jumps abruptly to whatever it was when + # the state was saved. Achievements that were already in stage 3 (active) + # would fire immediately if the saved memory happens to satisfy their + # conditions. Reset all achievements back through the priming/waiting + # startup sequence — same as what rcheevos does on state load. + if ok + Gemba.log(:info) { "save state loaded (slot #{slot}) — resetting achievement runtime" } + @achievement_backend.reset_runtime + end end def quick_save @@ -427,8 +451,13 @@ def quick_save def quick_load return unless @save_mgr - _ok, msg = @save_mgr.quick_load + ok, msg = @save_mgr.quick_load @toast&.show(msg) if msg + # Same as load_state — memory jumped, reset achievement runtime. + if ok + Gemba.log(:info) { "quick save state loaded — resetting achievement runtime" } + @achievement_backend.reset_runtime + end end # -- Screenshot ------------------------------------------------------------- @@ -806,6 +835,7 @@ def run_one_frame @rewind_frame_counter = 0 end end + @achievement_backend.do_frame(@core) end # -- Input ------------------------------------------------------------------ @@ -817,17 +847,17 @@ def setup_input else mods = HotkeyMap.modifiers_from_state(state_str.to_i) case @hotkeys.action_for(k, modifiers: mods) - when :quit then emit(:request_quit) + when :quit then @app.command(:event, 'generate', '.', '<>') when :pause then toggle_pause when :fast_forward then toggle_fast_forward when :fullscreen then emit(:request_fullscreen) when :show_fps then emit(:request_show_fps_toggle) - when :quick_save then quick_save - when :quick_load then quick_load + when :quick_save then @app.command(:event, 'generate', '.', '<>') + when :quick_load then @app.command(:event, 'generate', '.', '<>') when :save_states then emit(:request_save_states) when :screenshot then take_screenshot when :rewind then do_rewind - when :record then toggle_recording + when :record then @app.command(:event, 'generate', '.', '<>') when :input_record then toggle_input_recording when :open_rom then emit(:request_open_rom) else @keyboard.press(k) @@ -844,6 +874,14 @@ def setup_input start_focus_poll + # Virtual event bindings — bound on '.' so tests can trigger them directly + # without needing widget focus. Physical key handlers above translate to + # these virtual events so the action logic lives in one place. + @app.command(:bind, '.', '<>', proc { emit(:request_quit) }) + @app.command(:bind, '.', '<>', proc { quick_save }) + @app.command(:bind, '.', '<>', proc { quick_load }) + @app.command(:bind, '.', '<>', proc { toggle_recording }) + # Alt+Return fullscreen toggle (emulator convention) @app.command(:bind, @viewport.frame.path, '', proc { emit(:request_fullscreen) }) end diff --git a/lib/gemba/game_index.rb b/lib/gemba/game_index.rb index 9830350..ef1acf1 100644 --- a/lib/gemba/game_index.rb +++ b/lib/gemba/game_index.rb @@ -22,6 +22,15 @@ class GameIndex "DMG" => "gb_games.json", }.freeze + MD5_FILES = { + "AGB" => "gba_md5.json", + "CGB" => "gbc_md5.json", + "DMG" => "gb_md5.json", + }.freeze + + # Maps RomLibrary platform short names → GameIndex prefixes + PLATFORM_PREFIX = { "gba" => "AGB", "gbc" => "CGB", "gb" => "DMG" }.freeze + class << self # Look up a canonical game name by serial code. # @param game_code [String] e.g. "AGB-AXVE", "CGB-BYTE", "DMG-XXXX" @@ -30,12 +39,26 @@ def lookup(game_code) return nil unless game_code && !game_code.empty? platform = game_code.split("-", 2).first - index = index_for(platform) + index = index_for(platform, PLATFORM_FILES) return nil unless index index[game_code] end + # Look up a canonical game name by MD5 hex digest. + # @param md5 [String] hex MD5 of ROM content (any case) + # @param platform [String] short name from RomLibrary — "gba", "gbc", or "gb" + # @return [String, nil] + def lookup_by_md5(md5, platform) + return nil unless md5 && !md5.empty? + + prefix = PLATFORM_PREFIX[platform.to_s.downcase] + return nil unless prefix + + idx = index_for(prefix, MD5_FILES) + idx&.[](md5.downcase) + end + # Force-reload all indexes (useful after re-baking). def reset! @indexes = {} @@ -43,17 +66,18 @@ def reset! private - def index_for(platform) + def index_for(platform, files) @indexes ||= {} - return @indexes[platform] if @indexes.key?(platform) + key = "#{platform}:#{files.object_id}" + return @indexes[key] if @indexes.key?(key) - file = PLATFORM_FILES[platform] - return(@indexes[platform] = nil) unless file + file = files[platform] + return(@indexes[key] = nil) unless file path = File.join(DATA_DIR, file) - return(@indexes[platform] = nil) unless File.exist?(path) + return(@indexes[key] = nil) unless File.exist?(path) - @indexes[platform] = JSON.parse(File.read(path)) + @indexes[key] = JSON.parse(File.read(path)) end end end diff --git a/lib/gemba/game_picker_frame.rb b/lib/gemba/game_picker_frame.rb index bab5725..884a90a 100644 --- a/lib/gemba/game_picker_frame.rb +++ b/lib/gemba/game_picker_frame.rb @@ -25,10 +25,10 @@ class GamePickerFrame PICKER_ASPECT_H = 4 # Default and minimum picker window dimensions (must satisfy PICKER_ASPECT ratio) - PICKER_DEFAULT_W = 640 - PICKER_DEFAULT_H = 854 # 640 * 4/3, rounded up - PICKER_MIN_W = 480 - PICKER_MIN_H = 640 + PICKER_DEFAULT_W = 768 + PICKER_DEFAULT_H = 1024 # 768 * 4/3 + PICKER_MIN_W = 576 + PICKER_MIN_H = 768 def initialize(app:, rom_library:, boxart_fetcher: nil, rom_overrides: nil) @app = app @@ -96,7 +96,12 @@ def build_ui title_lbl = "#{cell}.title" @app.command(:label, title_lbl, text: '', anchor: :center, bg: '#2a2a2a', fg: '#cccccc', - font: '{TkDefaultFont} 10') + font: '{TkDefaultFont} 10', + justify: :center, wraplength: IMG_SIZE) + @app.command(:bind, title_lbl, '', proc { + w = @app.tcl_eval("winfo width #{title_lbl}").to_i + @app.command(title_lbl, :configure, wraplength: w - 8) if w > 8 + }) @app.command(:pack, title_lbl, fill: :x, pady: [4, 2]) plat_lbl = "#{cell}.plat" diff --git a/lib/gemba/locales/en.yml b/lib/gemba/locales/en.yml index 31bb4f8..cf1a5c2 100644 --- a/lib/gemba/locales/en.yml +++ b/lib/gemba/locales/en.yml @@ -8,6 +8,7 @@ menu: game_library: "Game Library" fullscreen: "Fullscreen" rom_info: "ROM Info…" + achievements: "Achievements…" open_logs_dir: "Open Logs Directory" patch_rom: "Patch ROM…" emulation: "Emulation" @@ -47,6 +48,8 @@ dialog: game_running_msg: "Another game is running. Switch to {name}?" return_to_library_title: "Return to Game Library" return_to_library_msg: "Return to the Game Library? Unsaved progress will be lost." + quit_title: "Quit Gemba" + quit_msg: "A game is running. Quit anyway? Unsaved progress will be lost." drop_error_title: "Drop Error" drop_single_file_only: "Please drop a single ROM file." drop_unsupported_type: "Unsupported file type: {ext}" @@ -60,6 +63,8 @@ dialog: reset_hotkeys_title: "Reset Hotkeys" reset_hotkeys_msg: "Reset all hotkey bindings to defaults?" key_conflict_title: "Key Conflict" + cancel_bulk_sync_title: "Cancel Sync?" + cancel_bulk_sync_msg: "A bulk sync is in progress. Closing will cancel it — games will need to be re-synced manually." settings: video: "Video" @@ -131,6 +136,23 @@ settings: bios_not_found: "File not found" skip_bios: "Skip boot animation" tip_skip_bios: "Jump straight to the game, skipping the Game Boy Advance logo screen.\nOnly applies when a real BIOS file is loaded." + retroachievements: "Achievements" + ra_enabled: "Enable RetroAchievements" + ra_credentials: "Account" + ra_username_placeholder: "Username:" + ra_token_placeholder: "Password:" + ra_hardcore: "Hardcore mode (disables save states and rewind)" + tip_ra_password: "Your password is only used to fetch an API token and is never saved." + ra_login: "Login" + ra_verify: "Verify Token" + ra_logout: "Logout" + ra_reset: "Reset" + ra_reset_title: "Reset RetroAchievements" + ra_reset_confirm: "Clear saved credentials and log out?" + ra_test_ok: "Connection OK ✓" + ra_disabled: "RetroAchievements is disabled" + ra_not_logged_in: "Not logged in" + ra_logged_in_as: "Logged in as {username}" recording: "Recording" recording_compression: "Compression:" tip_recording_compression: "Zlib level for .grec files.\n1 = fastest (default), 6+ has diminishing returns." @@ -206,3 +228,21 @@ player: ff_max: ">> MAX" none: "(none)" clear: "Clear" + +achievements: + title: "Achievements" + game_label: "Game:" + sync: "Sync" + name_col: "Achievement" + points_col: "Points" + earned_col: "Earned" + none: "No achievements loaded" + earned_label: "{earned} / {total} earned" + sync_pending: "Syncing…" + sync_failed: "Sync failed" + sync_no_game: "No game loaded" + sync_timeout: "Sync timed out" + not_logged_in: "Not logged in" + include_unofficial: "Include Unofficial" + bulk_syncing: "Syncing {title} ({n}/{total})…" + bulk_sync_done: "Synced {count} games" diff --git a/lib/gemba/locales/ja.yml b/lib/gemba/locales/ja.yml index 1a6dbac..61dde96 100644 --- a/lib/gemba/locales/ja.yml +++ b/lib/gemba/locales/ja.yml @@ -8,6 +8,7 @@ menu: game_library: "ゲームライブラリ" fullscreen: "フルスクリーン" rom_info: "ROM情報…" + achievements: "アチーブメント…" open_logs_dir: "ログフォルダを開く" patch_rom: "ROMをパッチ…" emulation: "エミュレーション" @@ -47,6 +48,8 @@ dialog: game_running_msg: "別のゲームが実行中です。{name}に切り替えますか?" return_to_library_title: "ゲームライブラリに戻る" return_to_library_msg: "ゲームライブラリに戻りますか?保存されていない進行状況は失われます。" + quit_title: "Gembaを終了" + quit_msg: "ゲームが実行中です。終了しますか?保存されていない進行状況は失われます。" drop_error_title: "ドロップエラー" drop_single_file_only: "ROMファイルを1つだけドロップしてください。" drop_unsupported_type: "対応していないファイル形式: {ext}" @@ -60,6 +63,8 @@ dialog: reset_hotkeys_title: "ホットキーをリセット" reset_hotkeys_msg: "すべてのホットキー設定をデフォルトに戻しますか?" key_conflict_title: "キーの競合" + cancel_bulk_sync_title: "同期をキャンセル?" + cancel_bulk_sync_msg: "一括同期が実行中です。閉じるとキャンセルされます — 手動で再同期が必要になります。" settings: video: "映像" @@ -131,6 +136,23 @@ settings: bios_not_found: "ファイルが見つかりません" skip_bios: "起動アニメーションをスキップ" tip_skip_bios: "ゲームボーイアドバンスのロゴ画面をスキップして\n直接ゲームを開始します。実BIOSが必要です。" + retroachievements: "実績" + ra_enabled: "RetroAchievementsを有効にする" + ra_credentials: "アカウント" + ra_username_placeholder: "ユーザー名:" + ra_token_placeholder: "パスワード:" + ra_hardcore: "ハードコアモード(セーブステートと巻き戻し無効)" + tip_ra_password: "パスワードはAPIトークン取得のみに使用され、保存されません。" + ra_login: "ログイン" + ra_verify: "トークン確認" + ra_logout: "ログアウト" + ra_reset: "リセット" + ra_reset_title: "RetroAchievementsをリセット" + ra_reset_confirm: "保存済みの認証情報を削除してログアウトしますか?" + ra_test_ok: "接続OK ✓" + ra_disabled: "RetroAchievementsは無効です" + ra_not_logged_in: "未ログイン" + ra_logged_in_as: "{username}でログイン中" recording: "録画" recording_compression: "圧縮レベル:" tip_recording_compression: ".grecファイルのzlib圧縮レベル。\n1 = 最速(デフォルト)、6以上は効果が小さくなります。" @@ -206,3 +228,21 @@ player: ff_max: ">> 最大" none: "(なし)" clear: "クリア" + +achievements: + title: "アチーブメント" + game_label: "ゲーム:" + sync: "同期" + name_col: "アチーブメント" + points_col: "ポイント" + earned_col: "取得日時" + none: "アチーブメントなし" + earned_label: "{earned} / {total} 取得" + sync_pending: "同期中…" + sync_failed: "同期に失敗しました" + sync_no_game: "ゲームが読み込まれていません" + sync_timeout: "同期がタイムアウトしました" + not_logged_in: "ログインしていません" + include_unofficial: "非公式を含む" + bulk_syncing: "{title} を同期中 ({n}/{total})…" + bulk_sync_done: "{count} ゲームを同期しました" diff --git a/lib/gemba/rom_info.rb b/lib/gemba/rom_info.rb index c6ff7a4..dc60d21 100644 --- a/lib/gemba/rom_info.rb +++ b/lib/gemba/rom_info.rb @@ -18,6 +18,7 @@ module Gemba :platform, # String — uppercased, e.g. "GBA" :game_code, # String? — 4-char code e.g. "AGB-AXVE", or nil :path, # String — absolute path to the ROM file + :md5, # String? — MD5 hex digest of ROM content, or nil (lazy) :has_official_entry, # Boolean — GameIndex has an entry for this game_code :cached_boxart_path, # String? — auto-fetched cover from libretro CDN, or nil :custom_boxart_path # String? — user-set cover image path, or nil @@ -34,17 +35,20 @@ def boxart_path # @param rom [Hash] entry from RomLibrary#all # @param fetcher [BoxartFetcher, nil] # @param overrides [RomOverrides, nil] - def self.from_rom(rom, fetcher: nil, overrides: nil) + def self.from_rom(rom, fetcher: nil, overrides: nil, game_index: GameIndex) game_code = rom['game_code'] rom_id = rom['rom_id'] new( rom_id: rom_id, - title: rom['title'] || rom['rom_id'] || '???', + title: game_index.lookup(game_code) || + game_index.lookup_by_md5(rom['md5'], rom['platform'] || 'gba') || + rom['title'] || rom['rom_id'] || '???', platform: (rom['platform'] || 'gba').upcase, game_code: game_code, path: rom['path'], - has_official_entry: game_code ? !GameIndex.lookup(game_code).nil? : false, + md5: rom['md5'], + has_official_entry: game_code ? !game_index.lookup(game_code).nil? : false, cached_boxart_path: (fetcher.cached_path(game_code) if fetcher&.cached?(game_code)), custom_boxart_path: overrides&.custom_boxart(rom_id), ) diff --git a/lib/gemba/rom_library.rb b/lib/gemba/rom_library.rb index 822e450..52ba148 100644 --- a/lib/gemba/rom_library.rb +++ b/lib/gemba/rom_library.rb @@ -77,13 +77,14 @@ def save! private def subscribe_to_bus - Gemba.bus.on(:rom_loaded) do |rom_id:, path:, title:, game_code:, platform:, **| + Gemba.bus.on(:rom_loaded) do |rom_id:, path:, title:, game_code:, platform:, md5: nil, **| add( 'rom_id' => rom_id, 'path' => path, 'title' => title, 'game_code' => game_code, 'platform' => platform.downcase, + 'md5' => md5, ) touch(rom_id) save! diff --git a/lib/gemba/settings/system_tab.rb b/lib/gemba/settings/system_tab.rb index 0560eff..24e17e9 100644 --- a/lib/gemba/settings/system_tab.rb +++ b/lib/gemba/settings/system_tab.rb @@ -6,15 +6,35 @@ class SystemTab include Locale::Translatable include BusEmitter - FRAME = "#{Paths::NB}.system" - BIOS_ENTRY = "#{FRAME}.bios_row.entry" - BIOS_BROWSE = "#{FRAME}.bios_row.browse" - BIOS_CLEAR = "#{FRAME}.bios_row.clear" - BIOS_STATUS = "#{FRAME}.bios_status" + FRAME = "#{Paths::NB}.system" + BIOS_ENTRY = "#{FRAME}.bios_row.entry" + BIOS_BROWSE = "#{FRAME}.bios_row.browse" + BIOS_CLEAR = "#{FRAME}.bios_row.clear" + BIOS_STATUS = "#{FRAME}.bios_status" SKIP_BIOS_CHECK = "#{FRAME}.skip_row.check" - VAR_BIOS_PATH = '::gemba_bios_path' - VAR_SKIP_BIOS = '::gemba_skip_bios' + RA_ENABLED_CHECK = "#{FRAME}.ra_enabled_row.check" + RA_USERNAME_ENTRY = "#{FRAME}.ra_creds_row.username" + RA_USERNAME_RO = "#{FRAME}.ra_creds_row.username_ro" + RA_TOKEN_ENTRY = "#{FRAME}.ra_creds_row.token" + RA_TOKEN_RO = "#{FRAME}.ra_creds_row.token_ro" + RA_LOGIN_BTN = "#{FRAME}.ra_btn_row.login" + RA_VERIFY_BTN = "#{FRAME}.ra_btn_row.verify" + RA_LOGOUT_BTN = "#{FRAME}.ra_btn_row.logout" + RA_RESET_BTN = "#{FRAME}.ra_btn_row.reset" + RA_FEEDBACK_LABEL = "#{FRAME}.ra_feedback" + RA_HARDCORE_CHECK = "#{FRAME}.ra_hardcore_row.check" + + VAR_BIOS_PATH = '::gemba_bios_path' + VAR_SKIP_BIOS = '::gemba_skip_bios' + VAR_RA_ENABLED = '::gemba_ra_enabled' + VAR_RA_USERNAME = '::gemba_ra_username' + VAR_RA_TOKEN = '::gemba_ra_token' + VAR_RA_HARDCORE = '::gemba_ra_hardcore' + VAR_RA_UNOFFICIAL = '::gemba_ra_unofficial' + VAR_RA_PASSWORD = '::gemba_ra_password' + + RA_UNOFFICIAL_CHECK = "#{FRAME}.ra_unofficial_row.check" def initialize(app, tips:, mark_dirty:) @app = app @@ -28,6 +48,7 @@ def build build_bios_section build_skip_bios_row + build_ra_section end # Called by SettingsWindow via :config_loaded bus event @@ -41,17 +62,36 @@ def load_from_config(config) else @app.command(BIOS_STATUS, :configure, text: translate('settings.bios_not_set')) end + + @app.set_variable(VAR_RA_ENABLED, config.ra_enabled? ? '1' : '0') + @app.set_variable(VAR_RA_USERNAME, config.ra_username.to_s) + @app.set_variable(VAR_RA_HARDCORE, config.ra_hardcore? ? '1' : '0') + @app.set_variable(VAR_RA_UNOFFICIAL, config.ra_unofficial? ? '1' : '0') + @app.set_variable(VAR_RA_PASSWORD, '') + + @presenter&.dispose + @presenter = Achievements::CredentialsPresenter.new(config) + Gemba.bus.on(:credentials_changed) { apply_presenter_state } + Gemba.bus.on(:ra_ping_ok) { @app.after(3000) { @presenter&.clear_transient } } + apply_presenter_state + end + + # Called by AppController#save_config + def save_to_config(config) + config.ra_enabled = @app.get_variable(VAR_RA_ENABLED) == '1' + config.ra_username = @presenter ? @presenter.username : @app.get_variable(VAR_RA_USERNAME).to_s.strip + config.ra_token = @presenter ? @presenter.token : '' + config.ra_hardcore = @app.get_variable(VAR_RA_HARDCORE) == '1' + # Password is never persisted — ephemeral field only end private def build_bios_section - # Header label hdr = "#{FRAME}.bios_hdr" @app.command('ttk::label', hdr, text: translate('settings.bios_header')) @app.command(:pack, hdr, anchor: :w, padx: 10, pady: [15, 2]) - # Path row: readonly entry + Browse + Clear row = "#{FRAME}.bios_row" @app.command('ttk::frame', row) @app.command(:pack, row, fill: :x, padx: 10, pady: [0, 4]) @@ -73,7 +113,6 @@ def build_bios_section command: proc { clear_bios }) @app.command(:pack, BIOS_CLEAR, side: :left) - # Status label @app.command('ttk::label', BIOS_STATUS, text: translate('settings.bios_not_set')) @app.command(:pack, BIOS_STATUS, anchor: :w, padx: 14, pady: [0, 10]) end @@ -96,6 +135,120 @@ def build_skip_bios_row @tips.register(tip_lbl, translate('settings.tip_skip_bios')) end + def build_ra_section + sep = "#{FRAME}.ra_sep" + @app.command('ttk::separator', sep, orient: :horizontal) + @app.command(:pack, sep, fill: :x, padx: 10, pady: [12, 0]) + + hdr = "#{FRAME}.ra_hdr" + @app.command('ttk::label', hdr, text: translate('settings.retroachievements')) + @app.command(:pack, hdr, anchor: :w, padx: 10, pady: [8, 2]) + + # Enable checkbox + enabled_row = "#{FRAME}.ra_enabled_row" + @app.command('ttk::frame', enabled_row) + @app.command(:pack, enabled_row, fill: :x, padx: 10, pady: [0, 6]) + @app.set_variable(VAR_RA_ENABLED, '0') + @app.command('ttk::checkbutton', RA_ENABLED_CHECK, + text: translate('settings.ra_enabled'), + variable: VAR_RA_ENABLED, + command: proc { @mark_dirty.call; @presenter&.enabled = (@app.get_variable(VAR_RA_ENABLED) == '1') }) + @app.command(:pack, RA_ENABLED_CHECK, side: :left) + + # Username + password fields + creds_row = "#{FRAME}.ra_creds_row" + @app.command('ttk::frame', creds_row) + @app.command(:pack, creds_row, fill: :x, padx: 10, pady: [0, 4]) + + @app.command('ttk::label', "#{creds_row}.username_lbl", + text: translate('settings.ra_username_placeholder')) + @app.command(:pack, "#{creds_row}.username_lbl", side: :left, padx: [0, 4]) + + @app.set_variable(VAR_RA_USERNAME, '') + @app.command('ttk::entry', RA_USERNAME_ENTRY, + textvariable: VAR_RA_USERNAME, + width: 18) + @app.command(:pack, RA_USERNAME_ENTRY, side: :left, padx: [0, 10]) + @app.command(:bind, RA_USERNAME_ENTRY, '', proc { @presenter&.username = @app.get_variable(VAR_RA_USERNAME) }) + + # Readonly display variant — tk::entry so we can control background color. + # Not packed initially; swapped in by apply_presenter_state when logged in. + @app.command('entry', RA_USERNAME_RO, + textvariable: VAR_RA_USERNAME, + state: :readonly, + readonlybackground: '#cccccc', + relief: :sunken, + width: 18) + + pw_lbl = "#{creds_row}.pw_lbl" + @app.command('ttk::label', pw_lbl, + text: translate('settings.ra_token_placeholder')) + @app.command(:pack, pw_lbl, side: :left, padx: [0, 4]) + @tips.register(pw_lbl, translate('settings.tip_ra_password')) + + @app.set_variable(VAR_RA_PASSWORD, '') + @app.command('ttk::entry', RA_TOKEN_ENTRY, + textvariable: VAR_RA_PASSWORD, + show: '*', + width: 18) + @app.command(:pack, RA_TOKEN_ENTRY, side: :left) + @app.command(:bind, RA_TOKEN_ENTRY, '', proc { @presenter&.password = @app.get_variable(VAR_RA_PASSWORD) }) + + # Readonly password display — always empty after login (password is ephemeral). + # Not packed initially; swapped in by apply_presenter_state when logged in. + @app.command('entry', RA_TOKEN_RO, + state: :readonly, + readonlybackground: '#cccccc', + relief: :sunken, + width: 18) + + # Login / Test / Logout buttons + btn_row = "#{FRAME}.ra_btn_row" + @app.command('ttk::frame', btn_row) + @app.command(:pack, btn_row, fill: :x, padx: 10, pady: [4, 0]) + + @app.command('ttk::button', RA_LOGIN_BTN, + text: translate('settings.ra_login'), + state: :disabled, + command: proc { emit(:ra_login, + username: @app.get_variable(VAR_RA_USERNAME).strip, + password: @app.get_variable(VAR_RA_PASSWORD)) }) + @app.command(:pack, RA_LOGIN_BTN, side: :left, padx: [0, 6]) + + @app.command('ttk::button', RA_VERIFY_BTN, + text: translate('settings.ra_verify'), + state: :disabled, + command: proc { emit(:ra_verify) }) + @app.command(:pack, RA_VERIFY_BTN, side: :left, padx: [0, 6]) + + @app.command('ttk::button', RA_LOGOUT_BTN, + text: translate('settings.ra_logout'), + state: :disabled, + command: proc { emit(:ra_logout) }) + @app.command(:pack, RA_LOGOUT_BTN, side: :left, padx: [0, 6]) + + @app.command('ttk::button', RA_RESET_BTN, + text: translate('settings.ra_reset'), + state: :disabled, + command: proc { confirm_ra_reset }) + @app.command(:pack, RA_RESET_BTN, side: :left) + + # Feedback label — shows auth result, errors, etc. + @app.command('ttk::label', RA_FEEDBACK_LABEL, text: '') + @app.command(:pack, RA_FEEDBACK_LABEL, anchor: :w, padx: 14, pady: [4, 6]) + + # Hardcore + hardcore_row = "#{FRAME}.ra_hardcore_row" + @app.command('ttk::frame', hardcore_row) + @app.command(:pack, hardcore_row, fill: :x, padx: 10, pady: [0, 4]) + @app.set_variable(VAR_RA_HARDCORE, '0') + @app.command('ttk::checkbutton', RA_HARDCORE_CHECK, + text: translate('settings.ra_hardcore'), + variable: VAR_RA_HARDCORE, + command: proc { @mark_dirty.call }) + @app.command(:pack, RA_HARDCORE_CHECK, side: :left) + end + def browse_bios path = @app.tcl_eval("tk_getOpenFile -filetypes {{{BIOS Files} {.bin}} {{All Files} *}}") return if path.to_s.strip.empty? @@ -127,6 +280,68 @@ def update_status(bios) @app.command(BIOS_STATUS, :configure, text: text) end + def apply_presenter_state + return unless @presenter + + # Swap between editable ttk::entry and styled readonly tk::entry + swap_cred_fields(@presenter.fields_state == :readonly) + + # Buttons (login/verify/logout/reset still use ttk) + @app.command(RA_LOGIN_BTN, :configure, state: @presenter.login_button_state) + @app.command(RA_VERIFY_BTN, :configure, state: @presenter.verify_button_state) + @app.command(RA_LOGOUT_BTN, :configure, state: @presenter.logout_button_state) + @app.command(RA_RESET_BTN, :configure, state: @presenter.reset_button_state) + + # Feedback label + fb = @presenter.feedback + text = case fb[:key] + when :empty then '' + when :not_logged_in then translate('settings.ra_not_logged_in') + when :logged_in_as then translate('settings.ra_logged_in_as', username: fb[:username].to_s) + when :test_ok then translate('settings.ra_test_ok') + when :error then fb[:message].to_s + else '' + end + @app.command(RA_FEEDBACK_LABEL, :configure, text: text) + + # Keep Tcl variable in sync with presenter (e.g. after logout) + @app.set_variable(VAR_RA_USERNAME, @presenter.username) + end + + # Swap between editable ttk::entry widgets and gray readonly tk::entry widgets. + # Uses pack -before to preserve visual order relative to the password label. + def swap_cred_fields(readonly) + pw_lbl = "#{FRAME}.ra_creds_row.pw_lbl" + creds_row = "#{FRAME}.ra_creds_row" + if readonly + @app.tcl_eval("pack forget #{RA_USERNAME_ENTRY} #{RA_TOKEN_ENTRY}") + @app.tcl_eval("pack #{RA_USERNAME_RO} -in #{creds_row} -side left -padx {0 10} -before #{pw_lbl}") + @app.tcl_eval("pack #{RA_TOKEN_RO} -in #{creds_row} -side left") + else + @app.tcl_eval("pack forget #{RA_USERNAME_RO} #{RA_TOKEN_RO}") + @app.tcl_eval("pack #{RA_USERNAME_ENTRY} -in #{creds_row} -side left -padx {0 10} -before #{pw_lbl}") + @app.tcl_eval("pack #{RA_TOKEN_ENTRY} -in #{creds_row} -side left -after #{RA_USERNAME_ENTRY}") + @app.command(RA_USERNAME_ENTRY, :configure, state: @presenter.fields_state) + @app.command(RA_TOKEN_ENTRY, :configure, state: @presenter.fields_state) + end + end + + def confirm_ra_reset + answer = @app.tcl_eval( + "tk_messageBox -parent #{Settings::Paths::TOP} " \ + "-type yesno -icon warning " \ + "-title {#{translate('settings.ra_reset_title')}} " \ + "-message {#{translate('settings.ra_reset_confirm')}}" + ) + return unless answer == 'yes' + + @presenter&.username = '' + @app.set_variable(VAR_RA_USERNAME, '') + @app.set_variable(VAR_RA_PASSWORD, '') + emit(:ra_logout) + @mark_dirty.call + end + end end end diff --git a/lib/gemba/settings_window.rb b/lib/gemba/settings_window.rb index 8a8abec..4cf41ba 100644 --- a/lib/gemba/settings_window.rb +++ b/lib/gemba/settings_window.rb @@ -125,6 +125,9 @@ def initialize(app, callbacks: {}, tip_dismiss_ms: TipService::DEFAULT_DISMISS_M subscribe_to_bus end + # Exposes SystemTab for AppController save_config + def system_tab = @system_tab + # Delegates to GamepadTab def listening_for = @gamepad_tab.listening_for def keyboard_mode? = @gamepad_tab.keyboard_mode? diff --git a/script/bake_game_index.rb b/script/bake_game_index.rb index 48bd50c..9f21f9a 100644 --- a/script/bake_game_index.rb +++ b/script/bake_game_index.rb @@ -15,9 +15,12 @@ # ruby script/bake_game_index.rb # # Output: -# lib/gemba/data/gba_games.json +# lib/gemba/data/gba_games.json (game_code → name, serial-based) # lib/gemba/data/gb_games.json # lib/gemba/data/gbc_games.json +# lib/gemba/data/gba_md5.json (md5 → name, for all platforms) +# lib/gemba/data/gb_md5.json +# lib/gemba/data/gbc_md5.json require "json" require "fileutils" @@ -31,12 +34,14 @@ # name "Pokemon - Emerald Version (USA, Europe)" # region "USA" # serial "BPEE" -# rom ( ... ) +# rom ( name "..." size N crc XXXXXXXX md5 YYYYYYYY sha1 ZZZZZZZZ serial "BPEE" ) # ) +# Returns array of hashes: { name:, region:, serial: (may be nil), md5: (may be nil) } def parse_nointro_dat(path) entries = [] current_name = nil current_region = nil + current_serial = nil File.foreach(path) do |line| line.strip! @@ -45,13 +50,18 @@ def parse_nointro_dat(path) elsif line =~ /^region "(.+)"$/ current_region = $1 elsif line =~ /^serial "(.+)"$/ - serial = $1 - if current_name && !serial.empty? - entries << { serial: serial, name: current_name, region: current_region } - end + current_serial = $1 + elsif line =~ /^rom \(/ + # Extract md5 from rom line: md5 AABBCCDD... + md5 = line[/\bmd5 ([0-9A-Fa-f]{32})\b/, 1]&.downcase + # Also grab serial from rom line if not already set at game level + rom_serial = line[/\bserial "([^"]+)"/, 1] + serial = current_serial || rom_serial + entries << { name: current_name, region: current_region, serial: serial, md5: md5 } if current_name elsif line == ")" current_name = nil current_region = nil + current_serial = nil end end @@ -79,10 +89,11 @@ def parse_nointro_dat(path) raw_entries = parse_nointro_dat(dat_path) puts " #{raw_entries.size} raw entries" - # Build map: "AGB-BPEE" => "Pokemon - Emerald Version (USA, Europe)" + # Build serial map: "AGB-BPEE" => "Pokemon - Emerald Version (USA, Europe)" # When multiple regions share a serial, prefer USA > World > Europe > first seen. by_code = {} raw_entries.each do |entry| + next unless entry[:serial] key = "#{info[:prefix]}-#{entry[:serial]}" existing = by_code[key] region = entry[:region] || "" @@ -101,6 +112,27 @@ def parse_nointro_dat(path) json_path = File.join(DATA_DIR, "#{platform}_games.json") File.write(json_path, JSON.generate(by_code.sort.to_h)) puts " #{json_path} (#{File.size(json_path)} bytes)" + + # Build MD5 map: lowercase md5 => canonical name + # Prefer USA > World > Europe > first seen when multiple regions share an MD5 (unlikely). + by_md5 = {} + raw_entries.each do |entry| + next unless entry[:md5] + existing = by_md5[entry[:md5]] + region = entry[:region] || "" + + if existing.nil? + by_md5[entry[:md5]] = entry[:name] + elsif region.include?("USA") && !existing.include?("(USA") + by_md5[entry[:md5]] = entry[:name] + end + end + + puts " #{by_md5.size} unique MD5s" + + md5_path = File.join(DATA_DIR, "#{platform}_md5.json") + File.write(md5_path, JSON.generate(by_md5.sort.to_h)) + puts " #{md5_path} (#{File.size(md5_path)} bytes)" end puts "\nDone." diff --git a/test/achievements_window/test_bulk_sync.rb b/test/achievements_window/test_bulk_sync.rb new file mode 100644 index 0000000..2c9fd5a --- /dev/null +++ b/test/achievements_window/test_bulk_sync.rb @@ -0,0 +1,218 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require_relative "../shared/tk_test_helper" + +# Tests for AchievementsWindow bulk sync — unofficial toggle fires bus event, +# UI locks/unlocks during sync, per-game status updates, and done count display. +class TestAchievementsWindowBulkSync < Minitest::Test + include TeekTestHelper + + def test_unofficial_toggle_fires_bus_event + assert_tk_app("toggling unofficial checkbox fires :ra_unofficial_changed on the bus") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "tmpdir" + Gemba.bus = Gemba::EventBus.new + + received = nil + Gemba.bus.on(:ra_unofficial_changed) { |value:, **| received = value } + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.stub_fetch_for_display([]) + + Dir.mktmpdir("ach_win_test") do |tmpdir| + ENV['GEMBA_CONFIG_DIR'] = tmpdir + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + app.command("#{top}.toolbar.unofficial", 'invoke') + app.update + + assert_equal true, received, ":ra_unofficial_changed should fire with true" + ensure + ENV.delete('GEMBA_CONFIG_DIR') + end + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_unofficial_toggle_locks_ui_during_sync + assert_tk_app("unofficial toggle disables both buttons while bulk sync runs") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "tmpdir" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + + # Capture widget states from INSIDE the fetch callback — FakeBackend + # calls synchronously so we're mid-sync right here. + mid_sync_states = {} + backend.stub_fetch_for_display do |_| + top = Gemba::AchievementsWindow::TOP + mid_sync_states[:sync] = app.command("#{top}.toolbar.sync", :cget, '-state').to_s + mid_sync_states[:unoff] = app.command("#{top}.toolbar.unofficial", :cget, '-state').to_s + nil + end + + roms = [make_rom_entry(id: 'r1', title: 'Game')] + Dir.mktmpdir("ach_win_test") do |tmpdir| + ENV['GEMBA_CONFIG_DIR'] = tmpdir + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library(*roms), config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + app.command("#{top}.toolbar.unofficial", 'invoke') + app.update + + assert_equal 'disabled', mid_sync_states[:sync], "sync button locked during bulk sync" + assert_equal 'disabled', mid_sync_states[:unoff], "unofficial button locked during bulk sync" + ensure + ENV.delete('GEMBA_CONFIG_DIR') + end + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_bulk_sync_shows_per_game_status_updates + assert_tk_app("bulk sync updates the status bar for each game in sequence") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "tmpdir" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + + statuses = [] + backend.stub_fetch_for_display do |_| + top = Gemba::AchievementsWindow::TOP + statuses << app.command("#{top}.status", :cget, '-text').to_s + [] + end + + roms = [ + make_rom_entry(id: 'r1', title: 'Game One'), + make_rom_entry(id: 'r2', title: 'Game Two'), + ] + Dir.mktmpdir("ach_win_test") do |tmpdir| + ENV['GEMBA_CONFIG_DIR'] = tmpdir + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library(*roms), config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + app.command("#{top}.toolbar.unofficial", 'invoke') + app.update + + assert_equal 2, statuses.size, "one status update per game" + assert_includes statuses[0], 'Game One', "first update names Game One" + assert_includes statuses[1], 'Game Two', "second update names Game Two" + ensure + ENV.delete('GEMBA_CONFIG_DIR') + end + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_bulk_sync_unlocks_ui_when_complete + assert_tk_app("bulk sync re-enables buttons after all games are done") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "tmpdir" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.stub_fetch_for_display([]) + + roms = [make_rom_entry(id: 'r1', title: 'Game')] + Dir.mktmpdir("ach_win_test") do |tmpdir| + ENV['GEMBA_CONFIG_DIR'] = tmpdir + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library(*roms), config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + app.command("#{top}.toolbar.unofficial", 'invoke') + app.update + + assert_equal 'normal', app.command("#{top}.toolbar.sync", :cget, '-state').to_s + assert_equal 'normal', app.command("#{top}.toolbar.unofficial", :cget, '-state').to_s + ensure + ENV.delete('GEMBA_CONFIG_DIR') + end + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_bulk_sync_done_status_shows_count + assert_tk_app("status bar shows N-game count after bulk sync completes") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "tmpdir" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.stub_fetch_for_display([]) + + roms = [ + make_rom_entry(id: 'r1', title: 'Game A'), + make_rom_entry(id: 'r2', title: 'Game B'), + ] + Dir.mktmpdir("ach_win_test") do |tmpdir| + ENV['GEMBA_CONFIG_DIR'] = tmpdir + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library(*roms), config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + app.command("#{top}.toolbar.unofficial", 'invoke') + app.update + + status = app.command("#{top}.status", :cget, '-text').to_s + assert_includes status, '2', "done status should mention 2 games synced" + ensure + ENV.delete('GEMBA_CONFIG_DIR') + end + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end +end diff --git a/test/achievements_window/test_bus_events.rb b/test/achievements_window/test_bus_events.rb new file mode 100644 index 0000000..b490d92 --- /dev/null +++ b/test/achievements_window/test_bus_events.rb @@ -0,0 +1,125 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require_relative "../shared/tk_test_helper" + +# Tests for AchievementsWindow event bus subscriptions — sync started/done +# disables/enables the sync button and auth-result logout disables it. +class TestAchievementsWindowBusEvents < Minitest::Test + include TeekTestHelper + + def test_ra_sync_started_disables_sync_button + assert_tk_app(":ra_sync_started disables the sync button") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + Gemba.bus.emit(:ra_sync_started) + app.update + + top = Gemba::AchievementsWindow::TOP + assert_equal 'disabled', + app.command("#{top}.toolbar.sync", :cget, '-state').to_s + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_ra_sync_done_ok_re_enables_sync_button + assert_tk_app(":ra_sync_done(ok: true) re-enables the sync button") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + Gemba.bus.emit(:ra_sync_started) + app.update + Gemba.bus.emit(:ra_sync_done, ok: true) + app.update + + top = Gemba::AchievementsWindow::TOP + assert_equal 'normal', + app.command("#{top}.toolbar.sync", :cget, '-state').to_s + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_ra_sync_done_fail_shows_error_status + assert_tk_app(":ra_sync_done(ok: false) shows sync_failed in status bar") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + Gemba.bus.emit(:ra_sync_done, ok: false) + app.update + + top = Gemba::AchievementsWindow::TOP + status = app.command("#{top}.status", :cget, '-text').to_s + assert_equal Gemba::Locale.translate('achievements.sync_failed'), status + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_ra_auth_result_logout_disables_sync_button + assert_tk_app(":ra_auth_result after logout disables sync button") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + backend.logout + Gemba.bus.emit(:ra_auth_result, status: :logout) + app.update + + top = Gemba::AchievementsWindow::TOP + assert_equal 'disabled', + app.command("#{top}.toolbar.sync", :cget, '-state').to_s + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end +end diff --git a/test/achievements_window/test_close_confirmation.rb b/test/achievements_window/test_close_confirmation.rb new file mode 100644 index 0000000..ee9cd8f --- /dev/null +++ b/test/achievements_window/test_close_confirmation.rb @@ -0,0 +1,201 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require_relative "../shared/tk_test_helper" + +# Tests for AchievementsWindow close-during-bulk-sync confirmation dialog — +# no dialog when not syncing, dialog shown mid-sync, 'no' keeps window open, +# 'yes' stops sync and withdraws the window. +class TestAchievementsWindowCloseConfirmation < Minitest::Test + include TeekTestHelper + + def test_hide_without_bulk_sync_does_not_show_dialog + assert_tk_app("win.hide when not syncing closes without showing any dialog") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + app.tcl_eval("set ::ach_dlg 0") + app.tcl_eval("proc tk_messageBox {args} { incr ::ach_dlg; return yes }") + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + win.hide + app.update + + assert_equal '0', app.tcl_eval("set ::ach_dlg").strip, + "tk_messageBox must not be called when not in bulk sync" + ensure + app.tcl_eval("catch {rename tk_messageBox {}}") rescue nil + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_hide_during_bulk_sync_shows_dialog + assert_tk_app("win.hide mid-sync triggers a tk_messageBox confirmation") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "tmpdir" + Gemba.bus = Gemba::EventBus.new + + app.tcl_eval("set ::ach_dlg 0") + app.tcl_eval("proc tk_messageBox {args} { incr ::ach_dlg; return no }") + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + + win = nil + attempted = false + backend.stub_fetch_for_display do |_| + unless attempted + attempted = true + win.hide # dialog returns "no" → stays open + app.update + end + nil + end + + roms = [make_rom_entry(id: 'r1', title: 'Game')] + Dir.mktmpdir("ach_win_test") do |tmpdir| + ENV['GEMBA_CONFIG_DIR'] = tmpdir + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library(*roms), config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + app.command("#{top}.toolbar.unofficial", 'invoke') + app.update + + assert_equal '1', app.tcl_eval("set ::ach_dlg").strip, + "tk_messageBox must be shown when hiding during bulk sync" + ensure + ENV.delete('GEMBA_CONFIG_DIR') + end + ensure + app.tcl_eval("catch {rename tk_messageBox {}}") rescue nil + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_hide_confirm_no_keeps_window_visible + assert_tk_app("answering 'no' to the cancel-sync dialog keeps the window open") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "tmpdir" + Gemba.bus = Gemba::EventBus.new + + app.tcl_eval("proc tk_messageBox {args} { return no }") + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + + win = nil + attempted = false + backend.stub_fetch_for_display do |_| + unless attempted + attempted = true + win.hide + app.update + end + nil + end + + roms = [make_rom_entry(id: 'r1', title: 'Game')] + Dir.mktmpdir("ach_win_test") do |tmpdir| + ENV['GEMBA_CONFIG_DIR'] = tmpdir + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library(*roms), config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + app.command("#{top}.toolbar.unofficial", 'invoke') + app.update + + # wm state is unreliable in xvfb when the root is withdrawn; instead + # verify the sync completed and UI was unlocked — only possible if + # the window stayed open and the sync ran to completion. + assert_equal 'normal', app.command("#{top}.toolbar.sync", :cget, '-state').to_s, + "sync button must be re-enabled after sync completes (window stayed open)" + ensure + ENV.delete('GEMBA_CONFIG_DIR') + end + ensure + app.tcl_eval("catch {rename tk_messageBox {}}") rescue nil + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_hide_confirm_yes_stops_sync_and_withdraws_window + assert_tk_app("answering 'yes' stops the bulk sync and withdraws the window") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "tmpdir" + Gemba.bus = Gemba::EventBus.new + + app.tcl_eval("proc tk_messageBox {args} { return yes }") + + win = nil + fetch_count = 0 + hide_done = false + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.stub_fetch_for_display do |_| + fetch_count += 1 + unless hide_done + hide_done = true + win.hide # dialog returns "yes" → cancel + withdraw + app.update + end + nil + end + + roms = [ + make_rom_entry(id: 'r1', title: 'Game One'), + make_rom_entry(id: 'r2', title: 'Game Two'), + ] + Dir.mktmpdir("ach_win_test") do |tmpdir| + ENV['GEMBA_CONFIG_DIR'] = tmpdir + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library(*roms), config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + app.command("#{top}.toolbar.unofficial", 'invoke') + app.update + + assert_equal 1, fetch_count, "sync must stop after the first game when user says yes" + assert_equal 'withdrawn', app.tcl_eval("wm state #{top}").strip, + "window must be withdrawn after user confirms close" + ensure + ENV.delete('GEMBA_CONFIG_DIR') + end + ensure + app.tcl_eval("catch {rename tk_messageBox {}}") rescue nil + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end +end diff --git a/test/achievements_window/test_initial_state.rb b/test/achievements_window/test_initial_state.rb new file mode 100644 index 0000000..af56443 --- /dev/null +++ b/test/achievements_window/test_initial_state.rb @@ -0,0 +1,164 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require_relative "../shared/tk_test_helper" + +# Tests for AchievementsWindow initial widget state — sync button, unofficial +# checkbox, game combo filter, and status bar default text. +class TestAchievementsWindowInitialState < Minitest::Test + include TeekTestHelper + + TOP = Gemba::AchievementsWindow::TOP rescue '.gemba_achievements' + + def test_sync_button_disabled_when_not_authenticated + assert_tk_app("sync button disabled when not authenticated") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new # NOT logged in + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + assert_equal 'disabled', + app.command("#{top}.toolbar.sync", :cget, '-state').to_s + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_sync_button_enabled_when_authenticated + assert_tk_app("sync button enabled when authenticated") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + assert_equal 'normal', + app.command("#{top}.toolbar.sync", :cget, '-state').to_s + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_unofficial_checkbox_reflects_config_false + assert_tk_app("unofficial checkbox is unchecked when config is false") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + assert_equal '0', app.get_variable(Gemba::AchievementsWindow::VAR_UNOFFICIAL) + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_unofficial_checkbox_reflects_config_true + assert_tk_app("unofficial checkbox is checked when config is true") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(true) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + assert_equal '1', app.get_variable(Gemba::AchievementsWindow::VAR_UNOFFICIAL) + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_combo_shows_only_gba_games + assert_tk_app("combo lists GBA games only, not GB or GBC") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + roms = [ + make_rom_entry(id: 'gba1', title: 'GBA Game', platform: 'gba'), + make_rom_entry(id: 'gb1', title: 'GB Game', platform: 'gb'), + make_rom_entry(id: 'gbc1', title: 'GBC Game', platform: 'gbc'), + ] + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library(*roms), config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + values = app.command("#{top}.toolbar.combo", :cget, '-values').to_s + assert_includes values, 'GBA Game' + refute_includes values, 'GB Game' + refute_includes values, 'GBC Game' + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_status_shows_none_when_empty + assert_tk_app("status shows 'no achievements' when backend has no achievements") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + app.update + + top = Gemba::AchievementsWindow::TOP + status = app.command("#{top}.status", :cget, '-text').to_s + assert_equal Gemba::Locale.translate('achievements.none'), status + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end +end diff --git a/test/achievements_window/test_sorting.rb b/test/achievements_window/test_sorting.rb new file mode 100644 index 0000000..d96cbd8 --- /dev/null +++ b/test/achievements_window/test_sorting.rb @@ -0,0 +1,227 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require_relative "../shared/tk_test_helper" + +# Tests for AchievementsWindow treeview column sorting — default order, +# heading click indicators, and indicator cleanup when switching columns. +class TestAchievementsWindowSorting < Minitest::Test + include TeekTestHelper + + def test_default_sort_earned_first_then_alphabetical + assert_tk_app("default sort: earned first, then unearned A→Z") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "support/fake_core" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'z', title: 'Zebra', description: '', points: 5) { false } + backend.add_achievement(id: 'a', title: 'Aardvark', description: '', points: 5) { |_| true } + backend.add_achievement(id: 'm', title: 'Monkey', description: '', points: 5) { false } + backend.do_frame(FakeCore.new) + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + items = app.tcl_eval("#{tree} children {}").split + titles = items.map { |id| app.tcl_eval("#{tree} set #{id} name") } + assert_equal 'Aardvark', titles[0], "earned should be first" + assert_equal 'Monkey', titles[1], "Monkey before Zebra alphabetically" + assert_equal 'Zebra', titles[2] + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_click_name_heading_sorts_asc_with_indicator + assert_tk_app("clicking name heading sorts A→Z and shows ▲") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'z', title: 'Zebra', description: '', points: 5) { false } + backend.add_achievement(id: 'a', title: 'Aardvark', description: '', points: 5) { false } + backend.add_achievement(id: 'm', title: 'Monkey', description: '', points: 5) { false } + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + cmd = app.tcl_eval("#{tree} heading name -command") + app.tcl_eval("uplevel #0 {#{cmd}}") + app.update + + items = app.tcl_eval("#{tree} children {}").split + titles = items.map { |id| app.tcl_eval("#{tree} set #{id} name") } + assert_equal %w[Aardvark Monkey Zebra], titles + + assert_includes app.tcl_eval("#{tree} heading name -text"), '▲' + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_click_name_heading_twice_reverses_to_desc + assert_tk_app("clicking name heading twice reverses to Z→A and shows ▼") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'z', title: 'Zebra', description: '', points: 5) { false } + backend.add_achievement(id: 'a', title: 'Aardvark', description: '', points: 5) { false } + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + cmd = app.tcl_eval("#{tree} heading name -command") + app.tcl_eval("uplevel #0 {#{cmd}}") # asc + app.tcl_eval("uplevel #0 {#{cmd}}") # desc + app.update + + items = app.tcl_eval("#{tree} children {}").split + titles = items.map { |id| app.tcl_eval("#{tree} set #{id} name") } + assert_equal %w[Zebra Aardvark], titles + assert_includes app.tcl_eval("#{tree} heading name -text"), '▼' + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_click_points_heading_sorts_low_to_high + assert_tk_app("clicking points heading sorts by points low→high") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'a', title: 'High', description: '', points: 50) { false } + backend.add_achievement(id: 'b', title: 'Low', description: '', points: 5) { false } + backend.add_achievement(id: 'c', title: 'Mid', description: '', points: 25) { false } + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + cmd = app.tcl_eval("#{tree} heading points -command") + app.tcl_eval("uplevel #0 {#{cmd}}") + app.update + + items = app.tcl_eval("#{tree} children {}").split + pts = items.map { |id| app.tcl_eval("#{tree} set #{id} points").to_i } + assert_equal [5, 25, 50], pts + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_click_earned_heading_puts_unearned_last + assert_tk_app("clicking earned heading keeps unearned rows at the bottom") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "support/fake_core" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'e', title: 'Earned', description: '', points: 5) { |_| true } + backend.add_achievement(id: 'u', title: 'Unearned', description: '', points: 5) { false } + backend.do_frame(FakeCore.new) + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + cmd = app.tcl_eval("#{tree} heading earned -command") + app.tcl_eval("uplevel #0 {#{cmd}}") + app.update + + items = app.tcl_eval("#{tree} children {}").split + earned = items.map { |id| app.tcl_eval("#{tree} set #{id} earned") } + assert_equal '', earned.last, "unearned must be last" + refute_equal '', earned.first, "earned must be first" + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_switching_sort_column_clears_old_indicator + assert_tk_app("switching sort column removes indicator from previously sorted column") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'a', title: 'Alpha', description: '', points: 5) { false } + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + name_cmd = app.tcl_eval("#{tree} heading name -command") + pts_cmd = app.tcl_eval("#{tree} heading points -command") + app.tcl_eval("uplevel #0 {#{name_cmd}}") # sort by name + app.tcl_eval("uplevel #0 {#{pts_cmd}}") # switch to points + app.update + + name_text = app.tcl_eval("#{tree} heading name -text") + pts_text = app.tcl_eval("#{tree} heading points -text") + refute_includes name_text, '▲', "name heading must lose indicator after switching" + refute_includes name_text, '▼', "name heading must lose indicator after switching" + assert_includes pts_text, '▲', "points heading should show ▲" + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end +end diff --git a/test/achievements_window/test_tree_rendering.rb b/test/achievements_window/test_tree_rendering.rb new file mode 100644 index 0000000..b719850 --- /dev/null +++ b/test/achievements_window/test_tree_rendering.rb @@ -0,0 +1,133 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require_relative "../shared/tk_test_helper" + +# Tests for AchievementsWindow treeview rendering — achievement rows, earned/ +# unearned column display, and status bar earned count. +class TestAchievementsWindowTreeRendering < Minitest::Test + include TeekTestHelper + + def test_tree_shows_achievement_titles + assert_tk_app("treeview rows show achievement titles from the backend") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'a1', title: 'First Act', description: '', points: 5) { false } + backend.add_achievement(id: 'a2', title: 'Second Act', description: '', points: 10) { false } + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + items = app.tcl_eval("#{tree} children {}").split + titles = items.map { |id| app.tcl_eval("#{tree} set #{id} name") } + assert_equal 2, items.size + assert_includes titles, 'First Act' + assert_includes titles, 'Second Act' + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_unearned_achievements_have_empty_earned_column + assert_tk_app("unearned achievements show empty earned column") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'a1', title: 'Unearned', description: '', points: 5) { false } + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + item = app.tcl_eval("#{tree} children {}").split.first + assert_equal '', app.tcl_eval("#{tree} set #{item} earned") + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_earned_achievements_show_date + assert_tk_app("earned achievements show a YYYY-MM-DD date in the earned column") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "support/fake_core" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'a1', title: 'Earned One', description: '', points: 5) { |_| true } + backend.do_frame(FakeCore.new) + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + tree = "#{Gemba::AchievementsWindow::TOP}.tf.tree" + item = app.tcl_eval("#{tree} children {}").split.first + earned = app.tcl_eval("#{tree} set #{item} earned") + assert_match(/\d{4}-\d{2}-\d{2}/, earned) + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end + + def test_status_bar_shows_earned_count + assert_tk_app("status bar shows 'X / Y earned'") do + begin + require "gemba/headless" + require "support/achievements_window_helpers" + require "support/fake_core" + Gemba.bus = Gemba::EventBus.new + + backend = Gemba::Achievements::FakeBackend.new + backend.login_with_token(username: 'u', token: 't') + backend.add_achievement(id: 'a1', title: 'Alpha', description: '', points: 5) { |_| true } + backend.add_achievement(id: 'a2', title: 'Beta', description: '', points: 5) { false } + backend.do_frame(FakeCore.new) + + win = Gemba::AchievementsWindow.new( + app: app, rom_library: make_rom_library, config: FakeConfig.new(false) + ) + win.update_game(rom_id: nil, backend: backend) + win.show + win.refresh(backend) + app.update + + top = Gemba::AchievementsWindow::TOP + status = app.command("#{top}.status", :cget, '-text').to_s + assert_includes status, '1' + assert_includes status, '2' + ensure + app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil + end + end + end +end diff --git a/test/shared/tk_test_helper.rb b/test/shared/tk_test_helper.rb index 84a0d83..2d1124e 100644 --- a/test/shared/tk_test_helper.rb +++ b/test/shared/tk_test_helper.rb @@ -72,6 +72,25 @@ def initialize(*) }) end end + + # Wrap after() to capture the full Ruby backtrace before Teek converts + # the exception to a Tcl error (at which point the backtrace is lost). + def after(ms, on_error: :raise, &block) + path = ENV['GEMBA_BGERROR_LOG'] + return super unless path + super(ms, on_error: on_error) do + begin + block.call + rescue => e + File.open(path, 'a') do |f| + f.puts "Ruby exception in after(#{ms}ms): #{e.class}: #{e.message}" + f.puts e.backtrace.join("\n") + f.puts "---" + end + raise + end + end + end end Teek::App.prepend(BgerrorCapture) RUBY diff --git a/test/support/achievements_window_helpers.rb b/test/support/achievements_window_helpers.rb new file mode 100644 index 0000000..94a43e1 --- /dev/null +++ b/test/support/achievements_window_helpers.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# Minimal config stand-in for AchievementsWindow tests. +# The window only reads ra_unofficial? from config at build time. +FakeConfig = Struct.new(:ra_unofficial) { + def ra_unofficial? = ra_unofficial +} unless defined?(FakeConfig) + +# Build a plain rom hash suitable for RomLibrary stubbing. +def make_rom_entry(id:, title:, platform: 'gba', game_code: 'AGB-TEST', md5: "#{id}abcd") + { 'rom_id' => id, 'title' => title, 'platform' => platform, + 'game_code' => game_code, 'path' => "/games/#{id}.gba", 'md5' => md5 } +end unless respond_to?(:make_rom_entry, true) + +# Wrap an array of rom hashes in a minimal RomLibrary-compatible struct. +def make_rom_library(*roms) + Struct.new(:roms) { def all = roms }.new(roms) +end unless respond_to?(:make_rom_library, true) diff --git a/test/support/fake_core.rb b/test/support/fake_core.rb new file mode 100644 index 0000000..40b503c --- /dev/null +++ b/test/support/fake_core.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +# Minimal Core stub — no mGBA dependency, just a programmable memory map. +# Used by achievement backend tests to simulate bus reads without a real ROM. +class FakeCore + def initialize + @mem = Hash.new(0) + end + + # Write a byte into the fake memory map. + # @param address [Integer] GBA address + # @param value [Integer] 0..255 + def poke(address, value) + @mem[address] = value & 0xFF + end + + # Reads back what was poked (or 0 for anything not explicitly written). + def bus_read8(address) + @mem[address] + end + + def destroyed? + false + end +end diff --git a/test/support/player_helpers.rb b/test/support/player_helpers.rb index 743e78d..9d8d0df 100644 --- a/test/support/player_helpers.rb +++ b/test/support/player_helpers.rb @@ -60,14 +60,21 @@ def poll_until_focused(player, timeout_ms: 2_000, &block) app.after(50, &check) end -def poll_until_ready(player, timeout_ms: 5_000, &block) - app = player.app +# Polls every 50ms until the given condition block returns truthy, then +# yields the action block. Aborts with exit 1 if the deadline is exceeded. +# +# Example — wait for a menu entry to become enabled: +# poll_until(app, timeout_ms: 3_000, +# condition: -> { app.tcl_eval('...entrycget 0 -state').strip == 'normal' }) do +# app.command(...) +# end +def poll_until(app, timeout_ms: 5_000, condition:, label: "condition", &block) deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + timeout_ms / 1000.0 check = proc do - if player.ready? + if condition.call block.call elsif Process.clock_gettime(Process::CLOCK_MONOTONIC) > deadline - $stderr.puts "FAIL: Player not ready within #{timeout_ms}ms" + $stderr.puts "FAIL: #{label} not true within #{timeout_ms}ms" exit 1 else app.after(50, &check) @@ -75,3 +82,11 @@ def poll_until_ready(player, timeout_ms: 5_000, &block) end app.after(50, &check) end + +def poll_until_ready(player, timeout_ms: 5_000, &block) + poll_until(player.app, timeout_ms: timeout_ms, + condition: -> { player.ready? }, + label: "Player not ready") do + block.call + end +end diff --git a/test/test_achievement.rb b/test/test_achievement.rb new file mode 100644 index 0000000..260b3c6 --- /dev/null +++ b/test/test_achievement.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "gemba/headless" +require "gemba/achievements" + +class TestAchievement < Minitest::Test + def test_unearned_by_default + ach = Gemba::Achievements::Achievement.new( + id: 'x', title: 'T', description: 'D', points: 10, earned_at: nil + ) + refute ach.earned? + assert_nil ach.earned_at + end + + def test_earn_returns_copy_with_timestamp + ach = Gemba::Achievements::Achievement.new( + id: 'x', title: 'T', description: 'D', points: 10, earned_at: nil + ) + earned = ach.earn + assert earned.earned? + assert_instance_of Time, earned.earned_at + end + + def test_earn_does_not_mutate_original + ach = Gemba::Achievements::Achievement.new( + id: 'x', title: 'T', description: 'D', points: 10, earned_at: nil + ) + ach.earn + refute ach.earned? + end +end diff --git a/test/test_app_controller.rb b/test/test_app_controller.rb index 0a5c8c8..4d7fcaf 100644 --- a/test/test_app_controller.rb +++ b/test/test_app_controller.rb @@ -17,6 +17,7 @@ def test_exit_with_rom_loaded_does_not_hang require "support/player_helpers" player = Gemba::AppController.new("#{TEST_ROM}") + player.disable_confirmations! app = player.app poll_until_ready(player) { player.running = false } @@ -39,6 +40,7 @@ def test_quit_hotkey_without_rom require "gemba" player = Gemba::AppController.new + player.disable_confirmations! app = player.app app.after(100) do @@ -70,11 +72,11 @@ def test_view_menu_game_library_returns_to_picker player.disable_confirmations! app = player.app - poll_until_ready(player) do + poll_until(app, timeout_ms: 5_000, + condition: -> { app.tcl_eval('.menubar.view entrycget 0 -state').strip == 'normal' }, + label: "View menu entry never became enabled") do puts "BEFORE=#{player.current_view}" - - app.command('.menubar.view', 'invoke', 0) - + app.tcl_eval('.menubar.view invoke 0') app.after(100) do puts "AFTER=#{player.current_view}" player.running = false @@ -157,6 +159,7 @@ def test_fullscreen_toggle_does_not_hang require "support/player_helpers" player = Gemba::AppController.new("#{TEST_ROM}") + player.disable_confirmations! app = player.app poll_until_ready(player) do @@ -173,8 +176,8 @@ def test_fullscreen_toggle_does_not_hang app.update app.after(50) do - # User presses q → quit - app.command(:event, 'generate', frame, '', keysym: 'q') + # Trigger quit via virtual event — no focus dependency + app.command(:event, 'generate', '.', '<>') end end end @@ -201,6 +204,7 @@ def test_exit_during_turbo_does_not_hang require "support/player_helpers" player = Gemba::AppController.new("#{TEST_ROM}") + player.disable_confirmations! app = player.app poll_until_ready(player) do @@ -212,8 +216,8 @@ def test_exit_during_turbo_does_not_hang app.update app.after(50) do - # User presses q → quit (while still in turbo) - app.command(:event, 'generate', frame, '', keysym: 'q') + # Trigger quit via virtual event — no focus dependency + app.command(:event, 'generate', '.', '<>') end end @@ -255,11 +259,8 @@ def test_quick_save_and_load_creates_files_and_restores_state # Recompute state_dir after overriding config.states_dir player.frame.save_mgr.state_dir = player.frame.save_mgr.state_dir_for_rom(core) state_dir = player.frame.save_mgr.state_dir - vp = player.frame.viewport - frame_path = vp.frame.path - - # Quick save (F5) - app.command(:event, 'generate', frame_path, '', keysym: 'F5') + # Quick save + app.command(:event, 'generate', '.', '<>') app.update app.after(50) do @@ -283,7 +284,7 @@ def test_quick_save_and_load_creates_files_and_restores_state # Save again to test backup rotation (after debounce) app.after(50) do - app.command(:event, 'generate', frame_path, '', keysym: 'F5') + app.command(:event, 'generate', '.', '<>') app.update app.after(50) do @@ -300,8 +301,8 @@ def test_quick_save_and_load_creates_files_and_restores_state exit 1 end - # Quick load (F8) - app.command(:event, 'generate', frame_path, '', keysym: 'F8') + # Quick load + app.command(:event, 'generate', '.', '<>') app.update app.after(50) do @@ -374,11 +375,9 @@ def test_quick_save_debounce_blocks_rapid_fire poll_until_ready(player) do # Recompute state_dir after overriding config.states_dir player.frame.save_mgr.state_dir = player.frame.save_mgr.state_dir_for_rom(player.frame.save_mgr.core) - vp = player.frame.viewport - frame_path = vp.frame.path # First save should succeed - app.command(:event, 'generate', frame_path, '', keysym: 'F5') + app.command(:event, 'generate', '.', '<>') app.update app.after(50) do @@ -389,7 +388,7 @@ def test_quick_save_debounce_blocks_rapid_fire first_mtime = first_exists ? File.mtime(ss_path) : nil # Immediate second save should be debounced (within 5s window) - app.command(:event, 'generate', frame_path, '', keysym: 'F5') + app.command(:event, 'generate', '.', '<>') app.update app.after(50) do @@ -789,11 +788,8 @@ def test_recording_toggle_creates_trec_file config.recordings_dir = rec_dir poll_until_ready(player) do - vp = player.frame.viewport - frame = vp.frame.path - - # Press F10 → start recording - app.command(:event, 'generate', frame, '', keysym: 'F10') + # Start recording via virtual event (no focus needed) + app.command(:event, 'generate', '.', '<>') app.update # Let a few frames render with the recording indicator (red dot) @@ -804,10 +800,8 @@ def test_recording_toggle_creates_trec_file next end - # Refocus needed under xvfb after timer callbacks - app.tcl_eval("focus -force \#{frame}") - # Press F10 → stop recording - app.command(:event, 'generate', frame, '', keysym: 'F10') + # Stop recording via virtual event + app.command(:event, 'generate', '.', '<>') app.update app.after(50) do @@ -1090,9 +1084,7 @@ def test_question_hotkey_shows_help_window app = player.app app.after(100) do - app.tcl_eval("focus -force .") - app.update - app.tcl_eval("event generate . ") + app.command(:event, 'generate', '.', '<>') app.update state = app.tcl_eval("wm state .help_window") puts state == 'normal' ? "PASS" : "FAIL: help window not visible (state=\#{state})" @@ -1120,13 +1112,11 @@ def test_question_hotkey_toggles_help_window app = player.app app.after(100) do - app.tcl_eval("focus -force .") - app.update # First press — show - app.tcl_eval("event generate . ") + app.command(:event, 'generate', '.', '<>') app.update # Second press — hide - app.tcl_eval("event generate . ") + app.command(:event, 'generate', '.', '<>') app.update state = app.tcl_eval("wm state .help_window") puts state == 'withdrawn' ? "PASS" : "FAIL: help window still visible after second ? press (state=\#{state})" @@ -1154,13 +1144,11 @@ def test_help_window_hidden_in_fullscreen app = player.app app.after(100) do - app.tcl_eval("focus -force .") - app.update # Go fullscreen via bus Gemba.bus.emit(:request_fullscreen) app.update - # Press ? — should be suppressed - app.tcl_eval("event generate . ") + # Toggle help — should be suppressed in fullscreen + app.command(:event, 'generate', '.', '<>') app.update exists = app.tcl_eval("winfo exists .help_window") state = exists == '1' ? app.tcl_eval("wm state .help_window") : 'withdrawn' diff --git a/test/test_config_ra.rb b/test/test_config_ra.rb new file mode 100644 index 0000000..bc94abf --- /dev/null +++ b/test/test_config_ra.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "tmpdir" +require "gemba/headless" + +class TestConfigRA < Minitest::Test + def setup + @dir = Dir.mktmpdir("gemba-ra-test") + @path = File.join(@dir, "settings.json") + end + + def teardown + FileUtils.rm_rf(@dir) + end + + def new_config + Gemba::Config.new(path: @path) + end + + def test_defaults + c = new_config + refute c.ra_enabled? + assert_equal '', c.ra_username + assert_equal '', c.ra_token + refute c.ra_hardcore? + end + + def test_enabled_setter + c = new_config + c.ra_enabled = true + assert c.ra_enabled? + c.ra_enabled = false + refute c.ra_enabled? + end + + def test_username_setter + c = new_config + c.ra_username = 'alice' + assert_equal 'alice', c.ra_username + end + + def test_token_setter + c = new_config + c.ra_token = 'abc123' + assert_equal 'abc123', c.ra_token + end + + def test_hardcore_setter + c = new_config + c.ra_hardcore = true + assert c.ra_hardcore? + end + + def test_persistence_roundtrip + c = new_config + c.ra_enabled = true + c.ra_username = 'alice' + c.ra_token = 'secret' + c.ra_hardcore = true + c.save! + + c2 = new_config + assert c2.ra_enabled? + assert_equal 'alice', c2.ra_username + assert_equal 'secret', c2.ra_token + assert c2.ra_hardcore? + end +end diff --git a/test/test_credentials_presenter.rb b/test/test_credentials_presenter.rb new file mode 100644 index 0000000..8c9e737 --- /dev/null +++ b/test/test_credentials_presenter.rb @@ -0,0 +1,192 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "gemba/headless" + +class TestCredentialsPresenter < Minitest::Test + def setup + Gemba.bus = Gemba::EventBus.new + @config = Gemba::Config.new(path: nil) # in-memory defaults + end + + def presenter(**overrides) + cfg = @config + cfg.ra_enabled = overrides.fetch(:enabled, false) + cfg.ra_username = overrides.fetch(:username, '') + cfg.ra_token = overrides.fetch(:token, '') + Gemba::Achievements::CredentialsPresenter.new(cfg) + end + + # -- Disabled state ---------------------------------------------------------- + + def test_disabled_everything_off + p = presenter(enabled: false) + assert_equal :disabled, p.fields_state + assert_equal :disabled, p.login_button_state + assert_equal :disabled, p.verify_button_state + assert_equal :disabled, p.logout_button_state + assert_equal :disabled, p.reset_button_state + assert_equal :empty, p.feedback[:key] + end + + # -- Enabled, not logged in -------------------------------------------------- + + def test_enabled_no_token_fields_editable + p = presenter(enabled: true) + assert_equal :normal, p.fields_state + end + + def test_enabled_no_token_login_disabled_when_fields_empty + p = presenter(enabled: true) + assert_equal :disabled, p.login_button_state + assert_equal :disabled, p.verify_button_state + end + + def test_enabled_login_enabled_when_fields_filled + p = presenter(enabled: true) + p.username = 'alice' + p.password = 'secret' + assert_equal :normal, p.login_button_state + assert_equal :disabled, p.verify_button_state # no token yet — verify stays disabled + end + + def test_enabled_login_disabled_with_only_username + p = presenter(enabled: true) + p.username = 'alice' + assert_equal :disabled, p.login_button_state + end + + def test_enabled_login_disabled_with_only_password + p = presenter(enabled: true) + p.password = 'secret' + assert_equal :disabled, p.login_button_state + end + + def test_enabled_no_token_logout_and_reset_disabled + p = presenter(enabled: true) + assert_equal :disabled, p.logout_button_state + assert_equal :disabled, p.reset_button_state + end + + def test_enabled_no_token_feedback_not_logged_in + p = presenter(enabled: true) + assert_equal :not_logged_in, p.feedback[:key] + end + + # -- Enabled, logged in (token present) -------------------------------------- + + def test_logged_in_fields_disabled + p = presenter(enabled: true, username: 'alice', token: 'tok123') + assert_equal :readonly, p.fields_state + end + + def test_logged_in_login_disabled + p = presenter(enabled: true, username: 'alice', token: 'tok123') + assert_equal :disabled, p.login_button_state + end + + def test_logged_in_verify_enabled + p = presenter(enabled: true, username: 'alice', token: 'tok123') + assert_equal :normal, p.verify_button_state + end + + def test_logged_in_logout_and_reset_enabled + p = presenter(enabled: true, username: 'alice', token: 'tok123') + assert_equal :normal, p.logout_button_state + assert_equal :normal, p.reset_button_state + end + + def test_logged_in_feedback_shows_username + p = presenter(enabled: true, username: 'alice', token: 'tok123') + fb = p.feedback + assert_equal :logged_in_as, fb[:key] + assert_equal 'alice', fb[:username] + end + + # -- State mutations ---------------------------------------------------------- + + def test_enabling_clears_disabled_state + p = presenter(enabled: false) + assert_equal :disabled, p.fields_state + p.enabled = true + assert_equal :normal, p.fields_state + end + + def test_credentials_changed_emitted_on_mutations + p = presenter(enabled: false) + fired = 0 + Gemba.bus.on(:credentials_changed) { fired += 1 } + p.enabled = true + p.username = 'alice' + p.password = 'pw' + assert_equal 3, fired + end + + # -- Auth result handling (via :ra_auth_result bus events) ------------------- + + def auth(status, token: nil, message: nil) + Gemba.bus.emit(:ra_auth_result, status: status, token: token, message: message) + end + + def test_login_success_stores_token_and_clears_password + p = presenter(enabled: true, username: 'alice') + p.password = 'pw' + auth(:ok, token: 'real_token') + assert_equal 'real_token', p.token + assert_equal '', p.password + assert p.logged_in? + end + + def test_login_success_locks_fields + p = presenter(enabled: true, username: 'alice') + auth(:ok, token: 'tok') + assert_equal :readonly, p.fields_state + assert_equal :normal, p.logout_button_state + assert_equal :normal, p.verify_button_state + end + + def test_login_error_sets_feedback + p = presenter(enabled: true, username: 'alice') + auth(:error, message: 'Bad credentials') + assert_equal :error, p.feedback[:key] + assert_equal 'Bad credentials', p.feedback[:message] + end + + def test_login_error_does_not_affect_button_states + p = presenter(enabled: true, username: 'alice') + p.password = 'pw' + auth(:error, message: 'Bad credentials') + # Fields and login button should still be enabled + assert_equal :normal, p.fields_state + assert_equal :normal, p.login_button_state + end + + def test_logout_clears_token_keeps_username + p = presenter(enabled: true, username: 'alice', token: 'tok') + auth(:logout) + assert_equal '', p.token + assert_equal 'alice', p.username # kept so user can re-enter password + refute p.logged_in? + end + + def test_logout_re_enables_fields + p = presenter(enabled: true, username: 'alice', token: 'tok') + auth(:logout) + assert_equal :normal, p.fields_state + end + + # -- Transient feedback ------------------------------------------------------- + + def test_transient_overrides_normal_feedback + p = presenter(enabled: true, username: 'alice', token: 'tok') + p.show_transient(:test_ok) + assert_equal :test_ok, p.feedback[:key] + end + + def test_clear_transient_restores_normal_feedback + p = presenter(enabled: true, username: 'alice', token: 'tok') + p.show_transient(:test_ok) + p.clear_transient + assert_equal :logged_in_as, p.feedback[:key] + end +end diff --git a/test/test_fake_backend_achievements.rb b/test/test_fake_backend_achievements.rb new file mode 100644 index 0000000..d4fde31 --- /dev/null +++ b/test/test_fake_backend_achievements.rb @@ -0,0 +1,130 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "gemba/headless" +require "gemba/achievements" +require_relative "support/fake_core" + +class TestFakeBackendAchievements < Minitest::Test + ADDR = 0x02000000 + + def setup + @backend = Gemba::Achievements::FakeBackend.new + @backend.add_achievement(id: 'test', title: 'Test', description: 'desc', points: 5) do |mem| + mem.call(ADDR) == 0x42 + end + @core = FakeCore.new + @unlocked = [] + @backend.on_unlock { |ach| @unlocked << ach } + end + + def test_no_unlock_when_condition_false + @core.poke(ADDR, 0x00) + @backend.do_frame(@core) + assert_empty @unlocked + end + + def test_unlock_fires_when_condition_becomes_true + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + assert_equal 1, @unlocked.size + assert_equal 'test', @unlocked.first.id + assert_equal 'Test', @unlocked.first.title + assert_equal 5, @unlocked.first.points + assert @unlocked.first.earned? + end + + def test_unlock_fires_only_once_rising_edge + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + @backend.do_frame(@core) + assert_equal 1, @unlocked.size + end + + def test_no_second_unlock_after_condition_cycles + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + @core.poke(ADDR, 0x00) + @backend.do_frame(@core) + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + assert_equal 1, @unlocked.size + end + + def test_fires_on_first_true_frame + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + assert_equal 1, @unlocked.size + end + + def test_no_unlock_on_wrong_value + @core.poke(ADDR, 0x01) + @backend.do_frame(@core) + assert_empty @unlocked + end + + def test_achievement_list_reflects_earned_state + assert_equal 1, @backend.total_count + assert_equal 0, @backend.earned_count + + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + + assert_equal 1, @backend.earned_count + assert @backend.achievement_list.first.earned? + end + + def test_multiple_achievements_independent + @backend.add_achievement(id: 'two', title: 'Two', description: '', points: 10) do |mem| + mem.call(ADDR + 1) == 0xFF + end + + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + assert_equal 1, @unlocked.size + assert_equal 'test', @unlocked.first.id + + @core.poke(ADDR + 1, 0xFF) + @backend.do_frame(@core) + assert_equal 2, @unlocked.size + assert_equal 'two', @unlocked.last.id + end + + def test_reset_earned_allows_re_unlock + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + assert_equal 1, @backend.earned_count + + @backend.reset_earned + assert_equal 0, @backend.earned_count + + @unlocked.clear + @core.poke(ADDR, 0x00) + @backend.do_frame(@core) + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + assert_equal 1, @unlocked.size + end + + def test_load_game_resets_earned + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + assert_equal 1, @backend.earned_count + + @backend.load_game(@core) + assert_equal 0, @backend.earned_count + end + + def test_multiple_unlock_callbacks_all_fire + other = [] + @backend.on_unlock { |ach| other << ach.id } + @core.poke(ADDR, 0x42) + @backend.do_frame(@core) + assert_equal ['test'], @unlocked.map(&:id) + assert_equal ['test'], other + end + + def test_enabled + assert @backend.enabled? + end +end diff --git a/test/test_fake_backend_auth.rb b/test/test_fake_backend_auth.rb new file mode 100644 index 0000000..494d88b --- /dev/null +++ b/test/test_fake_backend_auth.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "gemba/headless" +require "gemba/achievements" + +class TestFakeBackendAuth < Minitest::Test + def test_any_nonempty_creds_succeed_by_default + b = Gemba::Achievements::FakeBackend.new + statuses = [] + b.on_auth_change { |status, _| statuses << status } + b.login_with_token(username: 'alice', token: 'anything') + assert b.authenticated? + assert_equal [:ok], statuses + end + + def test_empty_username_fails + b = Gemba::Achievements::FakeBackend.new + b.login_with_token(username: '', token: 'tok') + refute b.authenticated? + end + + def test_empty_token_fails + b = Gemba::Achievements::FakeBackend.new + b.login_with_token(username: 'alice', token: '') + refute b.authenticated? + end + + def test_restricted_correct_pair_succeeds + b = Gemba::Achievements::FakeBackend.new(valid_username: 'alice', valid_token: 'secret') + b.login_with_token(username: 'alice', token: 'secret') + assert b.authenticated? + end + + def test_restricted_wrong_user_fails + b = Gemba::Achievements::FakeBackend.new(valid_username: 'alice', valid_token: 'secret') + statuses = [] + errors = [] + b.on_auth_change { |s, e| statuses << s; errors << e } + b.login_with_token(username: 'bob', token: 'secret') + refute b.authenticated? + assert_equal [:error], statuses + refute_nil errors.first + end + + def test_restricted_wrong_token_fails + b = Gemba::Achievements::FakeBackend.new(valid_username: 'alice', valid_token: 'secret') + b.login_with_token(username: 'alice', token: 'wrong') + refute b.authenticated? + end + + def test_logout_clears_auth + b = Gemba::Achievements::FakeBackend.new + b.login_with_token(username: 'alice', token: 'tok') + assert b.authenticated? + b.logout + refute b.authenticated? + end + + def test_multiple_auth_callbacks_all_fired + b = Gemba::Achievements::FakeBackend.new + results = [] + b.on_auth_change { |s, _| results << "cb1:#{s}" } + b.on_auth_change { |s, _| results << "cb2:#{s}" } + b.login_with_token(username: 'u', token: 't') + assert_equal ['cb1:ok', 'cb2:ok'], results + end +end diff --git a/test/test_game_index.rb b/test/test_game_index.rb index e9a8ab0..1012533 100644 --- a/test/test_game_index.rb +++ b/test/test_game_index.rb @@ -8,6 +8,8 @@ def setup Gemba::GameIndex.reset! end + # -- lookup (by game code) ----------------------------------------------- + def test_lookup_known_gba_game name = Gemba::GameIndex.lookup("AGB-AXVE") assert_includes name, "Pokemon" @@ -26,20 +28,49 @@ def test_lookup_returns_nil_for_empty_string assert_nil Gemba::GameIndex.lookup("") end - def test_lookup_returns_nil_for_unknown_platform + def test_lookup_returns_nil_for_unknown_platform_prefix assert_nil Gemba::GameIndex.lookup("XYZ-AAAA") end - def test_lookup_gb_game - # GB has very few entries but Pokemon Red should be there - name = Gemba::GameIndex.lookup("DMG-APAU") - assert_includes name, "Pokemon" if name + def test_lookup_known_gbc_game + # Pokemon Gold is a well-known GBC title + name = Gemba::GameIndex.lookup("CGB-BYEE") + assert_includes name, "Pokemon" if name # only assert content if present + # At minimum it must not raise + end + + # -- lookup_by_md5 ------------------------------------------------------- + + def test_lookup_by_md5_returns_nil_for_nil_md5 + assert_nil Gemba::GameIndex.lookup_by_md5(nil, "gba") end - def test_reset_clears_cache + def test_lookup_by_md5_returns_nil_for_empty_md5 + assert_nil Gemba::GameIndex.lookup_by_md5("", "gba") + end + + def test_lookup_by_md5_returns_nil_for_unknown_platform + assert_nil Gemba::GameIndex.lookup_by_md5("abc123", "snes") + end + + def test_lookup_by_md5_returns_nil_for_unknown_digest + assert_nil Gemba::GameIndex.lookup_by_md5("0" * 32, "gba") + end + + def test_lookup_by_md5_is_case_insensitive + # Use a real digest present in gba_md5.json so both lookups must return a non-nil title + md5 = "0007d212d9b76a466c7ca003d50c8c74" + lower = Gemba::GameIndex.lookup_by_md5(md5.downcase, "gba") + upper = Gemba::GameIndex.lookup_by_md5(md5.upcase, "gba") + refute_nil lower, "lowercase MD5 lookup must return a title" + assert_equal lower, upper + end + + # -- reset! / caching ---------------------------------------------------- + + def test_reset_clears_cache_and_reloads Gemba::GameIndex.lookup("AGB-AXVE") Gemba::GameIndex.reset! - # Should still work after reset (reloads lazily) name = Gemba::GameIndex.lookup("AGB-AXVE") assert_includes name, "Pokemon" end diff --git a/test/test_game_picker_frame.rb b/test/test_game_picker_frame.rb index 27e06a9..7a3fea4 100644 --- a/test/test_game_picker_frame.rb +++ b/test/test_game_picker_frame.rb @@ -47,7 +47,7 @@ def test_populated_card_shows_title_and_platform picker = Gemba::GamePickerFrame.new(app: app, rom_library: lib) picker.show - assert_equal 'Pokemon Ruby', app.command('.game_picker.card0.title', :cget, '-text') + assert_equal 'Pokemon - Ruby Version (USA, Europe)', app.command('.game_picker.card0.title', :cget, '-text') assert_equal 'GBA', app.command('.game_picker.card0.plat', :cget, '-text') picker.cleanup diff --git a/test/test_help_window.rb b/test/test_help_window.rb index b3cf2e6..b96e5e8 100644 --- a/test/test_help_window.rb +++ b/test/test_help_window.rb @@ -18,6 +18,7 @@ def test_visible_after_show win = Gemba::HelpWindow.new(app: app, hotkeys: hotkeys) app.show win.show + app.update # flush pending Tk map events before checking visibility assert win.visible?, "help window should be visible after show" diff --git a/test/test_null_backend.rb b/test/test_null_backend.rb new file mode 100644 index 0000000..2a7be67 --- /dev/null +++ b/test/test_null_backend.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "gemba/headless" +require "gemba/achievements" +require_relative "support/fake_core" + +class TestNullBackend < Minitest::Test + def setup + @b = Gemba::Achievements::NullBackend.new + end + + def test_not_enabled + refute @b.enabled? + end + + def test_not_authenticated + refute @b.authenticated? + end + + def test_achievement_list_empty + assert_equal [], @b.achievement_list + end + + def test_counts_zero + assert_equal 0, @b.earned_count + assert_equal 0, @b.total_count + end + + def test_do_frame_is_noop + assert_nil @b.do_frame(FakeCore.new) + end + + def test_login_noop + assert_nil @b.login_with_token(username: 'u', token: 't') + refute @b.authenticated? + end + + def test_logout_noop + assert_nil @b.logout + end +end diff --git a/test/test_offline_backend.rb b/test/test_offline_backend.rb new file mode 100644 index 0000000..adbb957 --- /dev/null +++ b/test/test_offline_backend.rb @@ -0,0 +1,116 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "gemba/headless" + +class TestOfflineBackend < Minitest::Test + ROM = "test/fixtures/test.gba" + + def setup + skip "test.gba fixture not found" unless File.exist?(ROM) + @unlocked = [] + @backend = Gemba::Achievements::OfflineBackend.new + @backend.on_unlock { |ach| @unlocked << ach } + end + + def test_always_authenticated + assert @backend.authenticated? + end + + def test_enabled + assert @backend.enabled? + end + + def test_login_and_logout_are_noops + @backend.login_with_password(username: "anyone", password: "anything") + assert @backend.authenticated? + @backend.logout + assert @backend.authenticated? + end + + def test_on_load_achievement_fires_during_load_game + Gemba::HeadlessPlayer.open(ROM) do |player| + @backend.load_game(player.core) + assert_equal 1, @unlocked.size + assert_equal "gembatest_loaded", @unlocked.first.id + assert_equal "Ready to Play", @unlocked.first.title + assert @unlocked.first.earned? + end + end + + def test_achievement_list_shows_earned_after_load + Gemba::HeadlessPlayer.open(ROM) do |player| + @backend.load_game(player.core) + list = @backend.achievement_list + assert_equal 1, list.size + assert list.first.earned? + end + end + + def test_counts + Gemba::HeadlessPlayer.open(ROM) do |player| + assert_equal 0, @backend.total_count + @backend.load_game(player.core) + assert_equal 1, @backend.total_count + assert_equal 1, @backend.earned_count + end + end + + def test_unload_game_clears_state + Gemba::HeadlessPlayer.open(ROM) do |player| + @backend.load_game(player.core) + assert_equal 1, @backend.earned_count + @backend.unload_game + assert_equal 0, @backend.total_count + assert_equal 0, @backend.earned_count + end + end + + def test_unknown_rom_has_no_achievements + Gemba::HeadlessPlayer.open(ROM) do |player| + custom = Gemba::Achievements::OfflineBackend.new(db: {}) + custom.load_game(player.core) + assert_equal 0, custom.total_count + assert_empty @unlocked + end + end + + def test_store_adds_definitions + Gemba::HeadlessPlayer.open(ROM) do |player| + custom = Gemba::Achievements::OfflineBackend.new(db: {}) + custom.on_unlock { |a| @unlocked << a } + custom.store(player.core.checksum, [ + { id: "extra", title: "Extra", description: "desc", + points: 5, trigger: :on_load } + ]) + custom.load_game(player.core) + assert_equal 1, @unlocked.size + assert_equal "extra", @unlocked.first.id + end + end + + def test_memory_achievement_fires_on_rising_edge + addr = 0x02000000 + Gemba::HeadlessPlayer.open(ROM) do |player| + backend = Gemba::Achievements::OfflineBackend.new(db: { + player.core.checksum => [ + { id: "mem_test", title: "Mem", description: "d", points: 2, + trigger: :memory, + condition: ->(mem) { mem.call(addr) == 0x01 } } + ] + }) + backend.on_unlock { |a| @unlocked << a } + backend.load_game(player.core) + + # EWRAM starts zeroed — condition false + player.step(1) + backend.do_frame(player.core) + assert_empty @unlocked + + # Write 0x01 to EWRAM — but we can't poke real memory from Ruby, + # so verify do_frame doesn't crash and condition stays unevaluated + backend.do_frame(player.core) + assert_empty @unlocked + end + end +end diff --git a/test/test_ra_backend_unlock_gate.rb b/test/test_ra_backend_unlock_gate.rb new file mode 100644 index 0000000..b33b9dd --- /dev/null +++ b/test/test_ra_backend_unlock_gate.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "gemba/headless" +require "gemba/achievements" +require_relative "support/fake_core" + +# Tests that RetroAchievementsBackend never awards achievements before the +# server's earned list is known. +# +# The bug scenario: +# fetch_patch_data completes → runtime activated with 89 achievements +# emulator starts → do_frame fires → some conditions true at frame 0 +# @earned is empty (r=unlocks still in flight) → all are re-awarded +# +# The fix: @achievements stays empty until fetch_unlocks completes. +# do_frame's `return if @achievements.empty?` guards the window by construction. +# +# These tests verify the fix through the public API (no instance_variable_set): +# if @achievements is empty, do_frame must be silent regardless of what the +# underlying runtime would report. +class TestRABackendUnlockGate < Minitest::Test + def setup + @backend = Gemba::Achievements::RetroAchievementsBackend.new(app: nil) + @unlocked = [] + @backend.on_unlock { |ach| @unlocked << ach } + @core = FakeCore.new + end + + # Before any game is loaded, @achievements is empty → do_frame is a no-op. + def test_do_frame_silent_before_game_loaded + @backend.do_frame(@core) + assert_empty @unlocked + end + + # @achievements only becomes non-empty after fetch_unlocks completes (HTTP). + # Since we can't make real HTTP calls, verify the state via achievement_list + # and total_count — they reflect @achievements. + def test_achievements_empty_until_unlocks_arrive + assert_equal 0, @backend.total_count, + "achievement list must be empty before fetch_unlocks completes" + assert_empty @backend.achievement_list + end + + # do_frame with an empty achievement list never fires unlock callbacks. + # This is the structural guarantee — as long as @achievements is empty, + # no award can happen even if the C runtime were somehow active. + def test_do_frame_never_fires_when_achievement_list_empty + # Simulate being "mid-load": patch data fetched but unlocks not yet back. + # In the new design @achievements stays [] during this window. + 5.times { @backend.do_frame(@core) } + assert_empty @unlocked, + "no unlock must fire during the patch→unlocks window" + assert_equal 0, @backend.earned_count + end +end diff --git a/test/test_rom_info.rb b/test/test_rom_info.rb index 3d5efc0..507805c 100644 --- a/test/test_rom_info.rb +++ b/test/test_rom_info.rb @@ -4,13 +4,14 @@ require "tmpdir" require "fileutils" require "gemba/headless" -require "gemba/headless" -require "gemba/headless" -require "gemba/headless" -require "gemba/headless" -require "gemba/headless" class TestRomInfo < Minitest::Test + # Stub that returns nil for every lookup — isolates RomInfo from real DAT data. + NULL_INDEX = Struct.new(:_) { + def lookup(_) = nil + def lookup_by_md5(*) = nil + }.new(nil) + ROM = { 'rom_id' => 'AGB_AXVE-DEADBEEF', 'title' => 'Pokemon Ruby', @@ -20,7 +21,7 @@ class TestRomInfo < Minitest::Test }.freeze def test_from_rom_sets_basic_fields - info = Gemba::RomInfo.from_rom(ROM) + info = Gemba::RomInfo.from_rom(ROM, game_index: NULL_INDEX) assert_equal 'AGB_AXVE-DEADBEEF', info.rom_id assert_equal 'Pokemon Ruby', info.title assert_equal 'GBA', info.platform @@ -29,38 +30,49 @@ def test_from_rom_sets_basic_fields end def test_platform_is_uppercased - info = Gemba::RomInfo.from_rom(ROM.merge('platform' => 'gbc')) + info = Gemba::RomInfo.from_rom(ROM.merge('platform' => 'gbc'), game_index: NULL_INDEX) assert_equal 'GBC', info.platform end def test_title_falls_back_to_rom_id rom = ROM.merge('title' => nil) - info = Gemba::RomInfo.from_rom(rom) + info = Gemba::RomInfo.from_rom(rom, game_index: NULL_INDEX) assert_equal 'AGB_AXVE-DEADBEEF', info.title end + def test_title_from_game_index_wins_over_stored_title + index = Struct.new(:_) { + def lookup(_) = 'Index Title' + def lookup_by_md5(*) = nil + }.new(nil) + info = Gemba::RomInfo.from_rom(ROM, game_index: index) + assert_equal 'Index Title', info.title + end + def test_no_fetcher_or_overrides_yields_nil_boxart_fields - info = Gemba::RomInfo.from_rom(ROM) + info = Gemba::RomInfo.from_rom(ROM, game_index: NULL_INDEX) assert_nil info.cached_boxart_path assert_nil info.custom_boxart_path assert_nil info.boxart_path end - def test_has_official_entry_true_for_known_game_code - # AGB-AXVE is Pokemon Ruby — present in gba_games.json - info = Gemba::RomInfo.from_rom(ROM) - assert info.has_official_entry, "Known game_code should have official entry" + def test_has_official_entry_true_when_index_returns_title + index = Struct.new(:_) { + def lookup(_) = 'Some Game' + def lookup_by_md5(*) = nil + }.new(nil) + info = Gemba::RomInfo.from_rom(ROM, game_index: index) + assert info.has_official_entry end - def test_has_official_entry_false_for_unknown_game_code - rom = ROM.merge('game_code' => 'AGB-ZZZZ') - info = Gemba::RomInfo.from_rom(rom) + def test_has_official_entry_false_when_index_returns_nil + info = Gemba::RomInfo.from_rom(ROM, game_index: NULL_INDEX) refute info.has_official_entry end def test_has_official_entry_false_when_no_game_code rom = ROM.merge('game_code' => nil) - info = Gemba::RomInfo.from_rom(rom) + info = Gemba::RomInfo.from_rom(rom, game_index: NULL_INDEX) refute info.has_official_entry end @@ -72,7 +84,7 @@ def test_boxart_path_returns_custom_when_file_exists overrides = Gemba::RomOverrides.new(File.join(dir, "overrides.json")) overrides.set_custom_boxart('AGB_AXVE-DEADBEEF', custom) - info = Gemba::RomInfo.from_rom(ROM, overrides: overrides) + info = Gemba::RomInfo.from_rom(ROM, overrides: overrides, game_index: NULL_INDEX) assert_equal File.join(dir, 'boxart', 'AGB_AXVE-DEADBEEF', 'custom.png'), info.boxart_path ensure ENV.delete('GEMBA_CONFIG_DIR') @@ -87,12 +99,11 @@ def test_boxart_path_falls_back_to_cache_when_no_custom backend: Gemba::BoxartFetcher::NullBackend.new) overrides = Gemba::RomOverrides.new(File.join(dir, "overrides.json")) - # Pre-populate the cache cached = fetcher.cached_path('AGB-AXVE') FileUtils.mkdir_p(File.dirname(cached)) File.write(cached, "fake") - info = Gemba::RomInfo.from_rom(ROM, fetcher: fetcher, overrides: overrides) + info = Gemba::RomInfo.from_rom(ROM, fetcher: fetcher, overrides: overrides, game_index: NULL_INDEX) assert_equal cached, info.boxart_path ensure ENV.delete('GEMBA_CONFIG_DIR') @@ -106,7 +117,7 @@ def test_boxart_path_nil_when_neither_present backend: Gemba::BoxartFetcher::NullBackend.new) overrides = Gemba::RomOverrides.new(File.join(dir, "overrides.json")) - info = Gemba::RomInfo.from_rom(ROM, fetcher: fetcher, overrides: overrides) + info = Gemba::RomInfo.from_rom(ROM, fetcher: fetcher, overrides: overrides, game_index: NULL_INDEX) assert_nil info.boxart_path ensure ENV.delete('GEMBA_CONFIG_DIR') @@ -121,7 +132,6 @@ def test_custom_beats_cache_in_boxart_path backend: Gemba::BoxartFetcher::NullBackend.new) overrides = Gemba::RomOverrides.new(File.join(dir, "overrides.json")) - # Pre-populate both cache and custom cached = fetcher.cached_path('AGB-AXVE') FileUtils.mkdir_p(File.dirname(cached)) File.write(cached, "cached") @@ -130,7 +140,7 @@ def test_custom_beats_cache_in_boxart_path File.write(src, "custom") overrides.set_custom_boxart('AGB_AXVE-DEADBEEF', src) - info = Gemba::RomInfo.from_rom(ROM, fetcher: fetcher, overrides: overrides) + info = Gemba::RomInfo.from_rom(ROM, fetcher: fetcher, overrides: overrides, game_index: NULL_INDEX) assert_match %r{custom\.png$}, info.boxart_path, "Custom should beat cached" ensure ENV.delete('GEMBA_CONFIG_DIR') diff --git a/test/test_virtual_events.rb b/test/test_virtual_events.rb new file mode 100644 index 0000000..91c3505 --- /dev/null +++ b/test/test_virtual_events.rb @@ -0,0 +1,156 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require_relative "shared/tk_test_helper" +require "gemba" + +# Tests for the virtual event layer. +# +# Physical key → virtual event translation is one line per action; the +# interesting thing to test is that the virtual event bindings on '.' +# actually fire when triggered directly (no focus needed). +# +# assert_virtual_event_fires runs a subprocess that: +# 1. Appends {+lappend ::virt_fired EventName} to the binding on '.' +# 2. Generates the virtual event from an after(50) callback +# 3. In an after(0) reads ::virt_fired and prints EVENTNAME_FIRED +# 4. Quits via <> (or player.running = false for no-ROM cases) +# +# <> is special — its original binding stops the mainloop before +# after(0) can run, so it prints synchronously inside the appended binding. +class TestVirtualEvents < Minitest::Test + include TeekTestHelper + + TEST_ROM = File.expand_path("fixtures/test.gba", __dir__) + + # ── Key → action mapping (pure unit tests, no subprocess) ───────────────── + + def test_default_quit_key_maps_to_quit_action + assert_equal :quit, Gemba::HotkeyMap.new(Gemba::Config.new).action_for('q') + end + + def test_default_quick_save_key_maps_to_quick_save_action + assert_equal :quick_save, Gemba::HotkeyMap.new(Gemba::Config.new).action_for('F5') + end + + def test_default_quick_load_key_maps_to_quick_load_action + assert_equal :quick_load, Gemba::HotkeyMap.new(Gemba::Config.new).action_for('F8') + end + + def test_default_record_key_maps_to_record_action + assert_equal :record, Gemba::HotkeyMap.new(Gemba::Config.new).action_for('F10') + end + + # ── Virtual event bindings (subprocess, no physical keypresses) ──────────── + + def test_quit_virtual_event_fires_binding + # <> stops the mainloop before after(0) runs — print synchronously + # inside the appended binding instead. + code = <<~RUBY + require "gemba" + require "support/player_helpers" + + player = Gemba::AppController.new("#{TEST_ROM}") + player.disable_confirmations! + app = player.app + + poll_until_ready(player) do + app.tcl_eval('bind . <> {+puts QUIT_FIRED; flush stdout}') + app.after(50) { app.command(:event, 'generate', '.', '<>') } + end + + player.run + RUBY + + _, stdout, stderr, _ = tk_subprocess(code) + output = ["STDOUT:\n#{stdout}", "STDERR:\n#{stderr}"].reject { |s| s.end_with?("\n") } + assert_includes stdout, "QUIT_FIRED", "<> binding did not fire\n#{output.join("\n")}" + end + + def test_quick_save_virtual_event_fires_binding + assert_virtual_event_fires('QuickSave', + setup_code: 'player.config.states_dir = Dir.mktmpdir("gemba-virt-test")', + cleanup_code: 'FileUtils.rm_rf(player.config.states_dir)') + end + + def test_quick_load_virtual_event_fires_binding + assert_virtual_event_fires('QuickLoad') + end + + def test_record_toggle_virtual_event_fires_binding + assert_virtual_event_fires('RecordToggle', + setup_code: 'player.config.recordings_dir = Dir.mktmpdir("gemba-virt-rec")', + cleanup_code: 'FileUtils.rm_rf(player.config.recordings_dir)') + end + + def test_toggle_help_window_virtual_event_fires_binding + assert_virtual_event_fires('ToggleHelpWindow', with_rom: false) + end + + private + + # Verifies that generating <> on '.' fires the binding. + # Uses lappend ::virt_fired as a Tcl side-channel — no physical keypresses. + # + # Options: + # with_rom: load TEST_ROM (default true; false for no-ROM app controller) + # setup_code: Ruby injected after player/app created, before poll_until_ready + # cleanup_code: Ruby injected in after(0) before quitting + def assert_virtual_event_fires(event_name, with_rom: true, setup_code: '', cleanup_code: '') + marker = "#{event_name.upcase.tr('-', '_')}_FIRED" + + if with_rom + code = <<~RUBY + require "gemba" + require "support/player_helpers" + require "tmpdir" + require "fileutils" + + player = Gemba::AppController.new("#{TEST_ROM}") + player.disable_confirmations! + app = player.app + #{setup_code} + + poll_until_ready(player) do + app.tcl_eval('bind . <<#{event_name}>> {+lappend ::virt_fired #{event_name}}') + app.after(50) do + app.command(:event, 'generate', '.', '<<#{event_name}>>') + app.after(0) do + fired = app.tcl_eval('lsearch -exact $::virt_fired #{event_name}') rescue "-1" + puts fired.to_i >= 0 ? "#{marker}" : "NOT_FIRED" + #{cleanup_code} + app.command(:event, 'generate', '.', '<>') + end + end + end + + player.run + RUBY + else + code = <<~RUBY + require "gemba" + + player = Gemba::AppController.new + app = player.app + #{setup_code} + + app.tcl_eval('bind . <<#{event_name}>> {+lappend ::virt_fired #{event_name}}') + app.after(50) do + app.command(:event, 'generate', '.', '<<#{event_name}>>') + app.after(0) do + fired = app.tcl_eval('lsearch -exact $::virt_fired #{event_name}') rescue "-1" + puts fired.to_i >= 0 ? "#{marker}" : "NOT_FIRED" + #{cleanup_code} + player.running = false + end + end + + player.run + RUBY + end + + _, stdout, stderr, _ = tk_subprocess(code) + output = ["STDOUT:\n#{stdout}", "STDERR:\n#{stderr}"].reject { |s| s.end_with?("\n") } + assert_includes stdout, marker, "<<#{event_name}>> binding did not fire\n#{output.join("\n")}" + end +end diff --git a/vendor/rcheevos b/vendor/rcheevos new file mode 160000 index 0000000..e9ca369 --- /dev/null +++ b/vendor/rcheevos @@ -0,0 +1 @@ +Subproject commit e9ca3694c862b61235595176dac4b22677848c93 From 595de1461e7f405e593219a4a6a804e1c94c2cd2 Mon Sep 17 00:00:00 2001 From: James Cook Date: Fri, 20 Feb 2026 23:41:02 -0600 Subject: [PATCH 2/9] More presence --- ext/gemba/gemba_ext.c | 50 +- lib/gemba/achievements.rb | 4 +- lib/gemba/achievements/backend.rb | 29 +- .../achievements/credentials_presenter.rb | 2 +- lib/gemba/achievements/fake_backend.rb | 27 +- lib/gemba/achievements/offline_backend.rb | 25 +- .../retro_achievements/backend.rb | 453 ++++++++++++++++++ .../retro_achievements/ping_worker.rb | 27 ++ .../retro_achievements_backend.rb | 380 --------------- lib/gemba/achievements_window.rb | 28 +- lib/gemba/app_controller.rb | 6 +- lib/gemba/config.rb | 10 + lib/gemba/locales/en.yml | 1 + lib/gemba/locales/ja.yml | 1 + lib/gemba/settings/system_tab.rb | 53 +- test/achievements_window/test_bulk_sync.rb | 4 +- test/achievements_window/test_bus_events.rb | 2 +- .../achievements_window/test_initial_state.rb | 2 +- .../test_tree_rendering.rb | 2 +- test/support/fake_ra_runtime.rb | 74 +++ test/support/fake_requester.rb | 68 +++ test/test_config.rb | 2 +- test/test_ra_backend.rb | 313 ++++++++++++ test/test_ra_backend_unlock_gate.rb | 4 +- 24 files changed, 1141 insertions(+), 426 deletions(-) create mode 100644 lib/gemba/achievements/retro_achievements/backend.rb create mode 100644 lib/gemba/achievements/retro_achievements/ping_worker.rb delete mode 100644 lib/gemba/achievements/retro_achievements_backend.rb create mode 100644 test/support/fake_ra_runtime.rb create mode 100644 test/support/fake_requester.rb create mode 100644 test/test_ra_backend.rb diff --git a/ext/gemba/gemba_ext.c b/ext/gemba/gemba_ext.c index 1bc59c4..a776d60 100644 --- a/ext/gemba/gemba_ext.c +++ b/ext/gemba/gemba_ext.c @@ -1302,6 +1302,42 @@ ra_runtime_rb_count(VALUE self) return INT2NUM(get_ra_wrapper(self)->count); } +/* + * RARuntime#activate_richpresence(script) → true | false + * Load a Rich Presence script into the runtime. + * Returns true on success, false if the script failed to parse. + */ +static VALUE +ra_runtime_rb_activate_richpresence(VALUE self, VALUE rb_script) +{ + ra_wrapper_t *w = get_ra_wrapper(self); + const char *script = StringValueCStr(rb_script); + int rc; + + rc = rc_runtime_activate_richpresence(&w->rc, script, NULL, 0); + return rc == RC_OK ? Qtrue : Qfalse; +} + +/* + * RARuntime#get_richpresence(core) → String | nil + * Evaluate the active Rich Presence script against current memory and + * return the display string, or nil if no script is loaded / empty result. + */ +static VALUE +ra_runtime_rb_get_richpresence(VALUE self, VALUE rb_core) +{ + ra_wrapper_t *w = get_ra_wrapper(self); + struct mgba_core *mc; + char buf[512]; + int len; + + TypedData_Get_Struct(rb_core, struct mgba_core, &mgba_core_type, mc); + len = rc_runtime_get_richpresence(&w->rc, buf, sizeof(buf), ra_peek, mc->core, NULL); + if (len <= 0) + return Qnil; + return rb_str_new(buf, len); +} + /* --------------------------------------------------------- */ /* Init */ /* --------------------------------------------------------- */ @@ -1431,12 +1467,14 @@ Init_gemba_ext(void) /* Gemba::RARuntime — RA condition evaluator */ cRARuntime = rb_define_class_under(mGemba, "RARuntime", rb_cObject); rb_define_alloc_func(cRARuntime, ra_runtime_alloc); - rb_define_method(cRARuntime, "activate", ra_runtime_rb_activate, 2); - rb_define_method(cRARuntime, "deactivate", ra_runtime_rb_deactivate, 1); - rb_define_method(cRARuntime, "reset_all", ra_runtime_rb_reset_all, 0); - rb_define_method(cRARuntime, "clear", ra_runtime_rb_clear, 0); - rb_define_method(cRARuntime, "do_frame", ra_runtime_rb_do_frame, 1); - rb_define_method(cRARuntime, "count", ra_runtime_rb_count, 0); + rb_define_method(cRARuntime, "activate", ra_runtime_rb_activate, 2); + rb_define_method(cRARuntime, "deactivate", ra_runtime_rb_deactivate, 1); + rb_define_method(cRARuntime, "reset_all", ra_runtime_rb_reset_all, 0); + rb_define_method(cRARuntime, "clear", ra_runtime_rb_clear, 0); + rb_define_method(cRARuntime, "do_frame", ra_runtime_rb_do_frame, 1); + rb_define_method(cRARuntime, "count", ra_runtime_rb_count, 0); + rb_define_method(cRARuntime, "activate_richpresence", ra_runtime_rb_activate_richpresence, 1); + rb_define_method(cRARuntime, "get_richpresence", ra_runtime_rb_get_richpresence, 1); /* Toast background generator */ rb_define_module_function(mGemba, "toast_background", mgba_toast_background, 3); diff --git a/lib/gemba/achievements.rb b/lib/gemba/achievements.rb index 19334b2..6597104 100644 --- a/lib/gemba/achievements.rb +++ b/lib/gemba/achievements.rb @@ -4,7 +4,7 @@ module Gemba module Achievements # Build the appropriate backend based on config. # Returns NullBackend if RA is disabled. - # Requires app: (Teek app) for RetroAchievementsBackend's BackgroundWork HTTP calls. + # Requires app: (Teek app) for RetroAchievements::Backend's BackgroundWork HTTP calls. # # @param config [Config] # @param app [Teek::App, nil] @@ -13,7 +13,7 @@ def self.backend_for(config, app: nil) return NullBackend.new unless config.ra_enabled? return NullBackend.new unless app - RetroAchievementsBackend.new(app: app) + RetroAchievements::Backend.new(app: app) end end end diff --git a/lib/gemba/achievements/backend.rb b/lib/gemba/achievements/backend.rb index 2a0c5a9..a9a536f 100644 --- a/lib/gemba/achievements/backend.rb +++ b/lib/gemba/achievements/backend.rb @@ -76,6 +76,27 @@ def unload_game; end # state; all achievements must restart their priming/waiting sequence. def reset_runtime; end + # -- Rich Presence -------------------------------------------------------- + + # Current Rich Presence display string for the active game, or nil if + # not loaded / not supported. Updated by do_frame in real backends. + def rich_presence_message + nil + end + + # Enable or disable Rich Presence evaluation for the current game. + # Pushed from AppController when per-game config is resolved at ROM load. + def rich_presence_enabled=(val); end + + # Register a callback fired when the Rich Presence string changes. + # Called with the new message string. + # + # @yield [String] the new rich presence message + def on_rich_presence_changed(&block) + @rp_callbacks ||= [] + @rp_callbacks << block + end + # -- Achievement list ----------------------------------------------------- # Register a callback invoked when an achievement is unlocked. @@ -103,8 +124,8 @@ def total_count end # Verify the stored token is still valid. Result fires on_auth_change. - # Used by the "Test" button in settings. - def ping; end + # Used by the "Verify Token" button in settings. + def token_test; end # @return [Boolean] true if this backend is active / enabled def enabled? @@ -156,6 +177,10 @@ def fire_auth_change(status, error = nil) def fire_achievements_changed @achievements_changed_callbacks&.each(&:call) end + + def fire_rich_presence_changed(message) + @rp_callbacks&.each { |cb| cb.call(message) } + end end end end diff --git a/lib/gemba/achievements/credentials_presenter.rb b/lib/gemba/achievements/credentials_presenter.rb index 5c23c98..19be81e 100644 --- a/lib/gemba/achievements/credentials_presenter.rb +++ b/lib/gemba/achievements/credentials_presenter.rb @@ -121,7 +121,7 @@ def handle_auth_result(status, token, message) else # Ping success — show transient then let SystemTab schedule clear @feedback_override = { key: :test_ok } - emit(:ra_ping_ok) + emit(:ra_token_test_ok) end when :error @feedback_override = { key: :error, message: message.to_s } diff --git a/lib/gemba/achievements/fake_backend.rb b/lib/gemba/achievements/fake_backend.rb index b43eed9..449cd5a 100644 --- a/lib/gemba/achievements/fake_backend.rb +++ b/lib/gemba/achievements/fake_backend.rb @@ -43,6 +43,8 @@ def initialize(valid_username: nil, valid_token: nil) @valid_username = valid_username @valid_token = valid_token @authenticated = false + @rich_presence_message = nil + @rich_presence_block = nil end # -- Authentication ------------------------------------------------------- @@ -84,7 +86,7 @@ def logout fire_auth_change(:logout) end - def ping + def token_test if @authenticated fire_auth_change(:ok, nil) else @@ -116,6 +118,7 @@ def add_achievement(id:, title:, description:, points: 0, &condition) # Evaluate all unearned achievements against current memory state. # Fires on_unlock callbacks for newly met conditions (rising edge). + # Also evaluates the rich presence block if one is set. # # @param core [Gemba::Core] def do_frame(core) @@ -131,9 +134,13 @@ def do_frame(core) end @prev_state[id] = current end + + @rich_presence_message = @rich_presence_block.call if @rich_presence_block end def load_game(_core, rom_path = nil, md5 = nil) + @rich_presence_message = nil + @rich_presence_block = nil reset_earned end @@ -158,6 +165,24 @@ def reset_earned @prev_state = @prev_state.transform_values { false } end + # Set a Rich Presence message for testing. + # + # Pass a static string to return a fixed message: + # backend.set_rich_presence("Playing World 1-1") + # + # Pass a block for dynamic messages evaluated each do_frame: + # backend.set_rich_presence { "Frame #{frame_count}" } + # + # Call with no arguments to clear. + def set_rich_presence(string = nil, &block) + @rich_presence_block = block || (string ? -> { string } : nil) + @rich_presence_message = string unless block + end + + def rich_presence_message + @rich_presence_message + end + # Configure what fetch_for_display returns. Pass an Array (returned for # every rom_info) or a block that receives rom_info and returns an Array # or nil. Without calling this, fetch_for_display always calls back with nil. diff --git a/lib/gemba/achievements/offline_backend.rb b/lib/gemba/achievements/offline_backend.rb index b7c754d..e27ebaa 100644 --- a/lib/gemba/achievements/offline_backend.rb +++ b/lib/gemba/achievements/offline_backend.rb @@ -45,6 +45,8 @@ def initialize(db: nil) @achievements = [] @earned = {} @prev_state = {} + @rp_db = {} # checksum → String + @rich_presence_message = nil end # -- Authentication (no-op — offline backend is always authenticated) ------ @@ -66,7 +68,7 @@ def logout def authenticated? = true - def ping + def token_test fire_auth_change(:ok, nil) end @@ -76,6 +78,7 @@ def load_game(core, rom_path = nil, md5 = nil) @achievements = [] @earned = {} @prev_state = {} + @rich_presence_message = @rp_db[core.checksum] (@db[core.checksum] || []).each do |defn| ach = Achievement.new( @@ -97,9 +100,10 @@ def load_game(core, rom_path = nil, md5 = nil) end def unload_game - @achievements = [] - @earned = {} - @prev_state = {} + @achievements = [] + @earned = {} + @prev_state = {} + @rich_presence_message = nil end # -- Per-frame evaluation (memory-condition achievements) ----------------- @@ -136,6 +140,10 @@ def achievement_list def enabled? = true + def rich_presence_message + @rich_presence_message + end + # -- DB management -------------------------------------------------------- # Merge achievement definitions for a ROM into the in-memory DB. @@ -146,6 +154,15 @@ def enabled? = true def store(checksum, defs) @db = @db.merge(checksum => defs) end + + # Store a static Rich Presence message for a ROM. + # Intended for use by RcheevosBackend when caching patch data offline. + # + # @param checksum [Integer] + # @param message [String] + def store_rich_presence(checksum, message) + @rp_db = @rp_db.merge(checksum => message.to_s) + end end end end diff --git a/lib/gemba/achievements/retro_achievements/backend.rb b/lib/gemba/achievements/retro_achievements/backend.rb new file mode 100644 index 0000000..0b0ee83 --- /dev/null +++ b/lib/gemba/achievements/retro_achievements/backend.rb @@ -0,0 +1,453 @@ +# frozen_string_literal: true + +require "net/http" +require "json" +require "digest" + +module Gemba + module Achievements + module RetroAchievements + # Achievement backend that talks to retroachievements.org. + # + # All requests are HTTP POSTs to /dorequest.php. The 'r' parameter tells + # the server what you want — it's RA's own naming, not ours: + # + # r=login2 authenticate (password or token) + # r=gameid "here's a ROM MD5 hash — what game ID is it?" + # r=patch "give me the achievement definitions for this game" + # (called 'patch' because RA's original concept was that + # achievements are a 'patch' bolted on top of a ROM — + # extra behaviour injected into the game. the name stuck.) + # r=unlocks "which of these achievements has the player already earned?" + # r=awardachievement "the player just earned this achievement, record it" + # + # Most HTTP is done off the main thread via Teek::BackgroundWork (thread mode). + # The ping heartbeat uses PING_BG_MODE which selects ractor mode on Ruby 4+. + # + # Authentication flow: + # login_with_password → r=login2 + password → stores token, fires :ok + # login_with_token → r=login2 + token → verifies token, fires :ok/:error + # token_test → same as login_with_token using stored creds + # + # Game load flow (all requests are chained — each fires when the previous + # HTTP response comes back): + # + # load_game(core, rom_path) + # → MD5 hash the ROM file + # → r=gameid (MD5) — server tells us the RA game ID + # → r=patch (game ID) — server sends achievement definitions + # → r=unlocks (game ID) — server says which the player already has + # → activate each un-earned achievement in the C runtime + # (parse conditions, load into hash table so do_frame checks them) + # + # Achievements are not loaded into the runtime until AFTER the unlocks + # response arrives. This means @achievements stays empty during the + # network round-trips, and do_frame's early-return guard prevents any + # evaluation before we know what the player has already earned. + class Backend + include Achievements::Backend + + RA_HOST = "retroachievements.org" + RA_PATH = "/dorequest.php" + PING_BG_MODE = (RUBY_VERSION >= "4.0" ? :ractor : :thread).freeze + + # Frames between Rich Presence evaluations (~4 s at 60 fps). + RP_EVAL_INTERVAL = 240 + # Seconds between session ping heartbeats. + PING_INTERVAL_SEC = 120 + + # Default requester: delegates to Teek::BackgroundWork. + # Extracted so tests can inject a synchronous fake with the same interface. + DEFAULT_REQUESTER = lambda do |app, params, mode: :thread, **opts, &block| + Teek::BackgroundWork.new(app, params, mode: mode, **opts, &block) + end.freeze + + def initialize(app:, runtime: nil, requester: nil) + @app = app + @requester = requester || DEFAULT_REQUESTER + @username = nil + @token = nil + @game_id = nil + @achievements = [] + @earned = {} + @authenticated = false + @include_unofficial = false + @rich_presence_enabled = false + @rich_presence_message = nil + @rp_eval_frame = 0 + @ping_last_at = nil + @ra_runtime = runtime || Gemba::RARuntime.new + end + + attr_writer :include_unofficial + attr_writer :rich_presence_enabled + attr_reader :rich_presence_message + + # -- Authentication ------------------------------------------------------- + + def login_with_password(username:, password:) + ra_request(r: "login2", u: username, p: password) do |json, ok| + if ok && json&.dig("Success") + @username = username + @token = json["Token"] + @authenticated = true + Gemba.log(:info) { "RA: authenticated as #{username}" } + fire_auth_change(:ok, @token) + else + msg = json&.dig("Error") || "Login failed" + Gemba.log(:warn) { "RA: authentication failed for #{username}: #{msg}" } + fire_auth_change(:error, msg) + end + end + end + + def login_with_token(username:, token:) + @username = username + @token = token + ra_request(r: "login2", u: username, t: token) do |json, ok| + if ok && json&.dig("Success") + @authenticated = true + Gemba.log(:info) { "RA: token verified for #{username}" } + fire_auth_change(:ok, nil) + else + @authenticated = false + msg = json&.dig("Error") || "Token invalid" + Gemba.log(:warn) { "RA: token verification failed for #{username}: #{msg}" } + fire_auth_change(:error, msg) + end + end + end + + def token_test + ra_request(r: "login2", u: @username, t: @token) do |json, ok| + if ok && json&.dig("Success") + fire_auth_change(:ok, nil) + else + @authenticated = false + fire_auth_change(:error, json&.dig("Error") || "Token invalid") + end + end + end + + def logout + @username = nil + @token = nil + @authenticated = false + @game_id = nil + @achievements = [] + @earned = {} + @ra_runtime.clear + fire_auth_change(:logout) + end + + def authenticated? = @authenticated + def enabled? = true + + # -- Game lifecycle ------------------------------------------------------- + + def load_game(core, rom_path = nil, md5 = nil) + return unless @authenticated + return unless rom_path && File.exist?(rom_path.to_s) + + @achievements = [] + @earned = {} + @game_id = nil + @rich_presence_message = nil + @rp_eval_frame = 0 + @ping_last_at = nil + + # Use pre-computed digest if available (computed at ROM load time and + # cached in rom_library.json); fall back to computing it here for entries + # that pre-date MD5 storage. + md5 ||= Digest::MD5.file(rom_path).hexdigest + + ra_request(r: "gameid", m: md5) do |json, ok| + next unless ok + game_id = json&.dig("GameID")&.to_i + next if !game_id || game_id == 0 + + @game_id = game_id + fetch_patch_data(game_id) + end + end + + # Called after a save state is loaded. Memory just jumped to an arbitrary + # saved state, so every achievement must go back through the priming and + # waiting startup sequence — otherwise achievements that were already active + # fire instantly if the saved memory happens to satisfy their conditions. + def reset_runtime + @ra_runtime.reset_all + end + + def unload_game + @game_id = nil + @achievements = [] + @earned = {} + @rich_presence_message = nil + @rp_eval_frame = 0 + @ping_last_at = nil + @ra_runtime.clear + fire_achievements_changed + end + + def sync_unlocks + return unless @authenticated + Gemba.bus.emit(:ra_sync_started) + unless @game_id + Gemba.bus.emit(:ra_sync_done, ok: false, reason: :no_game) + return + end + @earned = {} + @achievements = [] + @ra_runtime.reset_all + fetch_patch_data(@game_id, emit_sync_done: true) + end + + def do_frame(core) + return if @achievements.empty? + + triggered_ids = @ra_runtime.do_frame(core) + triggered_ids.each do |id| + next if @earned.key?(id) + ach = @achievements.find { |a| a.id == id } + next unless ach + + earned = ach.earn + @earned[id] = earned + fire_unlock(earned) + submit_unlock(id) + end + + return unless @rich_presence_enabled + + @rp_eval_frame = (@rp_eval_frame + 1) % RP_EVAL_INTERVAL + return unless @rp_eval_frame == 0 + + msg = @ra_runtime.get_richpresence(core) + if msg && msg != @rich_presence_message + @rich_presence_message = msg + fire_rich_presence_changed(msg) + end + + now = Time.now + if @game_id && @authenticated && (@ping_last_at.nil? || now - @ping_last_at >= PING_INTERVAL_SEC) + @ping_last_at = now + ping_game_session + end + end + + # -- Achievement list ----------------------------------------------------- + + def achievement_list + @achievements.map { |a| @earned[a.id] || a } + end + + # Fetch the full achievement list for any ROM by its RomInfo, purely for + # display. Does not touch the live game state (@achievements, @earned, + # @ra_runtime). Calls the block on the main thread with Array + # on success or nil on failure. + # + # Request chain (all POST to /dorequest.php): + # r=gameid m= + # r=patch u= t= g= + # r=unlocks u= t= g= h=0 + def fetch_for_display(rom_info:, &callback) + return unless @authenticated && rom_info.md5 + + Gemba.log(:info) { "RA fetch_for_display: gameid lookup md5=#{rom_info.md5[0, 8]}… (#{rom_info.title})" } + + ra_request(r: "gameid", m: rom_info.md5) do |json, ok| + game_id = ok ? json&.dig("GameID")&.to_i : nil + Gemba.log(game_id&.positive? ? :info : :warn) { + "RA fetch_for_display: gameid → #{game_id.inspect} ok=#{ok}" + } + unless game_id && game_id > 0 + callback.call(nil) + next + end + + ra_request(r: "patch", u: @username, t: @token, g: game_id) do |patch_json, patch_ok| + Gemba.log(patch_ok ? :info : :warn) { + "RA fetch_for_display: patch g=#{game_id} ok=#{patch_ok} achievements=#{patch_json&.dig("PatchData", "Achievements")&.size.inspect}" + } + unless patch_ok && patch_json + callback.call(nil) + next + end + + achievements = (patch_json.dig("PatchData", "Achievements") || []).filter_map do |a| + next if a["MemAddr"].to_s.empty? + next if a["Flags"].to_i != 3 && !(a["Flags"].to_i == 5 && @include_unofficial) + next if a["ID"].to_i > 100_000_000 # skip RA-injected system messages + Achievement.new( + id: a["ID"].to_s, + title: a["Title"].to_s, + description: a["Description"].to_s, + points: a["Points"].to_i, + earned_at: nil, + ) + end + + ra_request(r: "unlocks", u: @username, t: @token, g: game_id, h: 0) do |ul_json, ul_ok| + earned_ids = ul_ok && ul_json&.dig("Success") ? + (ul_json.dig("UserUnlocks") || []).map(&:to_s) : [] + Gemba.log(ul_ok ? :info : :warn) { + "RA fetch_for_display: unlocks g=#{game_id} ok=#{ul_ok} earned=#{earned_ids.size} total=#{achievements.size}" + } + result = achievements.map { |a| earned_ids.include?(a.id) ? a.earn : a } + callback.call(result) + end + end + end + end + + private + + # Fetch patch data (achievement definitions). Does NOT activate the runtime + # or populate @achievements — that happens only after unlocks are known, + # in activate_from_patch. This ensures do_frame can never evaluate and + # award achievements during the window between patch data and unlocks. + def fetch_patch_data(game_id, emit_sync_done: false) + ra_request(r: "patch", u: @username, t: @token, g: game_id) do |json, ok| + unless ok && json + Gemba.log(:warn) { "RA: failed to fetch patch data for game #{game_id}" } + Gemba.bus.emit(:ra_sync_done, ok: false) if emit_sync_done + next + end + + rp_script = json.dig("PatchData", "RichPresencePatch").to_s + + raw = (json.dig("PatchData", "Achievements") || []).select do |a| + !a["MemAddr"].to_s.empty? && + (a["Flags"].to_i == 3 || (a["Flags"].to_i == 5 && @include_unofficial)) && + a["ID"].to_i <= 100_000_000 + end + + fetch_unlocks(game_id, raw_ach_data: raw, rp_script: rp_script, emit_sync_done: emit_sync_done) + end + end + + # Fetch already-earned achievement IDs, then activate the runtime with + # all achievements, immediately deactivating the already-earned ones. + # Only after this step is @achievements populated — so do_frame's + # `return if @achievements.empty?` guard covers the entire window. + def fetch_unlocks(game_id, raw_ach_data: nil, rp_script: nil, emit_sync_done: false) + ra_request(r: "unlocks", u: @username, t: @token, g: game_id, h: 0) do |json, ok| + unless ok && json&.dig("Success") + Gemba.log(:warn) { "RA: failed to fetch unlocks for game #{game_id}" } + Gemba.bus.emit(:ra_sync_done, ok: false) if emit_sync_done + next + end + + earned_ids = (json.dig("UserUnlocks") || []).map(&:to_s) + + if raw_ach_data + # Fresh load / re-sync: activate runtime now that we know earned set. + @ra_runtime.clear + @achievements = raw_ach_data.filter_map do |a| + id = a["ID"].to_s + memaddr = a["MemAddr"].to_s + begin + @ra_runtime.activate(id, memaddr) + rescue ArgumentError => e + Gemba.log(:warn) { "RA: skipping achievement #{id} — #{e.message}" } + next + end + @ra_runtime.deactivate(id) if earned_ids.include?(id) + Achievement.new( + id: id, + title: a["Title"].to_s, + description: a["Description"].to_s, + points: a["Points"].to_i, + earned_at: nil, + ) + end + Gemba.log(:info) { "RA: loaded #{@achievements.size} achievements for game #{game_id}" } + + if rp_script && !rp_script.empty? + ok = @ra_runtime.activate_richpresence(rp_script) + Gemba.log(ok ? :info : :warn) { "RA: rich presence script #{ok ? "activated" : "failed to parse"} for game #{game_id}" } + end + end + + newly_marked = 0 + earned_ids.each do |id| + next if @earned.key?(id) + ach = @achievements.find { |a| a.id == id } + next unless ach + earned = ach.earn + @earned[id] = earned + newly_marked += 1 + end + + Gemba.log(:info) { "RA: synced #{newly_marked} pre-earned achievements for game #{game_id}" } if newly_marked > 0 + fire_achievements_changed + Gemba.bus.emit(:ra_sync_done, ok: true) if emit_sync_done + end + end + + # POST r=ping heartbeat — keeps the RA session alive and records + # the current Rich Presence string on the server. + # Runs via PingWorker which is Ractor-safe on Ruby 4+. + def ping_game_session + data = { + host: RA_HOST, + path: RA_PATH, + params: { + "r" => "ping", + "u" => @username, + "t" => @token, + "g" => @game_id.to_s, + "m" => @rich_presence_message.to_s, + }, + } + data = Ractor.make_shareable(data) if PING_BG_MODE == :ractor + game_id = @game_id + @requester.call(@app, data, mode: PING_BG_MODE, worker: PingWorker) + .on_progress { |ok| Gemba.log(ok ? :info : :warn) { "RA: ping g=#{game_id} ok=#{ok}" } } + end + + # Best-effort unlock submission — fires and forgets, result only logged. + def submit_unlock(achievement_id, hardcore: false) + ra_request(r: "awardachievement", u: @username, t: @token, + a: achievement_id, h: hardcore ? 1 : 0) do |json, ok| + if ok && json&.dig("Success") + Gemba.log(:info) { "RA: submitted unlock for achievement #{achievement_id}" } + else + Gemba.log(:warn) { "RA: unlock submission failed for #{achievement_id}: #{json&.dig("Error")}" } + end + end + end + + # POST to dorequest.php via @requester (BackgroundWork in production, + # a synchronous fake in tests). Calls on_done with (json_or_nil, ok_bool). + def ra_request(params, &on_done) + @requester.call(@app, params, mode: :thread) do |t, req_params| + uri = URI::HTTPS.build(host: RA_HOST, path: RA_PATH) + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + http.read_timeout = 15 + req = Net::HTTP::Post.new(uri.path) + safe = req_params.reject { |k, _| [:t, :p, "t", "p"].include?(k) } + Gemba.log(:info) { "RA request: r=#{params[:r]} #{safe.map { |k, v| "#{k}=#{v}" }.join(" ")}" } + req.set_form_data(req_params.transform_keys(&:to_s).transform_values(&:to_s)) + resp = http.request(req) + if resp.is_a?(Net::HTTPSuccess) + body = resp.body + Gemba.log(:info) { "RA response: r=#{params[:r]} HTTP #{resp.code} body=#{body.length}b" } + t.yield([JSON.parse(body), true]) + else + Gemba.log(:warn) { "RA response: r=#{params[:r]} HTTP #{resp.code} #{resp.message} body=#{resp.body.to_s[0, 200]}" } + t.yield([nil, false]) + end + rescue => e + Gemba.log(:warn) { "RA: request error (#{params[:r]}): #{e.class} #{e.message}" } + t.yield([nil, false]) + end.on_progress do |result| + on_done.call(*result) if on_done && result + end + end + end + end + end +end diff --git a/lib/gemba/achievements/retro_achievements/ping_worker.rb b/lib/gemba/achievements/retro_achievements/ping_worker.rb new file mode 100644 index 0000000..c734bdb --- /dev/null +++ b/lib/gemba/achievements/retro_achievements/ping_worker.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Gemba + module Achievements + module RetroAchievements + # Background worker for the RA session ping heartbeat. + # + # Defined as a named class (not a closure) so it is Ractor-safe on + # Ruby 4+. All state is passed through the data hash; no captured + # variables. + class PingWorker + def call(t, data) + require "net/http" + uri = URI::HTTPS.build(host: data[:host], path: data[:path]) + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + http.read_timeout = 10 + req = Net::HTTP::Post.new(uri.path) + req.set_form_data(data[:params]) + t.yield(http.request(req).is_a?(Net::HTTPSuccess)) + rescue + t.yield(false) + end + end + end + end +end diff --git a/lib/gemba/achievements/retro_achievements_backend.rb b/lib/gemba/achievements/retro_achievements_backend.rb deleted file mode 100644 index 3c9053b..0000000 --- a/lib/gemba/achievements/retro_achievements_backend.rb +++ /dev/null @@ -1,380 +0,0 @@ -# frozen_string_literal: true - -require "net/http" -require "json" -require "digest" - -module Gemba - module Achievements - # Achievement backend that talks to retroachievements.org. - # - # All requests are HTTP POSTs to /dorequest.php. The 'r' parameter tells - # the server what you want — it's RA's own naming, not ours: - # - # r=login2 authenticate (password or token) - # r=gameid "here's a ROM MD5 hash — what game ID is it?" - # r=patch "give me the achievement definitions for this game" - # (called 'patch' because RA's original concept was that - # achievements are a 'patch' bolted on top of a ROM — - # extra behaviour injected into the game. the name stuck.) - # r=unlocks "which of these achievements has the player already earned?" - # r=awardachievement "the player just earned this achievement, record it" - # - # All HTTP is done off the main thread via Teek::BackgroundWork (thread mode). - # - # Authentication flow: - # login_with_password → r=login2 + password → stores token, fires :ok - # login_with_token → r=login2 + token → verifies token, fires :ok/:error - # ping → same as login_with_token using stored creds - # - # Game load flow (all requests are chained — each fires when the previous - # HTTP response comes back): - # - # load_game(core, rom_path) - # → MD5 hash the ROM file - # → r=gameid (MD5) — server tells us the RA game ID - # → r=patch (game ID) — server sends achievement definitions - # → r=unlocks (game ID) — server says which the player already has - # → activate each un-earned achievement in the C runtime - # (parse conditions, load into hash table so do_frame checks them) - # - # Achievements are not loaded into the runtime until AFTER the unlocks - # response arrives. This means @achievements stays empty during the - # network round-trips, and do_frame's early-return guard prevents any - # evaluation before we know what the player has already earned. - class RetroAchievementsBackend - include Backend - - RA_HOST = "retroachievements.org" - RA_PATH = "/dorequest.php" - - def initialize(app:) - @app = app - @username = nil - @token = nil - @game_id = nil - @achievements = [] - @earned = {} - @authenticated = false - @include_unofficial = false - @ra_runtime = Gemba::RARuntime.new - end - - attr_writer :include_unofficial - - # -- Authentication ------------------------------------------------------- - - def login_with_password(username:, password:) - ra_request(r: 'login2', u: username, p: password) do |json, ok| - if ok && json&.dig('Success') - @username = username - @token = json['Token'] - @authenticated = true - Gemba.log(:info) { "RA: authenticated as #{username}" } - fire_auth_change(:ok, @token) - else - msg = json&.dig('Error') || 'Login failed' - Gemba.log(:warn) { "RA: authentication failed for #{username}: #{msg}" } - fire_auth_change(:error, msg) - end - end - end - - def login_with_token(username:, token:) - @username = username - @token = token - ra_request(r: 'login2', u: username, t: token) do |json, ok| - if ok && json&.dig('Success') - @authenticated = true - Gemba.log(:info) { "RA: token verified for #{username}" } - fire_auth_change(:ok, nil) - else - @authenticated = false - msg = json&.dig('Error') || 'Token invalid' - Gemba.log(:warn) { "RA: token verification failed for #{username}: #{msg}" } - fire_auth_change(:error, msg) - end - end - end - - def ping - ra_request(r: 'login2', u: @username, t: @token) do |json, ok| - if ok && json&.dig('Success') - fire_auth_change(:ok, nil) - else - @authenticated = false - fire_auth_change(:error, json&.dig('Error') || 'Token invalid') - end - end - end - - def logout - @username = nil - @token = nil - @authenticated = false - @game_id = nil - @achievements = [] - @earned = {} - @ra_runtime.clear - fire_auth_change(:logout) - end - - def authenticated? = @authenticated - def enabled? = true - - # -- Game lifecycle ------------------------------------------------------- - - def load_game(core, rom_path = nil, md5 = nil) - return unless @authenticated - return unless rom_path && File.exist?(rom_path.to_s) - - @achievements = [] - @earned = {} - @game_id = nil - - # Use pre-computed digest if available (computed at ROM load time and - # cached in rom_library.json); fall back to computing it here for entries - # that pre-date MD5 storage. - md5 ||= Digest::MD5.file(rom_path).hexdigest - - ra_request(r: 'gameid', m: md5) do |json, ok| - next unless ok - game_id = json&.dig('GameID')&.to_i - next if !game_id || game_id == 0 - - @game_id = game_id - fetch_patch_data(game_id) - end - end - - # Called after a save state is loaded. Memory just jumped to an arbitrary - # saved state, so every achievement must go back through the priming and - # waiting startup sequence — otherwise achievements that were already active - # fire instantly if the saved memory happens to satisfy their conditions. - def reset_runtime - @ra_runtime.reset_all - end - - def unload_game - @game_id = nil - @achievements = [] - @earned = {} - @ra_runtime.clear - fire_achievements_changed - end - - def sync_unlocks - return unless @authenticated - Gemba.bus.emit(:ra_sync_started) - unless @game_id - Gemba.bus.emit(:ra_sync_done, ok: false, reason: :no_game) - return - end - @earned = {} - @achievements = [] - @ra_runtime.reset_all - fetch_patch_data(@game_id, emit_sync_done: true) - end - - def do_frame(core) - return if @achievements.empty? - - triggered_ids = @ra_runtime.do_frame(core) - triggered_ids.each do |id| - next if @earned.key?(id) - ach = @achievements.find { |a| a.id == id } - next unless ach - - earned = ach.earn - @earned[id] = earned - fire_unlock(earned) - submit_unlock(id) - end - end - - # -- Achievement list ----------------------------------------------------- - - def achievement_list - @achievements.map { |a| @earned[a.id] || a } - end - - # Fetch the full achievement list for any ROM by its RomInfo, purely for - # display. Does not touch the live game state (@achievements, @earned, - # @ra_runtime). Calls the block on the main thread with Array - # on success or nil on failure. - # - # Request chain (all POST to /dorequest.php): - # r=gameid m= - # r=patch u= t= g= - # r=unlocks u= t= g= h=0 - def fetch_for_display(rom_info:, &callback) - return unless @authenticated && rom_info.md5 - - Gemba.log(:info) { "RA fetch_for_display: gameid lookup md5=#{rom_info.md5[0, 8]}… (#{rom_info.title})" } - - ra_request(r: 'gameid', m: rom_info.md5) do |json, ok| - game_id = ok ? json&.dig('GameID')&.to_i : nil - Gemba.log(game_id&.positive? ? :info : :warn) { - "RA fetch_for_display: gameid → #{game_id.inspect} ok=#{ok}" - } - unless game_id && game_id > 0 - callback.call(nil) - next - end - - ra_request(r: 'patch', u: @username, t: @token, g: game_id) do |patch_json, patch_ok| - Gemba.log(patch_ok ? :info : :warn) { - "RA fetch_for_display: patch g=#{game_id} ok=#{patch_ok} achievements=#{patch_json&.dig('PatchData', 'Achievements')&.size.inspect}" - } - unless patch_ok && patch_json - callback.call(nil) - next - end - - achievements = (patch_json.dig('PatchData', 'Achievements') || []).filter_map do |a| - next if a['MemAddr'].to_s.empty? - next if a['Flags'].to_i != 3 && !(a['Flags'].to_i == 5 && @include_unofficial) - next if a['ID'].to_i > 100_000_000 # skip RA-injected system messages - Achievement.new( - id: a['ID'].to_s, - title: a['Title'].to_s, - description: a['Description'].to_s, - points: a['Points'].to_i, - earned_at: nil, - ) - end - - ra_request(r: 'unlocks', u: @username, t: @token, g: game_id, h: 0) do |ul_json, ul_ok| - earned_ids = ul_ok && ul_json&.dig('Success') ? - (ul_json.dig('UserUnlocks') || []).map(&:to_s) : [] - Gemba.log(ul_ok ? :info : :warn) { - "RA fetch_for_display: unlocks g=#{game_id} ok=#{ul_ok} earned=#{earned_ids.size} total=#{achievements.size}" - } - result = achievements.map { |a| earned_ids.include?(a.id) ? a.earn : a } - callback.call(result) - end - end - end - end - - private - - # Fetch patch data (achievement definitions). Does NOT activate the runtime - # or populate @achievements — that happens only after unlocks are known, - # in activate_from_patch. This ensures do_frame can never evaluate and - # award achievements during the window between patch data and unlocks. - def fetch_patch_data(game_id, emit_sync_done: false) - ra_request(r: 'patch', u: @username, t: @token, g: game_id) do |json, ok| - unless ok && json - Gemba.log(:warn) { "RA: failed to fetch patch data for game #{game_id}" } - Gemba.bus.emit(:ra_sync_done, ok: false) if emit_sync_done - next - end - - raw = (json.dig('PatchData', 'Achievements') || []).select do |a| - !a['MemAddr'].to_s.empty? && - (a['Flags'].to_i == 3 || (a['Flags'].to_i == 5 && @include_unofficial)) && - a['ID'].to_i <= 100_000_000 - end - - fetch_unlocks(game_id, raw_ach_data: raw, emit_sync_done: emit_sync_done) - end - end - - # Fetch already-earned achievement IDs, then activate the runtime with - # all achievements, immediately deactivating the already-earned ones. - # Only after this step is @achievements populated — so do_frame's - # `return if @achievements.empty?` guard covers the entire window. - def fetch_unlocks(game_id, raw_ach_data: nil, emit_sync_done: false) - ra_request(r: 'unlocks', u: @username, t: @token, g: game_id, h: 0) do |json, ok| - unless ok && json&.dig('Success') - Gemba.log(:warn) { "RA: failed to fetch unlocks for game #{game_id}" } - Gemba.bus.emit(:ra_sync_done, ok: false) if emit_sync_done - next - end - - earned_ids = (json.dig('UserUnlocks') || []).map(&:to_s) - - if raw_ach_data - # Fresh load / re-sync: activate runtime now that we know earned set. - @ra_runtime.clear - @achievements = raw_ach_data.filter_map do |a| - id = a['ID'].to_s - memaddr = a['MemAddr'].to_s - begin - @ra_runtime.activate(id, memaddr) - rescue ArgumentError => e - Gemba.log(:warn) { "RA: skipping achievement #{id} — #{e.message}" } - next - end - @ra_runtime.deactivate(id) if earned_ids.include?(id) - Achievement.new( - id: id, - title: a['Title'].to_s, - description: a['Description'].to_s, - points: a['Points'].to_i, - earned_at: nil, - ) - end - Gemba.log(:info) { "RA: loaded #{@achievements.size} achievements for game #{game_id}" } - end - - newly_marked = 0 - earned_ids.each do |id| - next if @earned.key?(id) - ach = @achievements.find { |a| a.id == id } - next unless ach - earned = ach.earn - @earned[id] = earned - newly_marked += 1 - end - - Gemba.log(:info) { "RA: synced #{newly_marked} pre-earned achievements for game #{game_id}" } if newly_marked > 0 - fire_achievements_changed - Gemba.bus.emit(:ra_sync_done, ok: true) if emit_sync_done - end - end - - # Best-effort unlock submission — fires and forgets, result only logged. - def submit_unlock(achievement_id, hardcore: false) - ra_request(r: 'awardachievement', u: @username, t: @token, - a: achievement_id, h: hardcore ? 1 : 0) do |json, ok| - if ok && json&.dig('Success') - Gemba.log(:info) { "RA: submitted unlock for achievement #{achievement_id}" } - else - Gemba.log(:warn) { "RA: unlock submission failed for #{achievement_id}: #{json&.dig('Error')}" } - end - end - end - - # POST to dorequest.php in a background thread. - # Calls block with (json_hash_or_nil, success_bool) on the main thread. - def ra_request(params, &on_done) - Teek::BackgroundWork.new(@app, params, mode: :thread) do |t, req_params| - uri = URI::HTTPS.build(host: RA_HOST, path: RA_PATH) - http = Net::HTTP.new(uri.host, uri.port) - http.use_ssl = true - http.read_timeout = 15 - req = Net::HTTP::Post.new(uri.path) - safe = req_params.reject { |k, _| [:t, :p, 't', 'p'].include?(k) } - Gemba.log(:info) { "RA request: r=#{params[:r]} #{safe.map { |k, v| "#{k}=#{v}" }.join(' ')}" } - req.set_form_data(req_params.transform_keys(&:to_s).transform_values(&:to_s)) - resp = http.request(req) - if resp.is_a?(Net::HTTPSuccess) - body = resp.body - Gemba.log(:info) { "RA response: r=#{params[:r]} HTTP #{resp.code} body=#{body.length}b" } - t.yield([JSON.parse(body), true]) - else - Gemba.log(:warn) { "RA response: r=#{params[:r]} HTTP #{resp.code} #{resp.message} body=#{resp.body.to_s[0, 200]}" } - t.yield([nil, false]) - end - rescue => e - Gemba.log(:warn) { "RA: request error (#{params[:r]}): #{e.class} #{e.message}" } - t.yield([nil, false]) - end.on_progress do |result| - on_done.call(*result) if on_done && result - end - end - end - end -end diff --git a/lib/gemba/achievements_window.rb b/lib/gemba/achievements_window.rb index 1ea4e76..5e37a4a 100644 --- a/lib/gemba/achievements_window.rb +++ b/lib/gemba/achievements_window.rb @@ -46,6 +46,7 @@ def update_game(rom_id:, backend:) select_game(rom_id) populate_tree update_title + update_rich_presence end # Called by AppController when on_achievements_changed fires. @@ -55,6 +56,7 @@ def refresh(backend = @backend) return unless @built populate_tree + update_rich_presence end def show @@ -140,6 +142,11 @@ def setup_bus_subscriptions Gemba.bus.on(:ra_auth_result) do |status:, **| refresh_auth_state end + + Gemba.bus.on(:ra_rich_presence_changed) do |message:, **| + next unless @rp_lbl + @app.command(@rp_lbl, :configure, text: message) + end end def refresh_auth_state @@ -219,11 +226,22 @@ def build_tree end def build_status - @status_lbl = "#{TOP}.status" + bar = "#{TOP}.status_bar" + @app.command('ttk::frame', bar) + @app.command(:pack, bar, fill: :x) + + @status_lbl = "#{bar}.status" @app.command('ttk::label', @status_lbl, text: translate('achievements.none'), anchor: :w, padding: [8, 2, 8, 6]) - @app.command(:pack, @status_lbl, fill: :x) + @app.command(:pack, @status_lbl, side: :left) + + @rp_lbl = "#{bar}.rich_presence" + @app.command('ttk::label', @rp_lbl, + text: '', + anchor: :e, padding: [8, 2, 8, 6], + foreground: '#666666') + @app.command(:pack, @rp_lbl, side: :right) end def refresh_game_list @@ -363,6 +381,12 @@ def set_status(text) @app.command(@status_lbl, :configure, text: text) end + def update_rich_presence + return unless @rp_lbl + msg = @backend&.rich_presence_message.to_s + @app.command(@rp_lbl, :configure, text: msg) + end + def update_title entry = @game_entries.find { |r| r['rom_id'] == @current_rom_id } game_title = entry && (GameIndex.lookup(entry['game_code']) || entry['title']) diff --git a/lib/gemba/app_controller.rb b/lib/gemba/app_controller.rb index 3fa8a37..05305d5 100644 --- a/lib/gemba/app_controller.rb +++ b/lib/gemba/app_controller.rb @@ -205,7 +205,7 @@ def setup_bus_subscriptions achievement_backend.login_with_password(username: username, password: password) end bus.on(:ra_verify) do - achievement_backend.ping + achievement_backend.token_test end bus.on(:ra_logout) do achievement_backend.logout @@ -246,6 +246,7 @@ def setup_bus_subscriptions @app.command(@view_menu, :entryconfigure, 0, state: :normal) # Game Library @app.command(@view_menu, :entryconfigure, 2, state: :normal) # ROM Info @current_rom_id = rom_id + @achievement_backend.rich_presence_enabled = @config.ra_rich_presence? @achievements_window&.update_game(rom_id: rom_id, backend: @achievement_backend) # only if open [3, 4, 6, 8, 9].each { |i| @app.command(@emu_menu, :entryconfigure, i, state: :normal) } rebuild_recent_menu @@ -690,6 +691,9 @@ def setup_achievement_backend @achievement_backend.on_unlock do |_ach| @achievements_window&.refresh(@achievement_backend) # only if already open end + @achievement_backend.on_rich_presence_changed do |msg| + Gemba.bus.emit(:ra_rich_presence_changed, message: msg.to_s) + end @achievement_backend.on_auth_change do |status, token_or_error| case status when :ok diff --git a/lib/gemba/config.rb b/lib/gemba/config.rb index 036f5d0..587848b 100644 --- a/lib/gemba/config.rb +++ b/lib/gemba/config.rb @@ -57,6 +57,7 @@ class Config 'ra_token' => '', 'ra_hardcore' => false, 'ra_unofficial' => false, + 'ra_rich_presence' => false, }.freeze # Settings that can be overridden per ROM. Maps config key → locale key. @@ -72,6 +73,7 @@ class Config 'turbo_speed' => 'settings.turbo_speed', 'quick_save_slot' => 'settings.quick_save_slot', 'save_state_backup' => 'settings.keep_backup', + 'ra_rich_presence' => 'settings.ra_rich_presence', }.freeze PER_GAME_KEYS = PER_GAME_SETTINGS.keys.to_set.freeze @@ -486,6 +488,14 @@ def ra_unofficial=(val) global['ra_unofficial'] = val ? true : false end + def ra_rich_presence? + global['ra_rich_presence'] + end + + def ra_rich_presence=(val) + global['ra_rich_presence'] = val ? true : false + end + # @return [String] directory for .grec recording files def recordings_dir global['recordings_dir'] || self.class.default_recordings_dir diff --git a/lib/gemba/locales/en.yml b/lib/gemba/locales/en.yml index cf1a5c2..dc28036 100644 --- a/lib/gemba/locales/en.yml +++ b/lib/gemba/locales/en.yml @@ -141,6 +141,7 @@ settings: ra_credentials: "Account" ra_username_placeholder: "Username:" ra_token_placeholder: "Password:" + ra_rich_presence: "Rich Presence (per-game)" ra_hardcore: "Hardcore mode (disables save states and rewind)" tip_ra_password: "Your password is only used to fetch an API token and is never saved." ra_login: "Login" diff --git a/lib/gemba/locales/ja.yml b/lib/gemba/locales/ja.yml index 61dde96..b0ff827 100644 --- a/lib/gemba/locales/ja.yml +++ b/lib/gemba/locales/ja.yml @@ -141,6 +141,7 @@ settings: ra_credentials: "アカウント" ra_username_placeholder: "ユーザー名:" ra_token_placeholder: "パスワード:" + ra_rich_presence: "リッチプレゼンス(ゲームごと)" ra_hardcore: "ハードコアモード(セーブステートと巻き戻し無効)" tip_ra_password: "パスワードはAPIトークン取得のみに使用され、保存されません。" ra_login: "ログイン" diff --git a/lib/gemba/settings/system_tab.rb b/lib/gemba/settings/system_tab.rb index 24e17e9..9ad2e8d 100644 --- a/lib/gemba/settings/system_tab.rb +++ b/lib/gemba/settings/system_tab.rb @@ -23,16 +23,18 @@ class SystemTab RA_LOGOUT_BTN = "#{FRAME}.ra_btn_row.logout" RA_RESET_BTN = "#{FRAME}.ra_btn_row.reset" RA_FEEDBACK_LABEL = "#{FRAME}.ra_feedback" - RA_HARDCORE_CHECK = "#{FRAME}.ra_hardcore_row.check" - - VAR_BIOS_PATH = '::gemba_bios_path' - VAR_SKIP_BIOS = '::gemba_skip_bios' - VAR_RA_ENABLED = '::gemba_ra_enabled' - VAR_RA_USERNAME = '::gemba_ra_username' - VAR_RA_TOKEN = '::gemba_ra_token' - VAR_RA_HARDCORE = '::gemba_ra_hardcore' - VAR_RA_UNOFFICIAL = '::gemba_ra_unofficial' - VAR_RA_PASSWORD = '::gemba_ra_password' + RA_HARDCORE_CHECK = "#{FRAME}.ra_hardcore_row.check" + RA_RICH_PRESENCE_CHECK = "#{FRAME}.ra_rich_presence_row.check" + + VAR_BIOS_PATH = '::gemba_bios_path' + VAR_SKIP_BIOS = '::gemba_skip_bios' + VAR_RA_ENABLED = '::gemba_ra_enabled' + VAR_RA_USERNAME = '::gemba_ra_username' + VAR_RA_TOKEN = '::gemba_ra_token' + VAR_RA_HARDCORE = '::gemba_ra_hardcore' + VAR_RA_UNOFFICIAL = '::gemba_ra_unofficial' + VAR_RA_PASSWORD = '::gemba_ra_password' + VAR_RA_RICH_PRESENCE = '::gemba_ra_rich_presence' RA_UNOFFICIAL_CHECK = "#{FRAME}.ra_unofficial_row.check" @@ -63,25 +65,27 @@ def load_from_config(config) @app.command(BIOS_STATUS, :configure, text: translate('settings.bios_not_set')) end - @app.set_variable(VAR_RA_ENABLED, config.ra_enabled? ? '1' : '0') - @app.set_variable(VAR_RA_USERNAME, config.ra_username.to_s) - @app.set_variable(VAR_RA_HARDCORE, config.ra_hardcore? ? '1' : '0') - @app.set_variable(VAR_RA_UNOFFICIAL, config.ra_unofficial? ? '1' : '0') + @app.set_variable(VAR_RA_ENABLED, config.ra_enabled? ? '1' : '0') + @app.set_variable(VAR_RA_USERNAME, config.ra_username.to_s) + @app.set_variable(VAR_RA_HARDCORE, config.ra_hardcore? ? '1' : '0') + @app.set_variable(VAR_RA_UNOFFICIAL, config.ra_unofficial? ? '1' : '0') + @app.set_variable(VAR_RA_RICH_PRESENCE, config.ra_rich_presence? ? '1' : '0') @app.set_variable(VAR_RA_PASSWORD, '') @presenter&.dispose @presenter = Achievements::CredentialsPresenter.new(config) Gemba.bus.on(:credentials_changed) { apply_presenter_state } - Gemba.bus.on(:ra_ping_ok) { @app.after(3000) { @presenter&.clear_transient } } + Gemba.bus.on(:ra_token_test_ok) { @app.after(3000) { @presenter&.clear_transient } } apply_presenter_state end # Called by AppController#save_config def save_to_config(config) - config.ra_enabled = @app.get_variable(VAR_RA_ENABLED) == '1' - config.ra_username = @presenter ? @presenter.username : @app.get_variable(VAR_RA_USERNAME).to_s.strip - config.ra_token = @presenter ? @presenter.token : '' - config.ra_hardcore = @app.get_variable(VAR_RA_HARDCORE) == '1' + config.ra_enabled = @app.get_variable(VAR_RA_ENABLED) == '1' + config.ra_username = @presenter ? @presenter.username : @app.get_variable(VAR_RA_USERNAME).to_s.strip + config.ra_token = @presenter ? @presenter.token : '' + config.ra_hardcore = @app.get_variable(VAR_RA_HARDCORE) == '1' + config.ra_rich_presence = @app.get_variable(VAR_RA_RICH_PRESENCE) == '1' # Password is never persisted — ephemeral field only end @@ -237,6 +241,17 @@ def build_ra_section @app.command('ttk::label', RA_FEEDBACK_LABEL, text: '') @app.command(:pack, RA_FEEDBACK_LABEL, anchor: :w, padx: 14, pady: [4, 6]) + # Rich Presence (per-game) + rp_row = "#{FRAME}.ra_rich_presence_row" + @app.command('ttk::frame', rp_row) + @app.command(:pack, rp_row, fill: :x, padx: 10, pady: [0, 4]) + @app.set_variable(VAR_RA_RICH_PRESENCE, '0') + @app.command('ttk::checkbutton', RA_RICH_PRESENCE_CHECK, + text: translate('settings.ra_rich_presence'), + variable: VAR_RA_RICH_PRESENCE, + command: proc { @mark_dirty.call }) + @app.command(:pack, RA_RICH_PRESENCE_CHECK, side: :left) + # Hardcore hardcore_row = "#{FRAME}.ra_hardcore_row" @app.command('ttk::frame', hardcore_row) diff --git a/test/achievements_window/test_bulk_sync.rb b/test/achievements_window/test_bulk_sync.rb index 2c9fd5a..eafa24e 100644 --- a/test/achievements_window/test_bulk_sync.rb +++ b/test/achievements_window/test_bulk_sync.rb @@ -106,7 +106,7 @@ def test_bulk_sync_shows_per_game_status_updates statuses = [] backend.stub_fetch_for_display do |_| top = Gemba::AchievementsWindow::TOP - statuses << app.command("#{top}.status", :cget, '-text').to_s + statuses << app.command("#{top}.status_bar.status", :cget, '-text').to_s [] end @@ -205,7 +205,7 @@ def test_bulk_sync_done_status_shows_count app.command("#{top}.toolbar.unofficial", 'invoke') app.update - status = app.command("#{top}.status", :cget, '-text').to_s + status = app.command("#{top}.status_bar.status", :cget, '-text').to_s assert_includes status, '2', "done status should mention 2 games synced" ensure ENV.delete('GEMBA_CONFIG_DIR') diff --git a/test/achievements_window/test_bus_events.rb b/test/achievements_window/test_bus_events.rb index b490d92..acb015b 100644 --- a/test/achievements_window/test_bus_events.rb +++ b/test/achievements_window/test_bus_events.rb @@ -86,7 +86,7 @@ def test_ra_sync_done_fail_shows_error_status app.update top = Gemba::AchievementsWindow::TOP - status = app.command("#{top}.status", :cget, '-text').to_s + status = app.command("#{top}.status_bar.status", :cget, '-text').to_s assert_equal Gemba::Locale.translate('achievements.sync_failed'), status ensure app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil diff --git a/test/achievements_window/test_initial_state.rb b/test/achievements_window/test_initial_state.rb index af56443..87c8a41 100644 --- a/test/achievements_window/test_initial_state.rb +++ b/test/achievements_window/test_initial_state.rb @@ -154,7 +154,7 @@ def test_status_shows_none_when_empty app.update top = Gemba::AchievementsWindow::TOP - status = app.command("#{top}.status", :cget, '-text').to_s + status = app.command("#{top}.status_bar.status", :cget, '-text').to_s assert_equal Gemba::Locale.translate('achievements.none'), status ensure app.command(:destroy, Gemba::AchievementsWindow::TOP) rescue nil diff --git a/test/achievements_window/test_tree_rendering.rb b/test/achievements_window/test_tree_rendering.rb index b719850..de61a14 100644 --- a/test/achievements_window/test_tree_rendering.rb +++ b/test/achievements_window/test_tree_rendering.rb @@ -122,7 +122,7 @@ def test_status_bar_shows_earned_count app.update top = Gemba::AchievementsWindow::TOP - status = app.command("#{top}.status", :cget, '-text').to_s + status = app.command("#{top}.status_bar.status", :cget, '-text').to_s assert_includes status, '1' assert_includes status, '2' ensure diff --git a/test/support/fake_ra_runtime.rb b/test/support/fake_ra_runtime.rb new file mode 100644 index 0000000..060ebcb --- /dev/null +++ b/test/support/fake_ra_runtime.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +# Test double for Gemba::RARuntime (the C extension). +# +# Mirrors the full RARuntime interface so RetroAchievements::Backend can be +# tested without a real rcheevos instance or ROM memory. +# +# Usage: +# rt = FakeRARuntime.new +# rt.queue_triggers("101", "102") # do_frame will return these once +# rt.rp_message = "Playing Stage 1" # get_richpresence returns this +# rt.rp_activate_result = false # activate_richpresence returns false +class FakeRARuntime + attr_reader :activated, :deactivated, :cleared, :reset_count + attr_reader :rp_script + attr_accessor :rp_message, :rp_activate_result + + def initialize + @activated = {} # id => memaddr + @deactivated = [] + @trigger_queue = [] # Array> — one entry consumed per do_frame + @cleared = false + @reset_count = 0 + @rp_script = nil + @rp_message = nil + @rp_activate_result = true + end + + # Queue one frame's worth of triggered achievement IDs. + # Each call adds one "frame": the next do_frame call pops and returns it. + def queue_triggers(*ids) + @trigger_queue << ids.flatten.map(&:to_s) + end + + # -- RARuntime interface ---------------------------------------------------- + + def activate(id, memaddr) + @activated[id.to_s] = memaddr.to_s + end + + def deactivate(id) + @deactivated << id.to_s + @activated.delete(id.to_s) + end + + def reset_all + @reset_count += 1 + end + + def clear + @activated.clear + @deactivated.clear + @trigger_queue.clear + @cleared = true + end + + # Returns the next queued batch of triggered IDs, or [] if nothing queued. + def do_frame(_core) + @trigger_queue.shift || [] + end + + def count + @activated.size + end + + def activate_richpresence(script) + @rp_script = script + @rp_activate_result + end + + def get_richpresence(_core) + @rp_message + end +end diff --git a/test/support/fake_requester.rb b/test/support/fake_requester.rb new file mode 100644 index 0000000..1f975b0 --- /dev/null +++ b/test/support/fake_requester.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +# Synchronous test double for the RetroAchievements HTTP transport. +# +# Designed to match Teek::BackgroundWork's fluent interface so it can be +# injected without any branching in ra_request — the same code path runs +# in production and tests. +# +# Usage: +# req = FakeRequester.new +# req.stub(r: "login2", body: { "Success" => true, "Token" => "tok" }) +# req.stub(r: "gameid", body: { "GameID" => 42 }) +# +# backend = Backend.new(app: nil, runtime: FakeRARuntime.new, requester: req) +# backend.login_with_token(username: "u", token: "t") +# assert backend.authenticated? +# assert req.requested?("login2") +class FakeRequester + # Returned by call() — mirrors BackgroundWork's fluent on_progress/on_done chain. + # on_progress fires synchronously with the canned result so callers behave + # identically to the async production path without needing an event loop. + class Result + def initialize(value) + @value = value + end + + def on_progress(&block) + block.call(@value) + self + end + + def on_done(&block) + self + end + end + + attr_reader :requests + + def initialize + @stubs = {} # r_string => [json_or_nil, ok_bool] + @requests = [] # all params hashes, in call order + end + + # Register a canned response for a given r= value. + def stub(r:, body: nil, ok: true) + @stubs[r.to_s] = [body, ok] + end + + # Called by ra_request with the same signature as Teek::BackgroundWork.new. + # Ignores the block (which contains real Net::HTTP code) and returns a + # Result that fires on_progress synchronously with the canned response. + def call(_app, params, mode: nil, **_opts, &_block) + @requests << params.dup + r = (params[:r] || params["r"]).to_s + result = @stubs.fetch(r, [nil, false]) + Result.new(result) + end + + # True if at least one request with the given r= value was made. + def requested?(r) + @requests.any? { |p| (p[:r] || p["r"]).to_s == r.to_s } + end + + # All params hashes for requests with the given r= value. + def requests_for(r) + @requests.select { |p| (p[:r] || p["r"]).to_s == r.to_s } + end +end diff --git a/test/test_config.rb b/test/test_config.rb index 151cccc..80a9200 100644 --- a/test/test_config.rb +++ b/test/test_config.rb @@ -746,7 +746,7 @@ def test_reload_with_active_game def test_per_game_settings_constant_keys expected = %w[scale pixel_filter integer_scale color_correction frame_blending - volume muted turbo_speed quick_save_slot save_state_backup] + volume muted turbo_speed quick_save_slot save_state_backup ra_rich_presence] assert_equal expected.sort, Gemba::Config::PER_GAME_SETTINGS.keys.sort end diff --git a/test/test_ra_backend.rb b/test/test_ra_backend.rb new file mode 100644 index 0000000..d62c6dc --- /dev/null +++ b/test/test_ra_backend.rb @@ -0,0 +1,313 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "gemba/headless" +require_relative "support/fake_ra_runtime" +require_relative "support/fake_requester" +require_relative "support/fake_core" + +PATCH_RESPONSE = { + "PatchData" => { + "RichPresencePatch" => "", + "Achievements" => [ + { "ID" => 101, "Title" => "First Blood", "Description" => "Get a kill", + "Points" => 5, "MemAddr" => "0=1", "Flags" => 3 }, + { "ID" => 102, "Title" => "Survivor", "Description" => "Survive 60s", + "Points" => 10, "MemAddr" => "1=1", "Flags" => 3 }, + ], + }, +}.freeze + +# Tests for Gemba::Achievements::RetroAchievements::Backend. +# +# FakeRequester replaces BackgroundWork so all HTTP callbacks fire synchronously +# in-process — no Tk event loop, no subprocesses, no wait_until. +class TestRABackend < Minitest::Test + Backend = Gemba::Achievements::RetroAchievements::Backend + + def setup + @rt = FakeRARuntime.new + @req = FakeRequester.new + @b = Backend.new(app: nil, runtime: @rt, requester: @req) + end + + # Authenticate @b via the real login_with_token path. + def login(username: "user", token: "tok") + @req.stub(r: "login2", body: { "Success" => true }) + @b.login_with_token(username: username, token: token) + end + + # Drive the full gameid→patch→unlocks chain. + def load_game(earned_ids: [], patch: PATCH_RESPONSE) + @req.stub(r: "gameid", body: { "GameID" => 42 }) + @req.stub(r: "patch", body: patch) + @req.stub(r: "unlocks", body: { "Success" => true, "UserUnlocks" => earned_ids }) + Dir.mktmpdir do |dir| + rom = File.join(dir, "test.gba") + File.write(rom, "FAKEGBAROM") + @b.load_game(nil, rom, "deadbeef" * 4) + end + end + + # --------------------------------------------------------------------------- + # Initial state + # --------------------------------------------------------------------------- + + def test_not_authenticated_by_default + refute @b.authenticated? + end + + def test_enabled + assert @b.enabled? + end + + def test_achievement_list_empty_before_game_load + assert_empty @b.achievement_list + end + + def test_rich_presence_message_nil_initially + assert_nil @b.rich_presence_message + end + + # --------------------------------------------------------------------------- + # Authentication + # --------------------------------------------------------------------------- + + def test_login_with_password_success + @req.stub(r: "login2", body: { "Success" => true, "Token" => "tok123" }) + result = nil + @b.on_auth_change { |status, payload| result = [status, payload] } + @b.login_with_password(username: "user", password: "hunter2") + + assert_equal :ok, result[0] + assert_equal "tok123", result[1] + assert @b.authenticated? + end + + def test_login_with_password_failure + @req.stub(r: "login2", body: { "Success" => false, "Error" => "Invalid credentials" }) + result = nil + @b.on_auth_change { |status, msg| result = [status, msg] } + @b.login_with_password(username: "user", password: "wrong") + + assert_equal :error, result[0] + assert_match(/invalid credentials/i, result[1]) + refute @b.authenticated? + end + + def test_login_with_token_success + result = nil + @b.on_auth_change { |status, _| result = status } + login + assert_equal :ok, result + assert @b.authenticated? + end + + def test_login_with_token_failure + @req.stub(r: "login2", body: { "Success" => false, "Error" => "Token invalid" }) + result = nil + @b.on_auth_change { |status, msg| result = [status, msg] } + @b.login_with_token(username: "user", token: "bad") + + assert_equal :error, result[0] + refute @b.authenticated? + end + + def test_token_test_success + login + result = nil + @b.on_auth_change { |status, _| result = status } + @b.token_test + assert_equal :ok, result + end + + def test_token_test_failure + login + @req.stub(r: "login2", body: { "Success" => false, "Error" => "Token invalid" }) + result = nil + @b.on_auth_change { |status, _| result = status } + @b.token_test + assert_equal :error, result + refute @b.authenticated? + end + + def test_logout_clears_auth_state + login + @b.logout + refute @b.authenticated? + assert_empty @b.achievement_list + end + + # --------------------------------------------------------------------------- + # Game load chain + # --------------------------------------------------------------------------- + + def test_load_game_skipped_when_not_authenticated + load_game + assert_empty @b.achievement_list + refute @req.requested?("gameid"), "should not hit network when unauthenticated" + end + + def test_load_game_populates_achievement_list + login + load_game + + assert_equal 2, @b.total_count + assert_equal "101", @b.achievement_list[0].id + assert_equal "102", @b.achievement_list[1].id + assert_equal 2, @rt.count + end + + def test_load_game_marks_preearned_achievements + login + load_game(earned_ids: [101]) + + list = @b.achievement_list + assert list.find { |a| a.id == "101" }&.earned?, "101 should be earned" + refute list.find { |a| a.id == "102" }&.earned?, "102 should not be earned" + assert_includes @rt.deactivated, "101" + end + + def test_load_game_aborts_when_game_id_zero + login + @req.stub(r: "gameid", body: { "GameID" => 0 }) + Dir.mktmpdir do |dir| + rom = File.join(dir, "test.gba") + File.write(rom, "FAKE") + @b.load_game(nil, rom, "deadbeef" * 4) + end + + assert_empty @b.achievement_list + refute @req.requested?("patch"), "patch must not be requested when GameID is 0" + end + + def test_load_game_activates_rich_presence_script + rp_patch = PATCH_RESPONSE.merge( + "PatchData" => PATCH_RESPONSE["PatchData"].merge("RichPresencePatch" => "Display: Hello") + ) + login + load_game(patch: rp_patch) + + assert_equal "Display: Hello", @rt.rp_script + end + + def test_unload_game_clears_achievement_list + login + load_game + @b.unload_game + assert_empty @b.achievement_list + end + + def test_sync_unlocks_repopulates_list + login + load_game + + # Re-stub for the sync re-fetch + @req.stub(r: "patch", body: PATCH_RESPONSE) + @req.stub(r: "unlocks", body: { "Success" => true, "UserUnlocks" => [102] }) + @b.sync_unlocks + + list = @b.achievement_list + refute list.find { |a| a.id == "101" }&.earned? + assert list.find { |a| a.id == "102" }&.earned? + end + + # --------------------------------------------------------------------------- + # do_frame + # --------------------------------------------------------------------------- + + def test_do_frame_silent_before_game_loaded + unlocked = [] + @b.on_unlock { |a| unlocked << a } + @b.do_frame(FakeCore.new) + assert_empty unlocked + end + + def test_do_frame_fires_unlock_and_submits_to_server + login + load_game + + @req.stub(r: "awardachievement", body: { "Success" => true }) + @rt.queue_triggers("101") + + unlocked = [] + @b.on_unlock { |a| unlocked << a } + @b.do_frame(FakeCore.new) + + assert_equal 1, unlocked.size + assert_equal "101", unlocked.first.id + assert @req.requested?("awardachievement") + assert_equal "101", @req.requests_for("awardachievement").first[:a].to_s + end + + def test_do_frame_skips_already_earned_achievement + login + load_game(earned_ids: [101]) + + @rt.queue_triggers("101") + unlocked = [] + @b.on_unlock { |a| unlocked << a } + @b.do_frame(FakeCore.new) + + assert_empty unlocked, "already-earned achievement must not fire again" + refute @req.requested?("awardachievement") + end + + def test_do_frame_rich_presence_fires_callback_when_enabled + login + load_game + + @rt.rp_message = "Playing Stage 1" + @b.rich_presence_enabled = true + @b.instance_variable_set(:@rp_eval_frame, 239) + + fired = [] + @b.on_rich_presence_changed { |m| fired << m } + @b.do_frame(FakeCore.new) + + assert_equal ["Playing Stage 1"], fired + assert_equal "Playing Stage 1", @b.rich_presence_message + end + + def test_do_frame_rich_presence_silent_when_disabled + login + load_game + + @rt.rp_message = "Playing Stage 1" + @b.rich_presence_enabled = false + @b.instance_variable_set(:@rp_eval_frame, 239) + + fired = [] + @b.on_rich_presence_changed { |m| fired << m } + @b.do_frame(FakeCore.new) + + assert_empty fired + end + + # --------------------------------------------------------------------------- + # FakeRARuntime self-tests + # --------------------------------------------------------------------------- + + def test_fake_runtime_activate_deactivate + @rt.activate("101", "0=1") + @rt.activate("102", "1=1") + assert_equal 2, @rt.count + @rt.deactivate("101") + assert_equal 1, @rt.count + refute @rt.activated.key?("101") + end + + def test_fake_runtime_clear_resets_state + @rt.activate("101", "0=1") + @rt.queue_triggers("101") + @rt.clear + assert_equal 0, @rt.count + assert_empty @rt.do_frame(nil) + end + + def test_fake_runtime_queue_consumed_once + @rt.queue_triggers("101") + assert_equal ["101"], @rt.do_frame(nil) + assert_empty @rt.do_frame(nil) + end +end diff --git a/test/test_ra_backend_unlock_gate.rb b/test/test_ra_backend_unlock_gate.rb index b33b9dd..59616e8 100644 --- a/test/test_ra_backend_unlock_gate.rb +++ b/test/test_ra_backend_unlock_gate.rb @@ -5,7 +5,7 @@ require "gemba/achievements" require_relative "support/fake_core" -# Tests that RetroAchievementsBackend never awards achievements before the +# Tests that RetroAchievements::Backend never awards achievements before the # server's earned list is known. # # The bug scenario: @@ -21,7 +21,7 @@ # underlying runtime would report. class TestRABackendUnlockGate < Minitest::Test def setup - @backend = Gemba::Achievements::RetroAchievementsBackend.new(app: nil) + @backend = Gemba::Achievements::RetroAchievements::Backend.new(app: nil) @unlocked = [] @backend.on_unlock { |ach| @unlocked << ach } @core = FakeCore.new From 5452794d8aaf993704790bfd72284fb6026676f1 Mon Sep 17 00:00:00 2001 From: James Cook Date: Fri, 20 Feb 2026 23:46:22 -0600 Subject: [PATCH 3/9] Update notices and windows ci --- .github/workflows/windows-test.yml | 3 +++ THIRD_PARTY_NOTICES | 39 ++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/.github/workflows/windows-test.yml b/.github/workflows/windows-test.yml index c6cf07f..f4a6806 100644 --- a/.github/workflows/windows-test.yml +++ b/.github/workflows/windows-test.yml @@ -19,6 +19,9 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 + with: + submodules: true + shallow-submodules: true - name: Set up Ruby uses: ruby/setup-ruby@v1 diff --git a/THIRD_PARTY_NOTICES b/THIRD_PARTY_NOTICES index 6126c02..ff59e08 100644 --- a/THIRD_PARTY_NOTICES +++ b/THIRD_PARTY_NOTICES @@ -1,5 +1,40 @@ -gemba bundles the following third-party fonts in the assets/ directory. -Both are licensed under the SIL Open Font License, Version 1.1. +gemba bundles the following third-party libraries and fonts. + +================================================================================ +rcheevos +================================================================================ + +Copyright (c) 2018 RetroAchievements.org +https://github.com/RetroAchievements/rcheevos + +Licensed under the MIT License. + +Used for: RetroAchievements runtime — achievement condition evaluation, +Rich Presence string evaluation, and rcheevos network protocol helpers. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +================================================================================ +Fonts (assets/ directory) +================================================================================ + +Both fonts below are licensed under the SIL Open Font License, Version 1.1. ================================================================================ JetBrains Mono NL From 979be3b78d116408423b788cd881301845aabfda Mon Sep 17 00:00:00 2001 From: James Cook Date: Sat, 21 Feb 2026 05:17:35 -0600 Subject: [PATCH 4/9] Update actions/checkout --- .github/workflows/dep-check.yml | 2 +- .github/workflows/docs.yml | 2 +- .github/workflows/smoke.yml | 2 +- .github/workflows/test.yml | 4 ++-- .github/workflows/windows-test.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dep-check.yml b/.github/workflows/dep-check.yml index ab4c26a..4a4ef9d 100644 --- a/.github/workflows/dep-check.yml +++ b/.github/workflows/dep-check.yml @@ -10,7 +10,7 @@ jobs: name: Check mGBA version runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Check for new mGBA release run: | diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a9df05b..71f8147 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -19,7 +19,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Fetch coverage data run: | diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 472b74d..3d14971 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -8,7 +8,7 @@ jobs: name: smoke test runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: true shallow-submodules: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 59c3d04..2b0d456 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: matrix: ruby: ['4.0'] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: true shallow-submodules: true @@ -109,7 +109,7 @@ jobs: matrix: ruby: ['4.0'] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: true shallow-submodules: true diff --git a/.github/workflows/windows-test.yml b/.github/workflows/windows-test.yml index f4a6806..1437906 100644 --- a/.github/workflows/windows-test.yml +++ b/.github/workflows/windows-test.yml @@ -18,7 +18,7 @@ jobs: name: test (ruby ${{ github.event.inputs.ruby_version }}, Windows) runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: true shallow-submodules: true From 443722f1d1c309cdf1e8683f692dc16505d90cca Mon Sep 17 00:00:00 2001 From: James Cook Date: Sat, 21 Feb 2026 05:24:07 -0600 Subject: [PATCH 5/9] Fix loading save state when paused to render a frame --- lib/gemba/emulator_frame.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/gemba/emulator_frame.rb b/lib/gemba/emulator_frame.rb index 1ca8bf4..ae5abff 100644 --- a/lib/gemba/emulator_frame.rb +++ b/lib/gemba/emulator_frame.rb @@ -440,6 +440,7 @@ def load_state(slot) if ok Gemba.log(:info) { "save state loaded (slot #{slot}) — resetting achievement runtime" } @achievement_backend.reset_runtime + render_clean_if_paused end end @@ -457,6 +458,7 @@ def quick_load if ok Gemba.log(:info) { "quick save state loaded — resetting achievement runtime" } @achievement_backend.reset_runtime + render_clean_if_paused end end @@ -925,6 +927,16 @@ def render_if_paused render_frame if @paused && @core && @texture end + # Like render_if_paused but suppresses frame blending for one frame. + # Used after state loads: mGBA's previous-frame buffer is stale, so blending + # would show a mix of the pre-load frame and the saved state frame. + def render_clean_if_paused + return unless @paused && @core && @texture + @core.frame_blending = false if @frame_blending + render_frame + @core.frame_blending = true if @frame_blending + end + def compute_dest_rect return nil unless @keep_aspect_ratio From c4b79864149def085b43b7a925be0d9df8251df8 Mon Sep 17 00:00:00 2001 From: James Cook Date: Sat, 21 Feb 2026 06:25:50 -0600 Subject: [PATCH 6/9] Clean up CLI code --- docs_site/_includes/nav.html | 534 ++++++++++- docs_site/_includes/stats.html | 8 +- docs_site/assets/js/search-data.json | 826 ++++++++++++++++-- lib/gemba/achievements/backend.rb | 2 +- .../retro_achievements/cli_sync_requester.rb | 64 ++ lib/gemba/cli.rb | 712 +-------------- lib/gemba/cli/commands/config_cmd.rb | 83 ++ lib/gemba/cli/commands/decode.rb | 154 ++++ lib/gemba/cli/commands/patch.rb | 78 ++ lib/gemba/cli/commands/play.rb | 78 ++ lib/gemba/cli/commands/record.rb | 114 +++ lib/gemba/cli/commands/replay.rb | 161 ++++ lib/gemba/cli/commands/retro_achievements.rb | 213 +++++ lib/gemba/cli/commands/version.rb | 22 + lib/gemba/runtime.rb | 1 + test/test_cli.rb | 458 ---------- test/test_cli_config.rb | 64 ++ test/test_cli_decode.rb | 97 ++ test/test_cli_patch.rb | 58 ++ test/test_cli_play.rb | 213 +++++ test/test_cli_ra.rb | 175 ++++ test/test_cli_record.rb | 69 ++ test/test_cli_replay.rb | 72 ++ test/test_cli_sync_requester.rb | 152 ++++ test/test_cli_version.rb | 27 + 25 files changed, 3192 insertions(+), 1243 deletions(-) create mode 100644 lib/gemba/achievements/retro_achievements/cli_sync_requester.rb create mode 100644 lib/gemba/cli/commands/config_cmd.rb create mode 100644 lib/gemba/cli/commands/decode.rb create mode 100644 lib/gemba/cli/commands/patch.rb create mode 100644 lib/gemba/cli/commands/play.rb create mode 100644 lib/gemba/cli/commands/record.rb create mode 100644 lib/gemba/cli/commands/replay.rb create mode 100644 lib/gemba/cli/commands/retro_achievements.rb create mode 100644 lib/gemba/cli/commands/version.rb create mode 100644 test/test_cli_config.rb create mode 100644 test/test_cli_decode.rb create mode 100644 test/test_cli_patch.rb create mode 100644 test/test_cli_play.rb create mode 100644 test/test_cli_ra.rb create mode 100644 test/test_cli_record.rb create mode 100644 test/test_cli_replay.rb create mode 100644 test/test_cli_sync_requester.rb create mode 100644 test/test_cli_version.rb diff --git a/docs_site/_includes/nav.html b/docs_site/_includes/nav.html index d500490..9e3337d 100644 --- a/docs_site/_includes/nav.html +++ b/docs_site/_includes/nav.html @@ -19,12 +19,126 @@