If you're reading this, it means that we've successfully completed a 2nd 96er, an event where we race all 96 maps available in mario kart 8 (48 standard + 48 DLC tracks).
This year we had 4 participants, Gabba, Sweeney, Noah and myself.
Race Set Up: 2 x 48 race multiplayer grand prix with Tracks in order. 200cc, Frantic Items, Hard CPU (the Mob).
The results were as follows:
| # | Track | Winner | Insights |
|---|---|---|---|
| 1 | Mario Kart Stadium | Gabba | |
| 2 | Water Park | Gabba | So many narnies |
| 3 | Sweet Sweet Canyon | Gabba | |
| 4 | Thwomp Ruins | Ben | |
| 5 | Mario Circuit | Sweeney | First consistent |
| 6 | Toad Harbour | Noah | |
| 7 | Twisted Mansion | Ben | 2 twisted |
| 8 | Shy Guy Falls | Gabba | First hundy |
| 9 | Sunshine Airport | Sweeney | First podium |
| 10 | Dolphin Shoals | Gabba | Ben 10th and Sweeney 11th |
| 11 | Electrodome | Sweeney | First outside - 'I live outside' |
| 12 | Mount Wario | Gabba | Sweeney pool time |
| 13 | Cloudtop Cruise | Sweeney | KC |
| 14 | Bone Dry dunes | Gabba | Podium |
| 15 | Bowsers Castle | Gabba | First 200ie |
| 16 | Rainbow Road | Gabba | |
| 17 | Moo Moo Meadows | Sweeney | |
| 18 | Mario Circuit | Gabba | Stupid narnie on the sean |
| 19 | Cheep Cheep Beach | Sweeney | Best map in the game |
| 20 | Toads Turnpike | Gabba | 2 200s - podium |
| 21 | Dry Dry desert | Link (First Mob) | |
| 22 | Donut Planes | Gabba | Mob |
| 23 | Royal Raceway | Gabba | The mob is awake |
| 24 | DK Jungle | Sweeney | Podium |
| 25 | Wario Stadium | Gabba | Podium |
| 26 | Sherbet Land | Gabba | |
| 27 | Melody Motorway | Gabba | |
| 28 | Yoshi Valley | Ben | * as didn't hit the cannon on the first lap |
| 29 | Tick Tock Clock | Sweeney | |
| 30 | Pirahna Plant Pipeway | Gabba | |
| 31 | Grumble Volcano | Sweeney | Link is on one |
| 32 | Rainbow Road | Sweeney | |
| 33 | Yoshi Circuit | Sweeney | First narnie snipe by Gabba |
| 34 | Excitebike arena | Sweeney | |
| 35 | Dragon Driftway | Gabba | |
| 36 | Mute City | Gabba | Link Widening the gap |
| 37 | Warios Gold Mine | Gabba | |
| 38 | Rainbow Road | Gabba | |
| 39 | Ice Ice Outpost | Gabba | |
| 40 | Hyrule Circuit | Link (Still First Mob) | All 4 players hit with single bomb |
| 41 | Baby Park | Noah | |
| 42 | Cheese Land | Gabba | |
| 43 | Wild Woods | Sweeney | |
| 44 | Animal Crossing (Summer) | Gabba | summer days |
| 45 | Koopa City | Gabba | shit map |
| 46 | Ribbon Road | Gabba | this map is inside |
| 47 | Super bell Subway | Gabba | Link with the steal from Noah |
| 48 | Big Blue | Ben | Last Race wins (first half) |
| 49 | Paris Promenade | Sweeney | |
| 50 | Toad Circuit | Sweeney | |
| 51 | Choco Mountain | Gabba | |
| 52 | Coconut Mall | Sweeney | Fendin off petey |
| 53 | Tokyo Blur | Sweeney | Noah Donut |
| 54 | Shroom Ridge | Gabba | Car got in the way of the sean |
| 55 | Sky Garden | Tanooki Mario (Mob) | First mob win of second half |
| 56 | Ninja Hideaway | Gabba | can a blue be sent backwards? |
| 57 | New York Minute | Petey Piranha (Mob) | sweeney though he had it |
| 58 | Mario Circuit 3 | Gabba | Podium |
| 59 | Kalamari Desert | Gabba | Sweeney 11th |
| 60 | Waluigi Pinball | Gabba | |
| 61 | Sydney Sprint | Tanooki Mario (Mob) | |
| 62 | Snowland | Gabba | |
| 63 | Mushroom Gorge | Petey Piranha (Mob) | |
| 64 | Sky-High Sundae | Gabba | Ben hit my the mob |
| 65 | London Loop | Gabba | |
| 66 | Boo Lake | Gabba | |
| 67 | Alpine Pass | Sweeney | Petey still hitting |
| 68 | Maple Treeway | Sweeney | |
| 69 | Berlin Byways | Gabba | |
| 70 | Peach Gardens | Sweeney | |
| 71 | Merry Mountain | Sweeney | The mob in force |
| 72 | Rainbow Road | Gabba | |
| 73 | Amsterdam Drift | Sweeney | |
| 74 | Riverside Park | Ben | Great map |
| 75 | DK's Snowboard Cross | Gabba | touche |
| 76 | Yoshi's Island | Sweeney | |
| 77 | Bangkok Rush | Gabba | |
| 78 | Mario Circuit | Sweeney | not many lightenings on the seans |
| 79 | Waluigi Stadium | Gabba | |
| 80 | Singapore Speedway | Sweeney | Bowser Junior with the 2nd swoop |
| 81 | Athens Dash | Gabba | |
| 82 | Daisy Cruiser | Gabba | Sweeney hit |
| 83 | Moonview Highway | Gabba | |
| 84 | Squeaky Clean Sprint | Gabba | |
| 85 | Los Angeles Laps | Gabba | he hate that |
| 86 | Sunset Wilds | Gabba | |
| 87 | Koopa Cape | Gabba | sweeney unfortunate red |
| 88 | Vancouver Velocity | Sweeney | |
| 89 | Rome Avanti | Ben | |
| 90 | DK Mountain | Sweeney | |
| 91 | Daisy Circuit | Gabba | |
| 92 | Piranha Plant Cove | Gabba | |
| 93 | Madrid Drive | Ben | |
| 94 | Rosalina's Ice World | Gabba | Podium |
| 95 | Bowser Castle 3 | Ben | and thats how it can happen |
| 96 | Rainbow Road | Sweeney | Last race wins |
The total wins by each player
Races 1 - 48
Races 49 - 96
Until Nintendo adds a 96 race grand prix, we are kind of stuck with this 2 x 48 analysis format, because as you may have noticed, drivers between the first and second 48 change. I completely understand why they haven't added this 96 race format, as this whole premise is kind of absurd.
This year, I wanted to see just what kind of data I could somewhat easily record and analyse from the 96er.
So, I thought that it would be a good start to take a photo of the scoreboard after every race (except the 2 I forgot, Cheep Cheep beach and Daisy Cruiser). From here, I was able to over engineer a solution to get the data from the photos into a format that I could analyse.
First, I did have to go through and manually name each of the 94 images I took with something resembling their track name. This took me about half an hour and turns out it wasn't really necessary, but it makes the input data a bit nicer so thats something.
Now that I had all of my 'TRACK_NAME.HEIC' image files:

