Mario Kart 7 modding - Happy 5 years anniversary!Sep 21, 2019
5 years ago the first ever Mario Kart 7 mod was posted in youtube. It was a simple modification of the game loading screen, but it started development of tools that the scene would use afterwards.
Note: While some game mods were already showing up in several places (chinese websites) during 2014, they were related to the gateway team. (please if you have more info about this prove me wrong!) This makes MK7 one of the first if not the first 3DS game to be modified!
In this blog, I'll be reviewing progress related to Mario Kart 7 modding from when it started until today. So let's start!
How it all started, the first ever MK7 hack
Youtube user MKGirlism (also known as Yami) posted a video on Spetember 20th, 2014 of the first proof of concept MK7 hack. It was a simple modification of the loading sceen where she tried to add her username to the top screen image and changed the order of the spinning wheel. At that point we didn't have any tools for bclim editing but that specific modification was possible because the images were in .bmp (with a very weird format, that's why they look corrupted).
You may be wondering, how was it possible at all if no CFW existed at that point? Well, a Mario Kart 7 development .cia file was leaked online and Yami had a Panda 3DS unit with DevMenu installed which allowed to install .cia files. After some research she was able to extract the .cia, modify the romfs, and build it again to be then installed in the Panda 3DS unit.
Progress, more complex MK7 hacks
It was at this point when the Mario Kart DS modding community (which Yami was part of) started researching the Mario Kart 7 file formats and tool development kicked off. This was possible thanks to the sample files provided by the development .cia. Gericom created Every File Explorer which allowed more complex Mario Kart 7 editing such as this bottom screen map swap (first ever SARC edit), custom music (first ever custom .bcstm) or collision editing (first ever .kcl edit). However as you can see, all of this modifications were very simple and weren't affecting the gameplay much until another breakthrough happened.
First ever custom track attempt!
Yami and Gericom finally managed to make a custom model (.bcmdl) and a new custom collision file (.kcl), so on October 18th 2014, the first ever custom track attempt was made. It lacked course information (.kmp) editing so it wasn't possible to drive around the course as the course boundaries were not changed. Kmp research started, some helper tools to ease hex editing of this file were made, however for some months no more proress related to custom tracks was made public.
Joining the MK7 modding community
It was at this point when I joined the MK7 modding scene. Since I was in the MKDS modding scene for 2 years already I was well aware of all the progress being made to MK7, however I couldn't help at all as at that time I didn't have any knowledge of coding nor I had a compatible 3DS to test stuff. (Fun fact, I bought a second hand 3DS for 40€ on firmware 1.0.0-0 in October thinking I could use gateway launcher in some way without the cart itself, but that wasn't possible as you needed the Gateway card to boot into GW model.) In november, Govanify leaked a private CFW which was later modified by Palantine. This CFW allowed to install DevMenu so I could finally join the MK7 hacking progress. (We figured out how to build MK7 for non-development consoles as previously only Yami could test stuff).
Missing information gap, when Nintendo took action
Before proceeding I'll note something. On September 2015, Nintendo closed my old youtube channel which had progress of MK7 modding since November 2014. As a result, many MK7 mod showcases were lost. Many things were developed in this period of time, but I can only mention stuff posted in MKGirlism or Ermelber's channels as well as stuff I remember by memory. (I should still have many videos from the old channel in my old PC hard drive, so I'll take a look if there is something there worth mentioning.)
Texture hacks, model hacks, etc
Going back to November 2014, more progress was posted. I made the first ever MK7 texture hack called Kalimari Icy Desert (which still can be played in CTGP-7 today ). We managed to load the only unused track in the game, MarioCircuitDivide (BTW, the graphic bugs in the video are there because we still didn't understand many .bcmdl features. A version closer to the original model can be found here). Some more model hacks (as well as character texture hacks) and custom musics were developed but finally, Ermelber, Gericom and Yami made possible what we were all waiting for.
First ever actual Custom Track!
On January 11th, 2015 the first ever playable MK7 custom track was showcased: DS Figure-8 Circuit. It didn't have any CPU routes, all the objects were in their original positions from Toad Circuit and the game would crash if you crossed the finish line on the last lap. (This was due to the fact that all .kmp modifications were made via hex editing with little tools for helping). Some days later Ermelber made Ermelber Circuit DX which shown more progress on .bcmdl, .kcl and .kmp editing but still had the finish line crash bug.
More progress, several people join, tools get improved
Little story time! Somewhere in January I did my first ever character texture hack, Red Yoshi! (The earliest video I found about it was this one) At first I only kept using it in my showcase videos because it was the only character texture hack I had installed, but it soon became my favourite MK7 character Since I kept using Red Yoshi in all of my videos, a friend gave my for my birthday a cross-point Red Yoshi portrait which I've been using for my profile pic for many years. Anyway, going back to MK7 mods, an early version of KMPExpander started development. This tool allowed kmp sections to be exported to .csv files that could be edited in excel. That way we wouldn't have to deal with hex editing files. Later in 2015 several people including myself started developing N64 Rainbow Road (preview, beta) which we then finished in June. N64 Rainbow Road v1.0 became the first custom track to be completely playable.
First CTGP-7 release includig a whopping quantity of 4 custom tracks.
While progress was being made, none of the scene members wanted to start a custom track distribution as we only had 4 custom tracks in total. However, on June 30th 2015 DarkFlare released the first ever CTGP-7 version: v0.01.009. Several weeks later, DarkFlare "gave" me the project so I could continue development.
Layeredfs & NTR CFW makes modding easier
While NTR & layeredfs had already been released, we weren't able to use it until September 2015. Previus to this, we had to rebuild and install the MK7 cia file each time we wanted to make any modification which could take up to 30 minutes (only to then get a crash screen and having to repeat all the process again). With layeredfs the waiting time lowered from 40 minutes to 2 minutes as we could just transfer the modified files to the SD card with a ftp client. This helped speeding up development a lot as we didn't have to wait for so long.
Smea releases ninjhax, allowing game mods in the latest firmware
Thank to Ninjhax and hans, CTGP-7 was made playable on the latest firmware. Until that point, you could only play custom tracks if you had a 3DS with CFW in older firmware versions which reduced the amount of people that could play them. Later in November, kmpexpander was updated with a graphical editor that made custom track making easier.
CTGP-7 gets it's own .cia app
At this point it was clear that CTGP-7 needed an app for managing custom tracks and handle auto-updates, you had to rebuild the mod each time a new version was released. I didn't have any programming knowledge at all, so I started searching something simple I could use and finally, I decided lpp-3ds was the way to go. Slowly but steadily I started coding the CTGP-7 app, which in march 2016 was added into CTGP-7 (without an updater yet as that was just too complicated for someone who never coded before.) Several months later, a changelog viewer was added but finally, after so many headaches I was able to add auto-updates to the CTGP-7 app in may 2016.
The peak and decline of MK7 custom track creation
As you can see in the video descriptions of the previous section, the one year period between summer 2015 and summer 2016 was where most of the existing Mario Kart 7 custom tracks were developed. However, after this period of time the amount of MK7 custom tracks being developed drastically decreased. Why did this happen? Well, as you may have noticed, I've only been talking about CTGP-7 progress for some time. That's because the MK7 scene slowly stopped developing new tools needed for non-expert people to develop mods for the game as the scene shifed interest to other games. In my case, during the second half of 2016 and the first months of 2017 I lost most of the motivation I had due to real life problems. While I continued development of CTGP-7, I did it very slowly and only made internal changes that didn't affect the gameplay much. It wasn't until summer 2017 when things started to improve.
Custom Tracks Community Pack
Parallel to CTGP-7, another custom track distribution was made for the game: CTCP. This distribution was aimed for competitive online play and added some custom tracks that weren't present in CTGP-7 (either because they weren't finished or because I didn't have the time nor the motivation to add them). CTCP also removed some custom tracks present in CTGP-7 that would lag online.
More complex features are added to the game
During the start of 2017 I finally learned a new programming language other than lua, which was C. With that knowledge, in february 2017 I made my first ever game plugin, the MK7 cc selector. A few months later NTR added support for overlay plugins, which allowed developers to draw extra stuff to the screen. Fishguy and me united knowledge to make the speedometer overlay plugin using this new feature. Another thing made using NTR plugins was the backwards camera.
Experimental features and CTRPF
Before summer 2017, Nanquitas invited me to join the CTRPF beta tester team after we had been talking about plugins for some time. I later used this new library to unify layeredfs, the cc selector and the speedometer into one single plugin as you can see here.
First ever 100% finished custom track!
Until now, all of the custom tracks were lacking some feature, such as bottom screen map, intro cameras or replay cameras. On July 13th 2017 I added all the missing features to N64 Rainbow road, making it the first MK7 custom track to be 100% finished. (Excluding .div files which are only useful for rendering improvements.)
Another gap without much public progress
From September 2017 to April 2018 not much stuff was made public as was both busy with school and porting stuff from the old plugins to CTRPF. Some new things are developed such as the items led warn feature and the graphical speedometer. During christmas 2017 I created the language system, which allowed to load text from .txt files in the SD card instead of the game files. This language system was my first ever big modification to the game in terms of game code editing, it wouldn't have been possible without Nanquitas' help.
First ever MK7 custom character!
In february 2018, I decided to start one of the longest tasks in MK7 I've ever made, which lasted 2 whole months: making Waluigi playable in Mario Kart 7. The reason this project took so long was because the game was known to be very sensitive to character modifications as any minor edit would cause the game to crash. It took me a while but during the first month of developing I finally managed to get all the bcmdl settings right and import the custom model to the game without crashing. In next month of development all the animations and voices were added and finally, on April 1st 2018 waluigi custom character for MK7 was released!
Time to improve all that we have
CTGP-7 updates were becoming bigger and bigger, and the lua interpreter wasn't being able to keep up. I took this opportunity to rewritte the entire CTGP-7 app in C during April 2018, so it would get an speed boost. While I was doing this, Nanquitas developed the Luma3DS plugin loader, which was an improvement over NTR CFW plugin loader. This new method of plugin loading was adopted by CTGP-7. Later in summer, another breakthrough was made: culling. With the help of the .div file it was now possible to disable parts of the track that weren't visible to the player, increasing a lot the performance of the game and allowing more complex custom tracks. After culling was fully working, I started researching all the unknown parameters in kmp files which were progressively added to KMPExpander. You can see all of the progress in this period of time here.
Second custom character for MK7
In christmas 2018, TheBlueBlur released the second ever custom character, Sonic the hedgehog. This custom character gets added to CTGP-7 in the next few days.
Major breakthrough, scrolling cup system and CTWW
Until now, many Mario Kart 7 custom tracks weren't being added to the mod because we only had the original 32 course slots to replace. However in January 2019 everything changed. With CTCP being discontinued fishguy and me teamed up to bring more course slots to CTGP-7. This without any doubt has been the most ambitious project for CTGP-7. Later in february, fishguy discovered how to get Custom Tracks in Worldwide, so it was no longer needed to play in communities. On April 1st 2019, the cup scrolling system was released in the 0.21 update. This system, gave us a framework to easily add new tracks when they are released, as well as to configure their parameters. CTWW was not released with this update though, as many tracks needed optimizations to work online and further beta testing was needed. Some other features were developed, such as a way to configure your own custom music via a MyStuff folder, including the new Mario Kart 7 feature in the saga: frontrunning beats.
The present and the future, CTWW and Countdown
On June 2019, a trailer was released for the F3 presentation announcing the release of CTGP-7 v1.0. This update has been in development for 7 months by many people, including some custom track makers and beta testers. The countdown mode as well as most of CTWW, which required a lot of modification to the game, was developed by fishguy. The update also includes a lot of security stuff, to prevent cheating online and modification of the game critical files. Also during summer 2019 a custom character manager was showcased, allowing people to further customize the game. As I'm writing this, we are doing the final fixes in order to get this update released before the end of 2019.
5 years of Mario Kart 7 modding have passed, but we haven't stopped yet. There are some things we want to research (such as VS offline mode) and hopefully add them to the game. I want to thank everybody who made MK7 modding possible, as not only they helped many people enjoy this game further, but also helped me to adquire a lot of knowledge of application and game development!
That's all I have for now, thanks for reading!