Metroid Prime Style Game: here's what was finished

I see you’re a wave beam person… good taste.

As someone who idolises Retro and for whom Prime will always be the (subjectively) best game of all time, I really like the direction this is going. If I were to do Prime on PC I’d probably adopt standard FPS controls - given that the series was never afraid to adopt the best control scheme for a given platform, even if it involved waggling a wiimote around or tapping a stylus - but I totally get it, if you’re going for the authentic tank controls.

I don’t think there’s anything I could say that you don’t seem to already know about game development philosophy, or how to stay motivated. Reggie Fils Aime seems to have it covered.

So instead, I’ll tell you what happened to me, and maybe it’ll give you a list of things to avoid.

  1. I ran out of options with logic bricks, and learned Python. Coding is all but unavoidable in game development, so as others have said, better to start earlier rather than later. Python is an excellent language to learn and you can use it outside Blender too.

  2. Starting out I was completely goal-oriented and had a kind of tunnel vision, ignoring ‘basic tutorials’ in favour of just getting stuff done, no matter how complex the code was, no matter how little I knew. This isn’t the worst way to learn, but I ran into a blockade with Blender’s built-in vector / matrix systems. How orientations and positions are represented and manipulated is probably the single biggest barrier to entry in game coding. The attack surface cuts across multiple domains of maths. I was several years away from receiving an academic education on vectors or matrices, and had only just begun learning how programming languages work, much less linear maths implemented with Python-wrapped C++ classes.

As you’re already switching to a simpler project for now, my advice is, read up on orientation matrices, and try to achieve simple things with Python instead of a logic brick, as a way of practising. (There’s a Python function for applying torque to objects, for instance.) If/when you don’t have access to a computer capable of running Blender, if you can lay hands on any sort of computer at all, it can probably run Python at least.

  1. I began to encounter the limits of the BGE, and scene-centric game design. The problem you’re tackling now, of loading a room when a door is activated, is the very same problem that drove me to consider alternatives. LibLoad is currently the only option within the BGE (this might change in future), and it has the drawback of freezing the game for an indeterminate length of time, while rooms in Prime loaded seamlessly. LibLoad does read the .blend file in another thread, allowing the game to keep running, but it then briefly hangs to actually interpret and instance the contents. Not ideal, but I imagine things could get better if there’s a rewrite of the BGE coming.

Stay with the BGE for as long as you want to, it’s very capable of creating fun games, and like Python it’s an excellent learning tool. Just be aware that the seamless loading technique used in Prime isn’t entirely within its range, for now. It can almost do it.

  1. I tried some other engines, none were as friendly as the BGE. To expand my options, I went nuclear and bought ‘C++ For Dummies’ for $50, started learning C++, and started making my own game engine. It wasn’t particularly serious, so I kept using the BGE. This is probably the point where a sane person moves to Unity or UnrealEngine.

  2. I stumbled through game engine design, slowly becoming more and more discontent with the BGE’s internal structure as I went. The breaking point was probably when I used LibLoad to instance vehicles in a raycast vehicle sim, and discovered intricacies that made it difficult to use. It was the wrong tool for the job, but it was the only tool available.

  3. 5 years at university taught me Java and tried to teach me a lot of very bad habits, like spamming getters and setters. As an experiment, I tried rewriting the engine in Java, but the language has some glaring drawbacks, so that fizzled. I got stuck between C++ and Java, because both have advantages and disadvantages.

  4. I discovered ‘D’, which markets itself as ‘C++ but less stupid’, and disowned both C++ and Java forever. Now I’m here. In the past year, D’s central repository has exploded with new game engine projects and related infrastructure, so if you do find yourself going nuclear looking beyond the BGE at any point, D has promise for the future. As someone who knows more about C++ and Java than any normal person should, I can give D a huge tick of approval compared to both of them. It’s a mid-level systems language, similar to C, so there are a few hurdles transitioning from Python (an interpreted high-level language), but it’s far kinder than transitioning to C++.

Otherwise, if you’re more about using a GUI-equipped development environment, I suspect Unity is the heaviest hitter right now (until the BGE gets a rewrite). I couldn’t get into Unity personally, but I’m sure it’s just a matter of persistence.

Now, regarding this project - if you plan to pursue it long-term, be prepared that it will need to evolve away from a reimplementation of Prime. As you say, it’s prime ‘style’, but… that’s pretty clearly the zappy zappy purple beam we all know and love, and Nintendo is fairly strict about fan projects that way. My catharsis is paying homage by incorporating little elements, like having a single weapon that switches between multiple modes. And you can always have a nameless character wearing colourful armor that looks suspiciously like a new suit variant…

My first game project is now about 12 years old and I’m still fully committed to finishing it. Every day you get a little closer, a little better at the craft. I suppose the only reason it’s taken this long is that I decided to make a game engine halfway through, so … yeah. Maybe don’t do that. Keep doing you.

All the best! I like your reticule design, and the way the camera moves with the cannon is very slick.

1 Like