6 minutes
Nintendo DS Buying Guide
TLDR
Here is a list of Nintendo DS games of high quality and as of June 2020 can be had at a good value:
- Mario Kart DS
- Mario & Luigi: Bowser’s Inside Story
- Legend of Zelda: Phantom Hourglass
- Meteos
- Planet Puzzle League
- The World Ends with You
- New Super Mario Bros
- Advance Wars: Days of Ruin
- Mario & Luigi: Partners in Time
- Elite Beat Agents
- Professor Layton and the Curious Village
- Professor Layton and the Unwound Future
- Kirby: Canvas Curse
- Final Fantasy IV
- Super Mario 64 DS
- 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.