Project Möbius: New free 3D Shoot 'em up

A place for people with an interest in developing new shmups.
Post Reply
koolooz
Posts: 5
Joined: Sat Dec 21, 2024 10:47 am

Project Möbius: New free 3D Shoot 'em up

Post by koolooz »

Hi everyone,

I just released Project Möbius, a free 3D Shoot 'em up game, probably best classified as a rail shooter. You can watch a trailer and download the game here: https://cwulnil.itch.io/project-mobius.

It currently works in Windows but only for some Linux distributions and some versions of Mac.

For those who are interested, the game is written in Rust using my own 3D engine with the wgpu API.

Best,

Christian
User avatar
Lander
Posts: 1338
Joined: Tue Oct 18, 2022 11:15 pm
Location: Area 1 Mostly

Re: Project Möbius: New free 3D Shoot 'em up

Post by Lander »

Cool, sim-style aircraft pitch and roll in a rail shooter is a nicely original idea, though aiming without a reticle looks like it could be tricky. Pleasing Minteresque abstract style.

Props for not only building your own tech - a respectable move - but also avoiding the infinite these tools aren't good enough vortex and managing to ship something with it :)

Spent some time in the Rust / GPU ecosystem myself, and found it quite pleasant to work with; didn't love the compile times, but static analysis is so helpful for getting things done. The trip-o-tunnel visuals look very smooth - are you doing those with screen-space shaders, or a traditional shaded geometry approach?
koolooz
Posts: 5
Joined: Sat Dec 21, 2024 10:47 am

Re: Project Möbius: New free 3D Shoot 'em up

Post by koolooz »

Thanks a lot for the kind words!

Yes, aiming was a bit tricky in the early stages of development and I was thinking of adding a reticle. However, I instead ended up making an auto-aim system which only kicks in if you aim roughly at the enemy. This means that your forward shots are not always parallel to your aircraft but can deviate by a few degrees due to the auto aim system helping you out.

C++ was always my favourite language until I started in Rust. Slow compile time is the biggest downside but I feel I am much more efficient as it is harder to make bugs due to the borrow checker. I also love the functional programming parts of Rust.

By "screen space shader", do you mean a shader that makes post-processing effects like bloom? If so, I don't do that although it could maybe be something for a future version or for my next 3D game. I started out in OpenGL and learnt it through learnopengl.com before switching to Vulkan and then to wgpu, so I follow the techniques from learnopengl fairly closely. I also use Perlin and Simplex noise to generate some of the tunnel wall surfaces and texture color modifiers, including transparency.
User avatar
Lander
Posts: 1338
Joined: Tue Oct 18, 2022 11:15 pm
Location: Area 1 Mostly

Re: Project Möbius: New free 3D Shoot 'em up

Post by Lander »

Autoaim is a nice solve; avoids giving pinpoint precision the spotlight as per modern FPS. I fiddled with trying to directly 3D-ify traditional shmup mechanics at one point, and fighting back the just third-person shooting factor was quite tricky.
koolooz wrote: Sun Dec 22, 2024 4:06 pm C++ was always my favourite language until I started in Rust. Slow compile time is the biggest downside but I feel I am much more efficient as it is harder to make bugs due to the borrow checker. I also love the functional programming parts of Rust.
Ha, same! I was always hard-line about using a performant systems language, but fell out of love with the C family after seeing just how much more a compiler / ecosystem can do to help.

The functional programming side is amazing - Rust led me down that path a few years back and I've been chasing the rabbit ever since :mrgreen: ended up porting a chunk of Haskell's standard library to typenum / frunk -style trait encoding at one point, and writing a 2D software renderer that ran entirely in the compiler. Terribly impractical; rustc wasn't designed for that kind of abuse, so it took ~10mins to 'build' a trivial 128x128 test image, but it was fun and instructive.
koolooz wrote: Sun Dec 22, 2024 4:06 pmBy "screen space shader", do you mean a shader that makes post-processing effects like bloom?
Sort of; it's similar insofar as using a full-screen quad to offload everything to the fragment shader. But instead of modifying an existing image, you produce one from scratch by encoding geometry as functions and visualizing them through raymarching or other analytical techniques; like this or this.

