Pokeballs in Super Smash Bros

Matt Dray (@mattdray)

Super Smash Bros for N64


Super Smash Bros (SSB) is a beat ’em up videogame series featuring characters from various Nintendo franchises and beyond.

The series has featured on Nintendo 64 (Super Smash Bros, 1998), Gamecube (SSB Melee, 2001), Wii (SSB Brawl, 2008), Wii U and 3DS (SSB ‘4’, 2014) and an upcoming title for the Switch console.

The game is popular enough to have resulted in a series of organised tournaments1.

You can fight characters directly but you can also make use of items and weapons from games across the Nintendo universe, such as the mushroom (the Super Mario series), the heart container (Zelda) and the home run bat (EarthBound).

One of the more interesting items in SSB is the pokeball. This item is used in the Pokemon series of games to capture and store Pokemon. When a player picks up and throws a pokeball in SSB, it opens to release 1 of a possible 13 Pokemon. The SSB wiki says that all of them are ‘common’, except for ‘uncommon’ Snorlax and ‘rare’ Mew (apparently only once every 151 releases, which is related to the number of Pokemon in the original game).

So how frequently in practice does each Pokemon emerge from a pokeball in SSB on N64?

This is a short post to sate my curiosity. I’ve used R code throughout. The post will update as I gather more data.


I’m a recovering ecologist, so data collection by observation is very important to me. I watched four computer-controlled players face-off in versus mode (it’s a weekend and I’m old enough to do whatever I want (after I’ve done my chores)). Pokeballs were the only items set to ‘on’ and frequency was set to ‘very high’. I saved the file as a CSV on GitHub.

# load packages
library(dplyr)  # data manipulation
library(readr)  # reading files

# read data from github 
balls <- read_csv(
) %>% 
  mutate(pokemon = tools::toTitleCase(pokemon))  # start names with caps

# preview 25 random observations
sample_n(balls, 25) %>%  # sample of 25
  pull()  # column to vector
##  [1] "Clefairy"  "Starmie"   "Snorlax"   "Starmie"   "Chansey"  
##  [6] "Starmie"   "Koffing"   "Onix"      "Snorlax"   "Beedrill" 
## [11] "Snorlax"   "Hitmonlee" "Koffing"   "Goldeen"   "Blastoise"
## [16] "Beedrill"  "Beedrill"  "Goldeen"   "Snorlax"   "Goldeen"  
## [21] "Hitmonlee" "Starmie"   "Onix"      "Charizard" "Chansey"



We can make use of the tabyl() function from the janitor package.


balls_summary <- balls %>%
  tabyl(pokemon) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent * 100, 1)) %>% 
  rename(Pokemon = pokemon, Count = n, Percent = percent)
Pokemon Count Percent
Beedrill 26 9.0
Chansey 26 9.0
Goldeen 26 9.0
Snorlax 26 9.0
Blastoise 25 8.6
Hitmonlee 25 8.6
Onix 25 8.6
Koffing 24 8.3
Charizard 23 7.9
Starmie 23 7.9
Meowth 20 6.9
Clefairy 18 6.2
Mew 3 1.0


Of course we can plot these data a well. It seems fitting to have a Pokemon theme, so we can use the gghealth() function from the Rokemon package by David Schoch. This creates a bar chart where the bars look like the health point (HP) meter from the original Pokemon games on the Nintendo Game Boy.2

library(ggplot2)  # plots
library(Rokemon)  # poke-themed package

balls %>% 
  group_by(pokemon) %>% 
  count() %>% 
  gghealth("pokemon", "n") +
    x = "", y = "Count",
    title = "Pokeball release frequencies",
    subtitle = "Super Smash Bros on Nintendo 64"


So it looks like the ‘common’ Pokemon according to the SSB wiki are indeed more common, though Snorlax appears equal first on this list, despite being labelled as ‘uncommon’. Clefairy also appeared less than expected, given it was labelled as ‘common’.

Mew appeared 3 times out of 290, which is once every 96.7 releases; less than the once every 151 releases I mentioned above.

Bear in mind that this is only based on a sample of 290 so far . I’ll keep collecting data to update this post.

Gratuitous shot of my coveted Pokemon Stadium special-edition N64 playing SSB

Special edition Nintendo 64 playing Super Smash Bros

Special edition Nintendo 64 playing Super Smash Bros

R session information

Session info

## [1] "Last updated 2019-04-15"
## R version 3.5.3 (2019-03-11)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Mojave 10.14.1
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
## locale:
## [1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## other attached packages:
## [1] Rokemon_0.0.1  ggplot2_3.1.0  janitor_1.0.0  readr_1.3.1   
## [5] dplyr_0.8.0.1  emo_0.0.0.9000
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.0       plyr_1.8.4       pillar_1.3.1     compiler_3.5.3  
##  [5] highr_0.7        tools_3.5.3      extrafont_0.17   digest_0.6.18   
##  [9] lubridate_1.7.4  evaluate_0.13    tibble_2.0.1     gtable_0.2.0    
## [13] pkgconfig_2.0.2  rlang_0.3.1      rstudioapi_0.10  curl_3.3        
## [17] yaml_2.2.0       blogdown_0.7     xfun_0.5         Rttf2pt1_1.3.7  
## [21] withr_2.1.2      stringr_1.4.0    knitr_1.22       hms_0.4.2       
## [25] grid_3.5.3       tidyselect_0.2.5 glue_1.3.0       R6_2.4.0        
## [29] rmarkdown_1.11   bookdown_0.7     extrafontdb_1.0  purrr_0.3.1     
## [33] tidyr_0.8.3      magrittr_1.5     scales_1.0.0     htmltools_0.3.6 
## [37] assertthat_0.2.0 colorspace_1.4-0 labeling_0.3     stringi_1.3.1   
## [41] lazyeval_0.2.1   munsell_0.5.0    crayon_1.3.4

  1. I recommend you watch the indie documentary on YouTube about the rise of SSB Melee tournaments.

  2. Also check out the geom_pokemon() function in the ggimage package by Guangchuang Yu, which plots points as Pokemon sprites.