Friday, December 25, 2020

BaseProject History

I've been hiding a secret.

This isn't my first attempt at trying to remake a flawed game that I enjoy playing. It's not even the first form that this has taken: it's the fourth.

My first attempt at remaking a game had noble intentions. I have a design for a followup to Tinkers Construct fully fleshed out in the background. There are multiple characters, a fun and vibrant story, the game world changes based on the decisions you make and the other characters that you find.


Melvin, Selene, Thruul M'Gon, Skyla, Nemea, and Mr. Slimey. Not pictured: Nixie, Warren

My goal for the longest time has been to take these characters and make a Metroidvania-style game, but with a completely different spin on things. Instead of unlocking new upgrades by wandering around and finding lost artifacts, you would find characters with their own expertise that can make tools or equipment. This is an idea I haven't seen anywhere else and I would love to take it to its fullest.

Unfortunately, the project isn't good enough for me to care about it yet. I am highly invested in making this project a reality and at the same time completely cannot make it real. How did I deal with that? Build up a "new game" and start taking pieces of it. Which "new game" would I build up?


Boho Youyoumu: The worst game that I will play 50 more times

This is a bad game. There's a few levels that are completely bland and lack any kind of personality. Characters are all pulled from the Touhou games and put into this platforming game. Levels are long, linear, and if it weren't for the metroid style upgrades the game wouldn't hold my attention for more than a couple minutes.

Still, I played the game all the way to the end 7 times now. Basic platforming is still a fair bit of fun if you have upgrades that change your ability to get around. The dash skill is lots of fun and the dual swords really make the game feel like a full experience. I'm an absolute sucker for good Touhou music and upgrading characters. I do actually enjoy this a lot, but it's so bad... what should I do about it?


Boho Selene?

How about remake the entire game in the Unity engine? I spent 6 weeks on building out the entire game because I'm was in the middle of nowhere while my apartment is renovated and had no internet access. I figured this would be a safe way to build up skill with making a level, a save system, and inventory management.

I was mostly right. There is a working save system buried in this project. Inventory is mostly working, also buried somewhere in the whole thing. I can spawn enemies, the map is divided up into rooms, there's good camera work, and the terrain is divided up into neat little chunks that can make auto-tiling a breeze.

I misjudged how bad the level layout is in this game. It's not that the level itself is laid out poorly, it's that there is nothing in the level worth looking at. There are only four things on the screen at any given time: blocks, Youmu, enemies, and bullets. I'm surprised I didn't get lost when I was playing the game the first time.

This was my first attempt at remaking something. The whole thing used to work flawlessly. Now there's 20 errors any time I would start up the scene and I can't be bothered to fix any of it. There's just so little of the entire level layout in Boho Youyoumu to work with that the amount of time it would take to create something worthwhile would be as much time as creating the game I wanted to from scratch.

I thought that inserting my own character into the level would make for an interesting test. It certainly was interesting, but in a horrible way. There are huge level layout problems when you try to expand a one tile character - Youmu - into a three tile space. None of the platforms, crawlspaces, or even the general layout of the entire game was built for that. In response I started adapting the character to the level, the level to the character, something inbetween, and realized nothing about this would actually work right because the levels themselves are boring.

If this game won't work, how about something a bit closer to the mark? Say... a game that only had a single apparent flaw on the surface?


I am a huge fan of the combo randomizer of Super Metroid and A Link To the Past. It's such a fun experience to switch games and get items that could be the past and future version of a related character. I am also a huge fan of ROM hacks for Super Metroid and play new ones periodically. A few of them are so good that I keep them around, and two of them are so good they could pass as an enhanced sequel of the original.
 
Randomizers for games appear when there's enough interest for them. Randomizers for a rom hack on the other hand... I didn't think it would ever happen. The characters were the right size, the world was there, and even though it was one of the best games I have played, I couldn't randomize it. I'm sure you can see where this is going.
 
I knew that I wasn't going to be satisfied by making most of this project. It was either going to be a huge learning project, or it was going to end up as a complete remake of a hack of a masterpiece of a game. I bared down and focused hard on the most technical aspects of the hack.
 
The method I was using before to create the level wasn't nearly fast enough to satisfy my urge to create quickly. Fortunately, Super Metroid has a number of tools that can help with the level creation process. SMILE (Super Metroid Integrated Level Editor) can open up the ROM itself and let you edit level data such as tiles, terrain, enemy placement, and more esoteric elements such as PLMs. Here's what an extracted level looks like:


I saved every single level that I could out of SMILE. Any room that was edited manually and was too obscure for the program to open was manually stitched together with screenshots, and all of the rooms were sorted by area. I also sliced up all of the tiles in the game and imported them into Unity; there are 571 tiles in all. I could pull up each level and arrange them properly, then place all of the tiles manually, but this was also too tedious and slow for me.

