Been a while since I've toyed with mode7, but it's quite fun.
Some basic ideas that might get you going:
Horizon is basicly a looped image, drawn from the top of the "ground" and going up. your offset it along the X axis based on how far you've turned left or right (remember, it's gotta loop, so when you get to the end it re-draws the begining...) The way I would handle that in bmax in essence. I would set the image handle to the bottom left corner of the image, and draw it at the top of the "ground". Since the handle would be at the bottom of the horizon space image then the more you pitch, the lower the edge of the ground will be and the lower the bottom of the horizon will be. Then for turning if the right side of the image is being draw then draw another one next to the first to fill that space and create the loop, and the same on the other side for left. hope that makes sense
The ground is where the complicated things really are. you need to do 2 scales and a rotation.
First you need to turn the image based on the rotation of the view. If again modifying the concept for blitz, if you set the image handle to the position of the view point (i.e. where the player is standing) and draw the image centered at the bottom of the screen, everything "behind" the view point will be off the bottom and thus behind you.
Next is where the cutting the image into horizontal slices comes in. You can scale each slice along it's X and Y axis based on it's distance from the the view point, which is relative to the pitch. Past a certain point things will be scaled to a size too small to be rellevent and can be culled out.
Since splitting and image in blitz is hard, I would start with viewports and drawimagerect instead of actually Slicing the image up. So, you set the view port to the height the slice needs to be based on it's distance, and full width because you want it to fill the screen. Next you need to figure out where the slice starts based on the image rotation and distance of the slice, and set the image handle to that point, DrawImageRect at the bottom of the view port and the rect you're drawing into is the X and Y scaled size of the image for the depth you're at.
As for objects. Generally in mode 7 they're handled as an after thought to save time, since making the background is so time consuming. Scale them vertically based on pitch, or set up an array of angles for pitch. Similarly you need an array for angles based on the rotation of the object relative to the view point. And scale x and y based on distance. This is where your art assest creation time gets eaten. You need x number of images based on how many angles you want (more angles = smoother rotation of objects) usually 36, times however many frames of animation, and then multiplied by any pitch angles (usually not used) so that's why the animation is usually so basic on mode7 games, as well as why things turn in a "chunky" fashion. Assuming you only had 3 frames of animation (in mario kart, guy turning left, right or going straight ahead) and 10 degrees of rotation, no pitch images, and 10 different racers, you have 1080 sprites... plus misc objects like trees etc.
That's a lot to take in and I may have gotten some stuff wrong, but hopefully that's a good starting point.
The method I would probably use for a mode 7 like game would be to fake mode 7 in real 3D. Using MiniB3D as the basis I would create sprite objects for all of my sprites, and another sprite object for the ground. The 3D engine will take care of all the scaling and rotating etc. It would be smoother than real mode 7, MUCH faster, but still give you that billboard/popup look that makes mode 7 charming.
Some basic ideas that might get you going:
Horizon is basicly a looped image, drawn from the top of the "ground" and going up. your offset it along the X axis based on how far you've turned left or right (remember, it's gotta loop, so when you get to the end it re-draws the begining...) The way I would handle that in bmax in essence. I would set the image handle to the bottom left corner of the image, and draw it at the top of the "ground". Since the handle would be at the bottom of the horizon space image then the more you pitch, the lower the edge of the ground will be and the lower the bottom of the horizon will be. Then for turning if the right side of the image is being draw then draw another one next to the first to fill that space and create the loop, and the same on the other side for left. hope that makes sense
The ground is where the complicated things really are. you need to do 2 scales and a rotation.
First you need to turn the image based on the rotation of the view. If again modifying the concept for blitz, if you set the image handle to the position of the view point (i.e. where the player is standing) and draw the image centered at the bottom of the screen, everything "behind" the view point will be off the bottom and thus behind you.
Next is where the cutting the image into horizontal slices comes in. You can scale each slice along it's X and Y axis based on it's distance from the the view point, which is relative to the pitch. Past a certain point things will be scaled to a size too small to be rellevent and can be culled out.
Since splitting and image in blitz is hard, I would start with viewports and drawimagerect instead of actually Slicing the image up. So, you set the view port to the height the slice needs to be based on it's distance, and full width because you want it to fill the screen. Next you need to figure out where the slice starts based on the image rotation and distance of the slice, and set the image handle to that point, DrawImageRect at the bottom of the view port and the rect you're drawing into is the X and Y scaled size of the image for the depth you're at.
As for objects. Generally in mode 7 they're handled as an after thought to save time, since making the background is so time consuming. Scale them vertically based on pitch, or set up an array of angles for pitch. Similarly you need an array for angles based on the rotation of the object relative to the view point. And scale x and y based on distance. This is where your art assest creation time gets eaten. You need x number of images based on how many angles you want (more angles = smoother rotation of objects) usually 36, times however many frames of animation, and then multiplied by any pitch angles (usually not used) so that's why the animation is usually so basic on mode7 games, as well as why things turn in a "chunky" fashion. Assuming you only had 3 frames of animation (in mario kart, guy turning left, right or going straight ahead) and 10 degrees of rotation, no pitch images, and 10 different racers, you have 1080 sprites... plus misc objects like trees etc.
That's a lot to take in and I may have gotten some stuff wrong, but hopefully that's a good starting point.
The method I would probably use for a mode 7 like game would be to fake mode 7 in real 3D. Using MiniB3D as the basis I would create sprite objects for all of my sprites, and another sprite object for the ground. The 3D engine will take care of all the scaling and rotating etc. It would be smoother than real mode 7, MUCH faster, but still give you that billboard/popup look that makes mode 7 charming.