It's very nice for trippy demoscene stuff - fractals, or other infinitely large / infinitely detailed structures - though has a higher performance floor than traditional rendering since GPUs are so heavily optimized around triangle rasterization.
If you've an interest in procedural graphics, Inigo Quilez is a goldmine. His work on distance fields is fascinating - makes me wish there was a 'Shader Rust' to supplant GLSL / HLSL with nice language features and compiler machinery!
koolooz
Posts: 5
Joined: Sat Dec 21, 2024 10:47 am

Re: Project Möbius: New free 3D Shoot 'em up

Post by koolooz »

Sounds cool with your Rust experiments! I just returned to a long-term C++ game project that I took a break from while working on Project Möbius. I already miss Rust and I feel it's probably too much work converting the game from C++ to Rust. I better start another Rust side project soon :-)

If I understand your description of "screen space shader" correctly, you fill the screen with two triangles and then you let the fragment shader shoot out rays for each pixel and what each ray hits is a function of its pixel coordinates. Sounds like a really efficient way of doing certain 3D effects by avoiding, e.g., overdrawing/z-buffer and triangles (except for 2). Maybe something I will try out for a future project. Thanks for the links! I am going to check those out.

And thanks for linking to Inigo Quilez! It indeed looks like a goldmine and it seems very relevant for the final level of Project Möbius where I used some 3D fractals (Mandelbulb and variants of it) for the boss. I had to smooth them out in Blender and remove small disconnected parts of the fractals as the meshes looked ugly otherwise. It ended up working quite well but I think some of the techniques on that page could make it look much better and give a more accurate rendering of the fractals. Maybe something for a future update to the game.

Regarding GLSL/HLSL: for wgpu, I used WGSL which has a syntax somewhat similar to Rust (at least more so than GLSL) but probably it is far from what you'd like in "Shader Rust".
User avatar
Lander
Posts: 1338
Joined: Tue Oct 18, 2022 11:15 pm
Location: Area 1 Mostly

Re: Project Möbius: New free 3D Shoot 'em up

Post by Lander »

koolooz wrote: Tue Dec 24, 2024 8:33 am Sounds cool with your Rust experiments! I just returned to a long-term C++ game project that I took a break from while working on Project Möbius. I already miss Rust and I feel it's probably too much work converting the game from C++ to Rust. I better start another Rust side project soon :-)
Rewrite It In Rust is a serious problem :lol: there are mechanical translators out there that work, but they require careful hand-tweaking to make sure the result is equivalent after you've adjusted naming conventions, refactored around traits, etc.
I was able to translate NukeyT's Mega Drive sound chip emulator to Rust quite quickly that way (with unit tests versus Tecnosoft soundtracks for equivalence!) but it took forever to clean up.
koolooz wrote: Tue Dec 24, 2024 8:33 am If I understand your description of "screen space shader" correctly, you fill the screen with two triangles and then you let the fragment shader shoot out rays for each pixel and what each ray hits is a function of its pixel coordinates. Sounds like a really efficient way of doing certain 3D effects by avoiding, e.g., overdrawing/z-buffer and triangles (except for 2). Maybe something I will try out for a future project. Thanks for the links! I am going to check those out.
Yep - everything as a function of normalized screen coordinates, with uniforms and textures (or buffers, on a modern featureset) for parameters and instance data. More specialized renderers (like Dreams on PlayStation) skip the triangles entirely and use a compute shader to draw the fragments straight into a framebuffer, though you can also go the other way and use projected meshes as bounding shapes for raymarched objects, and potentially combine them with regular raster graphics given some careful projection matrix / depth buffer handling.
koolooz wrote: Tue Dec 24, 2024 8:33 am Regarding GLSL/HLSL: for wgpu, I used WGSL which has a syntax somewhat similar to Rust (at least more so than GLSL) but probably it is far from what you'd like in "Shader Rust".
Yeah, I fiddled a bit with WGSL. It's better than the alternatives, but is really just a nicer interface over the same limitations. Frustrates me to no end; all the big game engines end up inventing their own extensions to make shaders extensible or reusable, which inevitably hits the XKCD standards problem and makes writing libraries difficult unless you pick an ecosystem and stick to it.