It's time to send it to GPT to ask it to rip out the information I need. Unfortunately, as I was about to learn, GPT does not allow for processing of HEIC images:

so I had to write another script to convert the images from .HEIC to .PNGs.

which seems to have worked well:

Now that I can send the images to GPT to analyse, I had to cook up a prompt to get GPT to return the data in the format I wanted. I went for:
You are mario kart score GPT. Here is a photo of a mario kart scoreboard.
Can you please return this leaderboard as a JSON array of 12 items,
containing the player and score?
Please add a START and END string at the beginning and end of the JSON,
and do not add any formatting (new lines, tabs, etc).
I just needed to run this for all 94 of my newly converted PNGs and I should have all scoring data I need output to a single folder, and voila, it appears to run well:

Now that I have a folder full of the scores from each map, I can really cook.

First, I need to write a script that takes all of the JSON files, and extracts the greatest score value. This will help me sort the input data into a somewhat chronological order, which will be easier to plot along an x-axis.
But, here is where I hit another snag - as we did 2 x 48 races, I had 2 similar very score ranges. e.g, Mario Kart Stadium and Paris Promenade were the same values for max points score - and at the moment I didn't have a way to differentiate between which race was in the first 48 and which was the 2nd.

However, this is where I was able to repurpose the array I used in the table at the top of this screen. It's in the form:
const results = [
...
{
track: "Big Blue",
winner: "Ben",
insights: "Last Race wins (first half)",
},
...
]
So, if I just rip out the track name and remove the spaces - I should be able to match most of the track names to the score data file I have for that track. This initially worked pretty well, basically leaving only duplicate rainbow roads and the 2 maps I forgot to take photos of:

From here, I just had to add an index the rainbow road results array to match how I stored the photos of the Rainbow road scores:

here,
Once I factored this in, I was able to sort the race data I had from races 1-96 (except the 2 I forgot):

Once I had this, I just had to write this script
that outputs the track placing data (our .jsons) into a format that I could use to plot the data on a graph, e.g:
const results = [
{
track: 1,
"Donkey Kong": 15,
"Black Shy Guy": 12,
Bowser: 10,
Toadette: 9,
"Baby Daisy": 8,
Waluigi: 7,
Luigi: 6,
"Pink Gold Peach": 5,
"Tanooki Mario": 4,
"King Boo": 3,
Link: 2,
Kamek: 1,
},
{
track: 2,
"Donkey Kong": 30,
"Black Shy Guy": 21,
Waluigi: 19,
Toadette: 19,
Bowser: 17,
"Pink Gold Peach": 13,
"Baby Daisy": 13,
Luigi: 12,
"King Boo": 7,
Link: 5,
"Tanooki Mario": 5,
Kamek: 3,
},
...
]
And, that's how I got the above line graphs. I only budgeted 4 hours to this whole analysis and am already sick of looking at mario related data, so I'll leave it at that.
See you next time.