TLDR

Here is a list of Nintendo DS games of high quality and as of June 2020 can be had at a good value:

  1. Mario Kart DS
  2. Mario & Luigi: Bowser’s Inside Story
  3. Legend of Zelda: Phantom Hourglass
  4. Meteos
  5. Planet Puzzle League
  6. The World Ends with You
  7. New Super Mario Bros
  8. Advance Wars: Days of Ruin
  9. Mario & Luigi: Partners in Time
  10. Elite Beat Agents
  11. Professor Layton and the Curious Village
  12. Professor Layton and the Unwound Future
  13. Kirby: Canvas Curse
  14. Final Fantasy IV
  15. Super Mario 64 DS
  16. Animal Crossing: Wild World

Background

I’m a patient gamer. I’m currently playing games in the Wii, Game Boy Advance, Nintendo DS, and Nintendo 3DS generations. I’m not smug about this, I just fell behind modern gaming around 2005 and have never really recovered.

As video game platforms are discontinued and are no longer available in retail stores, prices in secondary markets hit bottom. There is a price valley that trails a platform being discontinued which can last 1-3 years. After this valley/trough, prices begin to rise due to collectibility. Games tend to become more scarce the longer it has been since production concluded, further driving up prices.

As of June 2020, it seems likely we are at the bottom of the Nintendo DS market as a whole before the library becomes more collectible, more scarce, and thus more expensive in coming years (as we’ll see, there are already Nintendo DS games which are highly collectible and expensive, but I’ll be ignoring them because there is little value due to their already high price.)

I want to buy games now at cheaper price so I can play them when I get the time. Instead of waiting until I have the time and then buying them when their price will likely be higher.

Market Overview

Here is an overview of the 296 Nintendo DS games rated 70 or above by Metacritic (minimum 7 reviews) and the price to buy the game loose (no box or manual), used on secondary markets according to Video Game Price Charts. This gives a sense of the overall shape of Nintendo DS loose cartridge market, ignoring mediocre and low quality games.

  • Avg Price: $14.56
  • Median Price: $10.12
  • Avg Score: 77.3
  • Median Score: 76.5

Prices accurate as of June 9, 2020.

price & rating 70-74pts 75-79pts 80-84pts 85-89pts 90-94pts Total
$75.00-124.99 1 2 3
$50.00-74.99 1 5 6
$45.00-49.99 1 2 3
$40.00-44.99 1 1 1 3
$35.00-39.99 1 2 1 1 5
$30.00-34.99 3 1 3 7
$25.00-29.99 3 1 1 1 6
$20.00-24.99 7 7 6 1 2 23
$15.00-19.99 11 12 11 6 1 41
$10.00-14.99 18 19 11 5 2 55
$05.00-9.99 34 30 23 6 93
$00.00-4.99 30 16 5 51
Total 107 91 64 28 6 296

Top Values

Within the table above, we can dig into specific pockets/cells to find the top values: the highest quality games for the most affordable prices.

Games with Metascores of 85+, Under $20

price & rating 85-89pts 90-94pts
$15.00-19.99 Advance Wars: Days of Ruin The Legend of Zelda: Phantom Hourglass
Kirby: Canvas Curse
Mario & Luigi: Partners in Time
Animal Crossing: Wild World
Final Fantasy IV
Super Mario 64 DS
$10.00-14.99 New Super Mario Bros. Mario Kart DS
The World Ends with You Mario & Luigi: Bowser’s Inside Story
Might & Magic: Clash of Heroes
Professor Layton and the Unwound Future
Radiant Historia
$5.00-9.99 Meteos
Elite Beat Agents
Planet Puzzle League
Metroid Prime: Hunters
Space Invaders Extreme
Professor Layton and the Curious Village

23 games $5-$9.99, rated 80-84

