At that time, the game was still fairly early in development, and the engine was still undergoing constant changes. Fast forward to this past weekend at PRGE 2023, and SHIRO! caught up with 7Shades once again to discuss his journey of Saturn development and the various improvements he’s managed to implement in CUBECAT.
Transitioning from the starter-focused JoEngine and the old Sega Graphics Library to his own bespoke rendering engine, 7Shades has built a recreation of the iconic Peach’s Castle area (from Mario 64) as a 3D ‘playground’ of sorts to stress his game engine and reveal it’s shortcomings and areas where improvement is needed. Here’s what 7Shades had to say about it…
7SHADES Interview – PRGE 2023
SHIRO!: So can you tell us a bit about this demo?
7SHADES: So this is my Homebrew game CUBECAT, and I made a version of Peach’s Castle from Mario 64 that runs on the Saturn… Just sort of a tech demo of how my engine is currently running.
SHIRO!: That’s awesome! Did you have to write that in assembly?
7SHADES: Mostly C… There’s some inline assembly in the polygon functions, but 90% of it is in C. I’ve got sort of a fake reflection from the clouds (It’s a VDP2 plane, which is like Saturn’s background processor which can do a sort of Mode 7 like effect like Super Nintendo). So that’s what the water is, and then I can do transparency with the polygons. So this is sort of a tech demo for my new rendering pipeline essentially that I’m using to test out different features.
SHIRO!: Yeah, those transparencies look really good!
7SHADES: Yeah, so it’s like three different layers of transparency… You’ve got the sky. You’ve got the water, and you’ve got the under water. I’ve just been trying to get the draw distance with a lower level of detail so that you can see the entire thing at once, and that is tricky… The Saturn is not happy about it… You can sort of see the draw distance fade out it sort of fades to a flat polygons far away.
I’ve just been trying to get the draw distance with a lower level of detail so that you can see the entire thing at once, and that is tricky… The Saturn is NOT HAPPY about it…
SHIRO!: How often do you wind up tweaking the engine for CUBECAT?
7SHADES: Uh, constantly… Yeah it’s sort of as I’m developing. Basically the last year and a half has gone into completely rebuilding the engine. Since the last [SegaXtreme homebrew] contest release, I’d say like 70% of all the rendering stuff [has changed]. I went sort of deeper, so I’m not using the default SGL library functions anymore for rendering. I’m doing everything directly myself, and that took a while to get working. Since I have full control over it, whenever I want to make tweaks and think, ‘oh, this would be a cool idea’, I try to put that in…
SHIRO!: Yeah, that’s outstanding! So it’s all you? There’s no base SGL engine?
7SHADES: So… SGL is still in there doing the matrix math functions to inject the polygons from the pipeline right before the final sort that SGL does. Then SGL does the sort and moves it over to the VDP1 renderer. So yeah, at the moment all the polygon math is running on the slave processor, and then the main processor handles the game, and I’ve got it running at a decent speed right now with this draw distance.
SHIRO!: I was going to say! The frame rate’s not bad at all…
7SHADES: Yeah… A little bit of slow down here and there, you know… You get some CPU bottlenecks when you get the whole thing on screen like this.
SHIRO!: What inspired you to throw in Peach’s Castle into CUBECAT? Just to prove you could do it?
7SHADES: Yeah, basically it was like I wanted something that was larger scale than some of my other models and levels to stress the engine and see where my bottlenecks were, and Peach’s Castle is one of those iconic first 3D maps that you think of, where it’s like, ‘Oh! Could I get this running?’
SHIRO!: Do you find it’s easier to have a level running where it’s just little Islands on a VDP2 plane?
7SHADES: YES! Absolutely. This is a lot more stressful for VDP1 than the little islands [in the previous build]. That was one of the initial design constraints that I put on myself. I was like, okay, I’ll make just the islands on the VDP2 plane so that there can be at least some space where VDP1 doesn’t have to draw pixels, rather than trying to fill the entire screen with VDP1 in 3D. Especially with a dynamic camera, it’s just really tricky to maintain a consistent frame rate. It’s like you look at one angle, and everything’s running fine – 30 FPS no problem, and then the camera moves a little bit, and suddenly everything slows down. It’s like, ‘Okay… where can I make tweaks? Where can I fix things up?’ You can sort of see that I greatly extended the power of the dash move. You can sort of do it in midair now and kind of aim yourself, and I’m hoping to get some more gameplay tweaks in there to make it as fun as possible to hit the yarn around…
SHIRO!: Nice! Do you feel that VDP1 is a capable video processor? Like, a lot of people give it crap for not being able to load as much… Do you think it’s good, or did you really have a tough time getting it to pump this out?
7SHADES: You know, I think it’s sort of right on the edge.., which is why I think a lot of developers had trouble with it. Like, you can push it, and it’s doing great, and it’s like, ‘oh yeah, this is easy-peasy’, and then suddenly, you snag on a weird camera angle or the polygons… Because it’s fill rate… Right? That’s the main bottleneck, so it doesn’t matter how many polygons you’re drawing if you have them all right up in your face at once. Suddenly VDP2 has a way harder time… Right? Than why I think fighting games and things with fixed camera angles where all the polygons can be mostly the same size on the screen at a time… That’s where you can get the 60FPS games, but I don’t think it’s possible to really hit a stable 60FPS with a full dynamic camera in a 3D world…
Because it’s fill rate… Right? That’s the main bottleneck, so it doesn’t matter how many polygons you’re drawing if you have them all right up in your face at once.
SHIRO!: Do you plan on making a full CUBECAT with the amount of levels you’d expect in a fully released 3D platformer?
7SHADES: [Yes] I am. I’m constantly thinking about it, and I have a notebook of ideas… There’s sort of a general layout for it. I’m thinking kind of a Crash Bandicoot 2 style level system, where you’re in a hub, and you can go into a couple levels area or something. In my mind that’s like the final form of CUBECAT.
SHIRO!: Awesome! Does our cute friend have any new moves at the moment?
7SHADES: It’s just this dash… I’ve sort of powered it up, and at the moment, you can like just aim in midair anywhere you want [laughs]. It’s not going to be that powerful, but I really want to sort of play with the idea of having good air control and aiming at maybe targets or different things that you can hit and sort of extending the idea of hitting the yarn ball to hitting more objects in the level. Like, even the enemies… (like the rats) if you could bump into them and then knock them out, you could do the same with the yarn ball, but hopefully those features will all be in the demo this year… They’re not all running yet, but that’s sort of where I’m aiming for.
SHIRO!: What advice would you give to folks interested in getting into Saturn game development?
7SHADES: For folks getting started? My advice would be start small. Always, always start small with something that you think you can reasonably produce and get done in [a reasonable] amount of time. Don’t try to throw everything at the wall at once… Use JoeEngine when you’re starting out or failing that, some SGL, just because they help take care of all the transferring data between the different processors and things, so you don’t have to worry about it as much (I think Emerald Nova might have some SGL tutorials up on his website). And use VDP2 for something cool, because it’s there… So you might as well… Right?
My advice would be start small. Always, always start small… And use VDP2 for something cool, because it’s there…
SHIRO!: Yeah, gotta have those ‘infinite planes’… [laughs]. You said ‘start small’, but CUBECAT is not ‘small’… It’ likes one of the biggest homebrew projects on Saturn… Right?
7SHADES: CUBECAT is not small, but it originally was, and when I say that, I don’t mean it like you can’t have big dreams and a plan for the future, but just pick out little concrete goals that you’re going to get to, like… I didn’t know anything about C programming when I started… But I started years and years ago. Like, two years before I even put out a demo online… I was interested in the scene, and I was like, ‘how can I sort of start to get into that?’, and I just I started small… I was like, ‘okay, what CAN I do? I can make a cube in 3D space, and maybe I’ll make it so the direction buttons control its movement over this plane’, and then I did it, and it’s like… ‘Oh, I can control this now! Maybe I’ll try to make some level geometry… Maybe I’ll try to figure out what collision detection algorithms look like…’ You do research on that and just slowly, slowly build it up from there, step by step, not trying everything at once.
SHIRO!: Yeah, that makes sense! You said ‘several years ago…’ When did you start learning to program and start doing doing CUBECAT on Saturn?
7SHADES: Oh my gosh… Roughly 2018 was when I first started… Then 2020 was when I released the first CUBECAT demo. Like, it was a couple years there where, I mean, I wasn’t like constantly working on it, of course. [It’s] just an on and off hobby thing, and then it like sort of snowballs and you’re working on it more and more… spending all of your free time on it, but at first, I was just sort of experimenting and trying to familiarize myself with programming languages in general. I hadn’t really done much coding before that. Yeah.., you can you definitely can start from ZERO, but it might take a lot of time [laughs].
Yeah.., you can you definitely can start from ZERO, but it might take a lot of time…
SHIRO!: So, how do you feel playing a Saturn homebrew game in Peach’s Castle on the famous PLUTO prototype?
7SHADES: That is a pretty crazy combination, I’ve got to say… I would not have put that on my ‘bingo card’.
SHIRO!: When do you think the full game might come out?
7SHADES: Oh my gosh… Undetermined. I do look forward to seeing what everyone does for the contest this year, though.
A massive Saturn fan since Christmas ’96, Dave is enthusiastic about growing the community and spreading Saturn love and knowledge to fans old and new. Co-founding the SEGA SATURN, SHIRO! podcast back in 2017 and creating the SHIRO! SHOW in 2020, he seeks to create interesting and engaging Saturn-related content for the community. Dave’s interests circle around game preservation, and he is a huge fan of game magazines and developer interviews.