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.