How this terrain type works and how to add it to your MKDD custom tracks
MKDD Extender’s “Bouncy Terrain Type” adds a mechanic featured in many later Mario Kart titles; Bounce Pads. This site goes over the mechanics added, and how to implement them into your own Custom Tracks.
When driving over ground marked as a bounce pad, Karts will be propelled forwards and upwards by an amount of force specified by a track creator.
Before you bounce off of a bounce pad, your speed may be influenced by a Mushroom, or a Mini Turbo:
A Mushroom, or similar effects such as dash pads will increase your forwards and upwards momentum during the bounce.
A Mini Turbo will similarly increase your forwards momentum, but it will also lower the upwards momentum during the bounce.
This means you may not want to Mini Turbo before bouncing if you’re trying to go up.
Either a Mini Turbo or Boost will set forwards momentum up to a minimum if a Bounce Pad doesn’t have a lot of forwards momentum.
The effects of a Mushroom and a Mini Turbo can stack additively.
Stars and Lightning do not affect your momentum after being bounced.
Holding Drift while touching a Bounce Pad will increase your upwards momentum.
The time spent airborne after being launced this way is different than usual ramps and cannons. While airborne after touching a Bounce Pad:
Your forwards velocity will never change.
You can slightly move your Kart left or right.
Holding Drift while airborne will increase the speed of your descent.
You can hold up or down to increase or decrease the speed of your descent, respectively.
Example of the effect of holding a direction below.
https://github.com/lance-o/bouncy_/assets/61329703/d479ea74-63ad-4cb7-9b22-704134b7dbc0
To add this to your Custom Track, you’ll need some things.
Tutorials on how to use these programs can be found here. The most important thing is extracting the .bol (collision) file from MKDD and converting it into a .obj file.
Import your .obj into Blender.
You’ll probably not see anything. This is because MKDD tracks are actually ridiculously large.
To see it, first press N. This will bring up a bar on the side. There should be a tab called “View”.
Select the paramater “End” and type in some huge number. I just type 99999999 every time.
Zoom out by scrolling your mouse wheel down, and hopefully your collision model should come into view. It might take a lot of scrolling, because it really is huge.
If your model has an orange outline, then it’s selected, which is good. If it doesn’t, click on the model itself or in the inspector on the right. Then, go to Edit Mode.
After switching to edit mode, you should be able to see vertices and edges all over the model. If you can’t, try pressing and holding Z. This will allow you to change how Blender renders the mode. I like to keep mine in Solid, and Wireframe is useful as well.
Near where you changed the mode to Edit Mode, there should be these things:
From left to right, these correspont to Vertices, Edges and Faces. I’m going to select the third one, so that Blender is now in Face Select Mode. That means that when I click on my model, it will select an entire face of the model.
Go ahead and select a face on your track.
Now, let’s take a look at the Material of the track. Near the bottom-right, click this thing.
This will open up the Material Properties tab. This is where we actually set a material to use the bounce material.
Over here is our ground materials.
Click anywhere on the model (with Face Select Mode enabled), and the entry over on the right will change to whatever that face’s material is set to. If you’re creating a new .bco from scratch, I’d recommend looking at a vanilla one to see what it should look like.
Now, the name of the material is important. As an example, let’s say a material name is this:
Roadtype_0x0101_0x01_0x00000000.001
The part that dictates what kind of road it is, is the first 0x0101 area. This can be split up into
0xAABB
where AA is the terrain type, and BB is the sound flag. In the case of my example material, that means the collision flag is 01 and the sound flag is 01 as well.
The first part, the collision flag, is what you’ll need to change for the patch to recognize that this part of the track should bounce you. To make it bounce, it needs to be set to 0xB0. If we renamed the material to make it bounce, it would now be
Roadtype_0xB001_0x01_0x00000000.001
Instead of renaming this material, we’ll make a new one; otherwise, every piece of ground that originally used this material will bounce you.
To do that, press the ”+” button on the right of the Materials list, and then press “New” underneath the Materials list.
Type in the box what you need your material name to be called. In my case, it’s this:
Press Enter, and your new material’s name will be updated to reflect what you typed in.
As a note, the “.001” on the end of the Material name is irrelevant. You may remove it if it annoys you.
The material is set up so that it’s recognized as a Bounce Pad, but it still needs to be set so that it knows how strong a bounce it should apply. That part is defined in the 8-character hash at the end of the material name.
Currently, it’s set as
0x00000000.001
or, without the irrelevant ending
0x00000000
This string will be read as a hexadecimal number. Actually, it’ll be read as two. It can be split up into the following:
0xYYYYFFFF
where YYYY is the amount of upwards momentum, and FFFF is the amount of forwards momentum.
So, if I put in 50005000, it would launch you by 5000 upwards and 5000 forwards, right?
Not exactly, because
It’s hexadecimal, so it would actually be 0x5000, or 20480 in decimal.
The number entered is actually divided by 100 (in decimal, not hexadecimal).
So then, 50005000 would actually launch you by 204.8 both upwards and forwards.
So, how far is that? It’s hard to gauge on your own. There is another feature of the Bounce Pad to help with this:
If the 8 character hash is set to exactly 00000000, then it instead reads from somewhere in memory.
For this, we’ll need to apply the material to the ground and compile everything we have so far into a playable .iso.
Firstly, in Blender, select whatever face(s) you want to set to your new bounce material.
Then, in the Material Properties Tab, scroll down until you find the material you just made. Click on the material.
With the faces you want to apply it to still selected, click “Assign”.
Those faces will now be using your new material, instead of whatever they used before. To test this, click on some other faces that don’t use your new material, and scroll back to the new material and click on it.
Press “Select”, and the faces you set to your new material should now also be selected.
Now we know it’s set, export the scene as .obj.
You don’t need to mess with any settings while saving, the defaults should be fine.
Since you already had a .obj of your course, be careful to rename this one so you know it’s been changed.
Go through the entire process of putting it back into its original .arc file. That means putting it back through MKDD-Collision, and into its original .arc extracted folder, renamed and then packed back into a .arc.
Now, it needs to be put through MKDD-Extender. If you don’t know how to set up a mod for use with MKDD-Extender, you may find MKDD-Patcher’s instructions on how to format a mod folder particularly useful.
With your mod folder set up correctly, open MKDD-Extender.
At the top, click “Browse” next the to “Input ISO File” bar and locate your .iso of Mario Kart: Double Dash!!.
If “Output ISO File” does not automatically fill, click “Browse” next to that as well, and enter the name you want the patched iso to have.
“Custom Courses Directory” should be set to the location of the mod folder you set up.
If everything is entered, it should look like this:
Now, on the left are all the mods that MKDD-Extender has detected. Assuming the one you made has appeared in there, drag it onto one of the slots in the middle. This will add your modded track to the corresponding track slot in-game.
To enable the Bouncy Terrain Type patch, click on “Options”.
Under “Code Patches”, you should find “Bouncy Terrain Type”. Tick the box next to it, and now when you press “Build” on the right of the main window of MKDD-Extender, it will apply that patch to your new, patched Double Dash .iso.
Open up your new .iso in Dolphin, and also, open up Dolphin Memory Engine. Load up your modded track in Time Trials, and if all has gone correctly, it should be your modded track.
Now, turn your attention to Dolphin Memory Engine.
Launch the Memory Viewer.
You’re now looking at the real-time memory of Mario Kart: Double Dash!!.
Now, depending on the region of your game, you will need to use a different address for this process. In the box named “Jump to an address”, type the following depending on your game version:
USA: 802ed67a
PAL: 802f9d0e
JAPAN: 8030a78e
It should look like that.
Remember how we left the 8-character hash at the end of your material name as “00000000”, as it would instead read from “somewhere in memory”? The first 8 characters in Dolphin Memory Engine is that place in memory.
You can now type in whatever you’d like into those 8 characters, and then drive onto the track you assigned the Bounce Pad material to. It should bounce you in accordance to what you just put in Dolphin Memory Engine.
Now, you can change the direction it bounces you on the fly. When you find a setting you like, you may write it down (or, if Blender is still open, go and change the material immediately).
Alternatively, if the default value of “50005000” for the bounce is to your liking, you can leave it how it is.
https://github.com/lance-o/bouncy_material/assets/61329703/d18488a2-8889-447d-9de9-372b4b09f326
NOTE: This example is from an early version of the patch, and so the address is inaccurate to the current release. Please only use one of the addresses specified earlier.
Now, for every new Bounce Pad material you add to the track, you may use the workflow of setting the ending 8 characters as “00000000” in Blender to do this in Dolphin Memory Engine, and then enter the final setting into Blender when you have found one you like.
If your Custom Track is ready to be uploaded, please remember to add a “code_patches” line to your trackinfo. It should look something like the following:
For the game to use Bounce Pad, set up your material according to the following structure:
Roadtype_0xB0XX_0x01_0xYYYYFFFF
with B0 being the Bounce Pad terrain type, XX being the sound flag you want your material to have, YYYY being the amount of force to add upwards x100 in hex and FFFF being the amount of force to add forwards x100 in hex.
Since it’s hard to gauge exactly how far it’ll push you based on that information, leave YYYYFFFF as 00000000. This will cause the patch to read from a place in memory instead.
Use Dolphin Memory Engine’s Memory Viewer and go to one of the following addresses, respective to your game version:
USA: 802ed67a
PAL: 802f9d0e
JAPAN: 8030a78e
The first 8 values you find in your game should be “50005000”. These first 8 values function the same way as the material name; you may experiment with different bounce settings in this way without having to recompile the game.
https://github.com/lance-o/bouncy_material/assets/61329703/43582a35-8024-4010-b193-ad1cc1b07d4b
If your Custom Track is ready to be uploaded, please remember to add a “code_patches” line to your trackinfo. It should look something like the following:
There are imperfections in the current implementation.
Firstly, it cannot work on the Demo/Debug version of the game. This isn’t a huge loss, but for completion’s sake it may be important that this is eventually possible.
Secondly, the Kart’s statistics are currently not taken into account when starting a bounce. This means, all karts will have the exact same speeds when bouncing. This includes external modifiers to Kart speed, such as the current CC.
Thirdly, there’s…
Getting hit on top of a bounce pad will often cause Karts to rotate and bounce in a different direction to the one they were initially trying to go.
Bonking into a wall will not remove any momentum from the Kart. This is ordinarily fine, but in the case where a thin pillar is collided with, the Kart will appear to stop, fall, then fly forwards in the direction it was going.
If you’d like to report a bug that isn’t listed, or have had a bug reported to you by someone playing your track, then the person to message is @alllarrynolurr via Discord.