Unity has the ability to directly compare colors on a pixel that's loaded anywhere, including files on disk. If you compare a group of pixels in a screenshot to another group of pixels in a file, well... it just takes a bit of magic to automatically place tiles in the scene. Here's how I'm doing it currently. It's not commented or done yet, but I'm very proud of the result. I would estimate that it cut down the amount of work from a few days to a few hours just for the main area.
Look at this level. Isn't it neat? Wouldn't you say my obsession's complete?

This was the second attempt at remaking a game. I didn't get very far into it, and I think I gave up after a couple weeks. Or years. Some of the enemies in Super Metroid have unique behavior and recreating them wasn't what I wanted to do yet, and having an accurate world to test my characters was much more of a strength than I had anticipated. I finally have a proper tuning ground for testing different character abilities and tools.

This attempt was mixed into the same project as the first one. I didn't particularly want to rip out the relevant code and I figured the first attempt was just a learning project at this point, so I could build on the thing in a weird space that has all kinds of cruft involved.

The third attempt was also in the same project, but had a new goal. The entire thing was getting bloated to the point of being unusable, and I had my eyes set on a new prize. That combo randomizer is such a fun experience, what if I could do that with three games? I wracked my brain for something suitable and came up with a very tempting idea: vehicle combat upgrades. 
 
There's an NES game named Blaster Master that has a few flaws but is otherwise a lot of fun. I hurriedly wrote up some ideas, played through the game, started the rest of the research and...
It has a remake. IT HAS A REMAKE?!?!
 
I spent the next few hours playing the remake, and such a fine remake it was. Every one of the flaws the old game had was addressed, from adding a save system to redoing some of the crud that top-down segments ran with. They even added a story. How could I do something that had already been done better than I could do?

I couldn't. I can't. It's too much fun and I've played it 8 times now.

There was only one thing I could do with all of the everything I had made and was depending on. I took all of the code, textures, prefabs, materials, concepts, examples, and unfinished things and put them in one place. It took a lot longer than I expected to wrap everything up in a nice package, and even longer to decouple all the assumptions from the ideas. 

212 megabytes of code, textures, and prefabs

This base project is being shared across all of my projects. Other creators will refer to something similar as an engine, when in reality the program you're building on is the engine and the thing you've made is a framework or a skeleton. It's the foundation of a working game or a prototype in and of itself.
 
The best part about this process is that I am not working from scratch. I can simply drop in the project and get to work. Adjust a script here, import a screenshot there, rig up an animation that I've never done before... and suddenly we have a working prototype. It takes more time to analyze a game and stitch together screenshots than it does to import everything after the fact.
 
The worst part about this process is that I have been working on it for so long that it feels like it's taken on a life of its own. The entire thing has the potential to drag me down into depths unto which the lord himself shuns. There is so much history and so much work put into this that I am afraid of what I have made. It's an incomplete mess that still wants to have enemy behavior and pathfinding and mario styled powerups and slopes sonic would be proud of.

I may need to spend more time on the system itself. Not just for the sake of the system, but to polish it up and bring out the full potential of everything a fully-realized level creation engine can be. I can't decide if that fits in the best or the worst part of the project. Maybe both.

I was going to wait and show off the BaseProject some time in the future. Maybe tease out a thing or two, comment on the history, have a full write up somewhere, and show off some of my great coding skills. I don't think that's appropriate for what's happening here. I have so much potential and so much time invested into the base project, and yet I feel like I've done so little with it.
 
Parting Thoughts
 
Some super metroid hacks have a randomizer now. Hyper Metroid, Project Base, and Z-Factor are all great fun to begin with. I'm not keen on randomizing Z-Factor but the others are great.
 
There's a folder with every note on every game that I've ever played with the idea of re-making, cross-randomizing, or just pulling apart because it wasn't good enough. There's detailed notes for re-creating Boho Youyoumu with proper level layouts, various Touhou fangame items, general writeups on 20XX and AM2R, UI mockups for cross-randomized maps, and a breakdown of a card mechanic that builds rooms out of templates.

Circa 9/17/2017

A great tool to go with the auto-build of a level would be a program that can automatically map out a level in a game as you play it, along with any tiles that the game has. I may look into this sometime in the future.

I may go over the entire project in detail at a later date. The project still needs some fixing up and there's quite a few parts tied to other people's work, like Anima2D and a pathfinding tutorial. This project wasn't ever intended to see the light of day and it certainly reflects that.

 
This is the third attempt at writing this post. Trying to explain my feelings with words has made everything real in a way that is hard to accept. I have more time and emotions invested in this project than possibly anything else in my entire life and it's both my greatest failure and my greatest strength in the past five years.

If I can pull off something real with this... just maybe, I won't have to give up yet.

No comments:

Post a Comment

Self Reflection, Avatar Reflection

It started as a joke. One day I decided that my game development was going poorly because I was too attached to my characters. If I messed a...