If we widen the net just slightly to include games rated 80-84 there are a number of valuable games across several genres.

  • Peggle: Dual Shot
  • Professor Layton and the Diabolical Box
  • Tony Hawk’s American Sk8land
  • Picross 3D
  • Ninja Gaiden: Dragon Sword
  • Picross DS
  • Nintendogs: Chihuahua & Friends
  • Nintendogs: Lab & Friends
  • Nintendogs: Dachshund & Friends
  • Nintendogs: Dalmatian & Friends
  • Puzzle Quest: Challenge of the Warlords
  • N+
  • WarioWare D.I.Y.
  • Henry Hatsworth in the Puzzling Adventure
  • Tiger Woods PGA Tour 08
  • Worms: Open Warfare 2
  • Plants vs. Zombies
  • Trauma Center: Under the Knife
  • Lock’s Quest
  • LEGO Star Wars: The Complete Saga
  • Sid Meier’s Civilization Revolution
  • Ninjatown
  • Age of Empires: The Age of Kings

Five Games rated 80-84, Under $5 (no games rated over 84 under $5)

Finally we can scrape the bargain bin for a few games which might be worth playing at deep discounts.

  • Bleach: The Blade of Fate
  • Personal Trainer: Cooking
  • Super Scribblenauts
  • LEGO Rock Band
  • LEGO Indiana Jones: The Original Adventures

Methodology

  • Browse a metacritic page of results like: All-Time Nintendo DS Reviews
  • Open developer tools > Console
  • Paste the javascript into the console prompt
  • Execute the javascript
  • the exported json is now in your clipboard. paste the json into a file and save.

Notes

  • You can get 100 results per page so it isn’t too bad doing it this way.
  • My purposes were to export top reviews for discontinued video game platforms. This is a one time operation so I didn’t need further automation.
  • metacritic by default only shows games with 7 or more reviews. i left this limit in place in general.

Metacritic Browser Script

let items = Array.from(document.querySelectorAll('li.game_product div.product_wrap')).map((d) => {
  let url = d.children[0].children[0].href
  let extraData = d.children[2].innerText
  let extraDataItems = extraData.split('\n')
  let userScore = parseFloat(extraDataItems[0].replace('User: ', ''))
  let releaseDate
  let hardwareCompat = 'none'
  if (extraDataItems.length === 3) {
    releaseDate = extraDataItems[2]
    hardwareCompat = extraDataItems[1]
  } else {
    releaseDate = extraDataItems[1]
  }

  return {
    platform: (new URL(url)).pathname.split('/')[2],
    title: d.children[0].innerText,
    hardware_compatibility: hardwareCompat,
    link: url,
    metascore: parseInt(d.children[1].innerText, 10),
    user_score: userScore,
    release_date: releaseDate,
  }
})

copy(items)

Metacritic Workflow

get all of the individual page files using the script above.

then combine:

cat *.json | jq --slurp '. | flatten' > combined.json

count records by platform:

cat combined.json | jq '.[] .platform' | awk '{ FS="\n" count[$1]++}END{for(j in count) print j","count[j]}' | sort -t "," -k2 -nr
"xbox-360",900
"playstation-3",800
"playstation-2",800
"xbox",500
"ds",400
"wii",300
"GameCube",300
"Game Boy Advance",300
"3ds",300
"playstation",200
"wii-u",186
"nintendo-64",89

build final csv

cat combined.json | jq -r '.[] | [.platform, .title, .hardware_compatibility, .link, .metascore, .user_score, .release_date] | @csv' > all.csv

import the file into a google sheet for further analysis

Price Charting Script

  • browse the Nintendo DS price guide
  • sort all games alphabetically
  • continuously scroll to the bottom of the page to be sure all records are loaded
  • open developer tools > console
  • paste and execute the script below
  • paste the contents into a new file.
let items = Array.from(document.querySelectorAll('tr')).slice(1).map(i => {
  return {
    title: i.querySelector('td.title')?.innerText,
    loose_price: i.querySelector('td.used_price')?.innerText?.replace('$', '')
  }
})

copy(items)

Price Charting Workflow

get all of the individual system files, one per platform using the price charting script need to add platform column still

then combine:

cat *-pricing.json | jq --slurp '. | flatten' > combined-pricing.json

build final csv

cat nintendo-ds-prices.json | jq -r '.[] | [.title, .loose_price] | @csv' > nintendo-ds-prices.csv

Joining Datasets

I assigned an id to each game in price charting download. i used that id to map to the metacritic records. This allowed discretion to choose between particular variants, focusing on the least expensive way to acquire a game.