Goodbye eShop, Goodbye Sub Wars
Sunday, March 26th, 2023
When Steel Diver turned ten I wrote a Twitter thread about an amusing story in making the game, about how some of my code caused an... interesting bug which made it into the official game promo shots. Today isn't Steel Diver: Sub Wars' anniversary, but as of today the eShop is no more, so I wanted to write some things about the game, why it's kinda neat and a few fun things I worked on/learnt.
The original Steel Diver was one of the first 3DS games, it was a launch title in the US (not in Japan, but that's a whole "it's complicated" story) and so we were kind of on the cutting edge for Nintendo platforms at the time. This was also before VR began its latest boom, so we were dealing with some fairly unique issues at the time, like rendering twice per frame.
Free to Play
Sub Wars was also a cutting edge game in many ways because it was Nintendo's very first Free to Play game, at a time when most major game companies had some kind of free to play offering. Nintendo took this Very Seriouslyâ„¢ as you might expect. I'm not gonna break my NDA (lol) so let's leave it at this; in my opinion the 'freemium' model they decided on was a great decision at a time when so many F2P titles were trying to become slot machines.
Because this was the first Nintendo F2P title though, it required new libraries and UI to interface with the eShop and allow you to make purchases from within the game - AFAIK we were the first team to use those. I didn't actually touch any of this, but I know it was a lot of work, and the team members who did it worked super hard to make it happen.
IIRC the reaction to the payment model was fairly positive, people were glad of the one-time structure. And technologically it worked. The folk on our team and at Nintendo who made it happen did a great job.
Free Chat
So something kind of unique to Sub Wars is that it is one of the only Nintendo games (perhaps the only?) to feature full free chat whilst in multiplayer... with a caveat. In most Nintendo online games you're restricted to what you can say. Phrases like "Let's go!" "Good Game" etc., are baked into a preset menu, and you can choose those to interact with other players. Sub Wars, however, lets you say almost anything... that you can tap out in morse code. You can go into a special menu which lets you use one of the face buttons ('Y' IIRC) to write yourself morse messages. We had concerns at the time around this, for obvious reasons, but it let you play the game tactically, and morse is... tricky to spam. So it was allowed (with a bad word filter), and I think it's cool, a free chat system in a Nintendo game.
2D engine goes 3D
Kind of a side note, but when we moved onto Steel Diver: Sub Wars, we took the original Steel Diver's periscope mode (which was full-3D but with less features) and just built the game on that. The Steel Diver code was extremely well-tested by this point, it made a lot of sense to just keep building on it, we were a small team and didn't want to throw things away.
Depth of Field
This was one of the bits I worked on with the art team. We wanted to try out a depth of field effect, to make the water feel murky and harder to see. However, the 3DS doesn't have programmable pixel shaders, so we had to do it in a bit of an interesting way.
The following is how I recall implementing it, but it's honestly been such a long time I don't remember that clearly. But this feels right.
Firstly, I rendered the scene normally, and then used a special function of the graphics library to downscale the final output to half size. When upscaled, I could get a blurred image that could potentially be sampled for a depth-of-field. However, the 3DS can't sample like modern pipelines. Instead, I bound the red component of the depth buffer as the alpha channel for that image, then drew that image on a quad at 2x its size, making it the same size as the scene on-screen. This meant that the blurred image would show up when things in the world got further away (the increase in depth increased the alpha value) giving a DOF-like effect. However, because of the depth buffer precision the red value would wrap. To counteract this I believe I just drew the image again at 2x, without alpha but at the max depth of the first wrap of the depth buffer's red value. This placed that image at the 'correct' depth position in the scene, and the usual Z test handled the full blur being used in appropriate places.
This is quite convoluted, but again, we didn't have access to the raw data for pretty much anything. I think a few other games tried DOF for the 3DS but I'm not sure exactly what else had it in a shipping game. It made a big difference in Sub Wars though, the artists were totally right in wanting it included.
Fish
I made the fish schooling simulation for the original Steel Diver, so I also adapted it for Sub Wars, which is an interesting story in both a technical and managerial sense.
Steel Diver's fish were a full boids simulation, with schooling and obstacle avoidance. It remains one of the things I'm particularly proud of in my career, multiple press outlets commented on how nice the fish looked in-game. For Sub Wars though we had a problem, the fish in Steel Diver were extremely expensive in terms of CPU, so we had to limit them dramatically, but that worked because the camera was fixed and we could unload things off-screen. However, Sub Wars was an open, 3D environment, with lots of space. I wanted some maps to feel like they were teeming with fish, but if we had simulated them all, it wouldn't have worked.
I tried a lot of different approaches to this. Pre-baking animation. Having clone fish so the same shoaling patterns would repeat. A bunch of different ideas, eventually I made something and it was put into the game, but honestly, I didn't like it. The fish swam around in clumps in the world, meaning there just weren't enough fish. The ocean just felt dead, and worse, because of the resolution of the screen when taking into account the draw distance the fish sprites would just flicker as they transitioned between 1px size and nothing.
So I re-wrote it. And instead, I made a giant box around the submarine where 1000 or so fish would constantly school in a wrapping 3D space. And it worked really well and gave the world a boost of vibrancy. The fish remained large, filled the screen enough that you didn't care about the lack of fish beyond the view, and we were able to do complicated effects like having the fish avoid torpedos.
But.
I hadn't really told my management chain about this. Oops.
I think when you're early in your career, and I certainly felt this in education, there is the feeling that 'the best will out' and that improvements are always justified. However, as I've worked longer in ... work 😅 I've seen that this isn't quite the whole story. Our game had been seen by multiple levels of management at the point I did this change, and it looked totally different. Things which had been signed off on were changed.
But it looked so much better it turned out OK in the end. Thankfully. (NGL, I was certain we'd have to go back to the old rendering and I am extremely thankful to my bosses that we managed to use the new version.)
Goodbye
Sub Wars is no longer available for purchase. I'm pretty upset about that TBH. Not because it's my favourite game I've worked on, but it was an important project I spent a lot of time on, and now there's no legitimate way for people to experience it. I'm sure that ROM images exist (I mean, it's a download title) but that's different to having a game ... out in the world for people to enjoy. And because of the nature of the game as a F2P, online multiplayer title, I don't even know that a ROM image will even work in that regards.
The servers are still running, but eventually they'll be turned off. And the game will just die, and all our work will become some kind of ruin, fragments of something which used to be a game. It's very melodramatic, but honestly I can't think of a better comparison.
With the eShop being switched off it feels like the 3DS is now finally gone. It's so different from other consoles architecturally that I think any remasters which happen will only be for the large titles that will appeal to the mass-market. So I think this is also goodbye to Sub Wars. (Disclaimer, I have no idea either how well Sub Wars sold, Nintendo's future plans, or anything much tbh.)
This will probably get a lot more common as games get more and more online baked into them, and I'm not saying 'that's a bad thing' but it's a different relationship with a game made like that compared to something like Steel Diver which has a cart release and will be playable until the last 3DS is dust.
This article was originally published to my Cohost account and has been backdated to reflect the date it was published there.