There's a project called RustGPU that's valiantly attempting to compile Rust to SPIR-V, which would take **SL languages out of the picture and provide all the nice missing stuff like enums, interfaces, modules, packages, and so on. Though it wasn't really ready to use last time I experimented with it: easy to hit a compiler bug or missing feature, hack around it, and end up back at "I can't reuse this code".
PC Engine Fan X!
Posts: 9066
Joined: Wed Jan 26, 2005 10:32 pm

Re: Project Möbius: New free 3D Shoot 'em up

Post by PC Engine Fan X! »

The section of Project Mobius with the rotating openings to fly through reminds me of Mylstar's (aka Gottlieb) 1984 arcade laserdisc game, Us Vs. Them, that had your fightercraft going through gate openings in a "3rd-person from behind" viewpoint perspective.

Are there any plans to release Project Mobius on Steam and with Steam Deck support as well?

PC Engine Fan X! ^_~
koolooz
Posts: 5
Joined: Sat Dec 21, 2024 10:47 am

Re: Project Möbius: New free 3D Shoot 'em up

Post by koolooz »

Lander wrote: Tue Dec 24, 2024 6:50 pm Rewrite It In Rust is a serious problem :lol: there are mechanical translators out there that work, but they require careful hand-tweaking to make sure the result is equivalent after you've adjusted naming conventions, refactored around traits, etc.
I was able to translate NukeyT's Mega Drive sound chip emulator to Rust quite quickly that way (with unit tests versus Tecnosoft soundtracks for equivalence!) but it took forever to clean up.
It would be nice with such translators but I can imagine it must be a non-trivial problem if inheritance and other non-Rust mechanisms are used, at least if it should end up in a well-structured form. I actually decided to spend the next few weeks/months translating my C++ game to Rust. At least I know what to do for a while :-D I already like the new code structure that Rust forces me into.
Lander wrote: Tue Dec 24, 2024 6:50 pm There's a project called RustGPU that's valiantly attempting to compile Rust to SPIR-V, which would take **SL languages out of the picture and provide all the nice missing stuff like enums, interfaces, modules, packages, and so on. Though it wasn't really ready to use last time I experimented with it: easy to hit a compiler bug or missing feature, hack around it, and end up back at "I can't reuse this code".
Oh, that sounds nice. I would love something like that. I will check it out and see if it has matured.
koolooz
Posts: 5
Joined: Sat Dec 21, 2024 10:47 am

Re: Project Möbius: New free 3D Shoot 'em up

Post by koolooz »

PC Engine Fan X! wrote: Thu Dec 26, 2024 2:26 pm The section of Project Mobius with the rotating openings to fly through reminds me of Mylstar's (aka Gottlieb) 1984 arcade laserdisc game, Us Vs. Them, that had your fightercraft going through gate openings in a "3rd-person from behind" viewpoint perspective.
I never heard of that game but I will definitely check it out!
PC Engine Fan X! wrote: Thu Dec 26, 2024 2:26 pm Are there any plans to release Project Mobius on Steam and with Steam Deck support as well?

PC Engine Fan X! ^_~
No plans regarding Steam unfortunately. The main reason is that I need to pay Steam quite a lot in order to publish a game (at least the first game - I forgot the exact model) which feels wrong when I want the game to be free. But I will think about it since my game would likely get far more views/downloads on Steam. Getting it to work on Steam Deck will require tools that I currently don't have but I would love to make that happen (as well as smartphone support).
Post Reply