Pokéballs in Super Smash Bros

r
videogames
Author
Published

May 19, 2018

A Nintendo 64 console with the Super Msash Bros cartridge plugged in. The console is a Pokémon Stadium special edition. The upper half is blue, the bottom yellow. The Pokémon logo is on the left on the top of the console and several 3D renderings of Pokémon on the right.

My special edition Nintendo 64 playing Super Smash Bros.

tl;dr

Pokémon emerge at different rates from the pokéball item in Super Smash Bros (N64). Also {Rokemon} can make fun Pokémon-themed plots.

Smash!

Super Smash Bros (SSB) is a series of beat ’em up videogames featuring characters from various Nintendo franchises and beyond. The twist is that your health doesn’t deplete; instead you build damage so that subsequent hits knock you back further.

The series first featured on Nintendo 64 (Super Smash Bros, 1998).

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 pokéball. This item is used in the Pokémon series of games to capture and store Pokémon. When a player picks up and throws a pokéball in SSB, it opens to release 1 of a possible 13 Pokémon. 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 Pokémon in the original game).

So how frequently in practice does each Pokémon emerge from a pokéball 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.

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)). Pokéballs were the only items set to ‘on’ and frequency was set to ‘very high’. I saved the file as a CSV on GitHub.

library(dplyr, warn.conflicts = FALSE)
library(readr)

csv_path <-
  "https://raw.githubusercontent.com/matt-dray/draytasets/master/ssb_pokeballs.csv"

balls <- read_csv(csv_path, show_col_types = FALSE) %>% 
  mutate(pokemon = tools::toTitleCase(pokemon))

balls %>% sample_n(25) %>% pull()
 [1] "Hitmonlee" "Hitmonlee" "Chansey"   "Beedrill"  "Charizard" "Chansey"  
 [7] "Beedrill"  "Koffing"   "Hitmonlee" "Hitmonlee" "Starmie"   "Beedrill" 
[13] "Onix"      "Chansey"   "Snorlax"   "Clefairy"  "Blastoise" "Starmie"  
[19] "Charizard" "Snorlax"   "Charizard" "Koffing"   "Clefairy"  "Starmie"  
[25] "Snorlax"  

Frequencies

Let’s take a look at some very basic presentation of the data.

First, We can make use of the tabyl() function from the {janitor} package to get the count and percentage of each Pokémon.

library(janitor, warn.conflicts = FALSE)

balls_summary <- balls %>%
  tabyl(pokemon) %>% 
  arrange(desc(n)) %>% 
  mutate(Percent = round(percent * 100, 1)) %>% 
  select(Pokemon = pokemon, Count = n, Percent)
  
knitr::kable(balls_summary)
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 Pokémon 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 Pokémon games on the Nintendo Game Boy.1

library(ggplot2)
library(Rokemon)  # remotes::install_github("schochastics/Rokemon")

{Rokemon} has a function that imports the Pokémon font to use in its plots. Run import_pokefont() to install the pokemon-font.ttf font file to your machine. The path will be printed in your console. I’m running macOS, so I can copy this file into Font Book to make it available for use.

And now we can plot.

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

Bar plot of the number of appearances by Pokémon from the pokéball item in Super Smash Bros for the N64. Snorlax, Goldeen Chansey and Beedrill are most common. Mew is least common. The chart is themed with elements from the original Pokémon game on the Game Boy, including health bars and font.

Revelation

So it looks like the ‘common’ Pokémon 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 might collect more data at a later point.

I hope this inside information will help you win your next Smash tournament. You are welcome.

Environment

Session info
Last rendered: 2023-08-09 09:28:16 BST
R version 4.3.1 (2023-06-16)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.2.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Europe/London
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] Rokemon_0.0.1 ggplot2_3.4.2 janitor_2.2.0 readr_2.1.4   dplyr_1.1.2  

loaded via a namespace (and not attached):
 [1] utf8_1.2.3        generics_0.1.3    tidyr_1.3.0       stringi_1.7.12   
 [5] extrafontdb_1.0   hms_1.1.3         digest_0.6.33     magrittr_2.0.3   
 [9] evaluate_0.21     grid_4.3.1        timechange_0.2.0  fastmap_1.1.1    
[13] jsonlite_1.8.7    purrr_1.0.1       fansi_1.0.4       scales_1.2.1     
[17] cli_3.6.1         rlang_1.1.1       crayon_1.5.2      bit64_4.0.5      
[21] munsell_0.5.0     withr_2.5.0       yaml_2.3.7        tools_4.3.1      
[25] parallel_4.3.1    tzdb_0.4.0        colorspace_2.1-0  curl_5.0.1       
[29] vctrs_0.6.3       R6_2.5.1          lifecycle_1.0.3   lubridate_1.9.2  
[33] snakecase_0.11.0  stringr_1.5.0     htmlwidgets_1.6.2 bit_4.0.5        
[37] vroom_1.6.3       pkgconfig_2.0.3   pillar_1.9.0      gtable_0.3.3     
[41] glue_1.6.2        xfun_0.39         tibble_3.2.1      tidyselect_1.2.0 
[45] rstudioapi_0.15.0 knitr_1.43.1      farver_2.1.1      extrafont_0.19   
[49] htmltools_0.5.5   labeling_0.4.2    rmarkdown_2.23    Rttf2pt1_1.3.12  
[53] compiler_4.3.1   

Footnotes

  1. Also check out the geom_pokemon() function in the ggimage package by Guangchuang Yu, which plots points as Pokémon sprites.↩︎

Reuse

CC BY-NC-SA 4.0