News:

Don't forget to visit the main site! There's lots of helpful docs, patches, and more!

Main Menu

Super Metroid Maker

Started by gurno, March 24, 2023, 12:38:22 PM

Previous topic - Next topic

TobiMikami

Quote from: gurno on March 28, 2023, 12:07:34 PM
...so I just scoped out your profile - you've made a game engine and rebuilt MP as a 2d game!?!? What the heck I just made a map maker haha.
On that note, yes I've created a pretty advanced Metroid Prime 2D engine, it has every item from Prime and Super Metroid plus Zero Mission's Power Grip. The game map is projected to be at least 1.5 times larger than Prime to compensate for that and make the game more interesting. I have a thread over here although a lot of that media is out of date, but I'll link you to a YouTube video here that shows some of the most recent test plays. https://youtu.be/p00WzyalU2E

Also in regards to SMART, the idea as it was in my mind was not to ask for source code, but if he politely asked them if they would be willing to offer any suggestions or advice for what may be involved with this perse, what tools he may need to use, etc. Source code was never something that really came to mind, more or less since they know.the program itself, if it wouldn't be capable as it is of doing it, what type of external support could make it happen, IE an external program in conjunction with it, as say a HEX editor is to a level editor like SMILE.

gurno

#26
Built a database integration so now entire world maps/room maps can be saved and worked on by several people all at once. It's just the top level information that matters now (level designs, items, enemies, etc.). Whatever rooms the user hasn't saved on the database will be automatically generated when the IPS patch is generated; iteratively build the game with several users and playtest as you go. Now to build some web visualization.

I also added a cursor so I'm no longer just making button macro'd edits.

Edit the room:
https://i.imgur.com/PHDzHll.mp4

Play the room:
https://i.imgur.com/B8N6GCy.mp4

Edit another room:
https://i.imgur.com/fJmJyw2.mp4

My brain hurts. This is fun!

Noxus

I think this is coming along nicely!  :wink:  If possible, see if you can get it to add little corners on the insides of the slopes. Maybe limit the types of tiles it uses to just one type of general slopes/corners/solids tile. Afterwards we can go in and detail things.

gurno

Quote from: Noxus on May 21, 2023, 07:09:07 PM
I think this is coming along nicely!  :wink:  If possible, see if you can get it to add little corners on the insides of the slopes. Maybe limit the types of tiles it uses to just one type of general slopes/corners/solids tile. Afterwards we can go in and detail things.

Thank you! Absolutely agree as well. A web interface will hopefully lend itself better to the tiling work (I think?), so that's gonna be the next part of the project. Shouldn't take me but a few years to complete lol

gurno

Added grapple/bombable/speed booster/x-ray blocks, point-and-click enemies/items, and a boatload of keyboard and mouse macros. Creating a larger cursor to edit 4+ nodes at a time was something I should have done awhile ago lol. Adding items meant I could finally turn off the new game+ setup I had running for testing and get to actually creating some maps!

X-Ray path build + item + grapple:
https://i.imgur.com/cZbOseb.mp4
Play:
https://i.imgur.com/oorYJYD.mp4

Speed Boost Shortcut w/ enemies for fireworks:
https://i.imgur.com/dVFpOUW.mp4
Play:
https://i.imgur.com/fa8Y5q3.mp4

gurno

Update video w/ some of the stuff above: saving worlds/rooms, key progression, and a lot more room customization stuff.

https://youtu.be/Ce9DZMXWXE0

gurno

#31
Got the webapp up. DM me for a link. This is very much an early release/idea but if you want to give it a try you're welcome! This means that multiple people can work on one map at once (for better or for worse). I can generate and upload more builds (world maps) whenever I want, only a few up at the moment. If people get interested in this I'll start uploading some more world maps to work on.

Right now I have all of the map/room data living on my webhost. My desktop app is compiling all of the current builds every 20 minutes and reuploading them to the webapp. You can see the timestamps/links of the IPS patches as they become available for any given build.

For now you have to right-click and save-as because despite how complex this has become I can't figure out fixing content-disposition for download links. If anyone can help I'd be grateful!

World Map: 
• Numbered blocks: 1 == start (Samus spawn point on game start), 2...n are keys to open doors and progress between locked areas. The keys are e-tanks that unlock gray doors.

Basic Controls
• Double click moves in-and-out of rooms/world map.
• Press E+keypress (0-9) sets enemy type, E+click adds enemy.
• Press I+keypress (0-9, 'x' for x-ray scope, '.' for morph ball bomb) sets item type, I+click add item
• X+click toggles x-ray on a block. This means that it will be drawn as normal solid ground (use it on air tiles for secret paths, etc)
• C+click for crumble block
• B+click for bombable
• S+click for shootable block
• G+click for super missile block
• O+click for power bomb block
• Z+click for speed booster block
• R+click for for grapple beam block
• Normal click for toggle air/solid blocks. Used for erasing any of the above, too.

Known bugs:
• I'm lazy and haven't fixed a state variable yet for matting. Toggle the Matte button when you open a map to enable room/region highlighting when you single-click on a room.
• Probably any number of navigation sequences I haven't anticipated yet that will stop the webapp. please have a sense of humor :-)

TO DO
• Add slopes. The red circles on red solid blocks indicate "rounded" blocks that allow Samus to run smoothly and create terrain. It's autopopulating from the desktop app right now. Getting that logic into the webapp is something I'm going to think on as it changes wrt a lot of surrounding elements.
• Add water/lava. Not nearly as hard as the slopes. Need to add the ability to set these like on the desktop app.
• Add more navigation! In-game maps are weird. I coded a lot of it but it's still weird and I need to get that across the line.
• Everything else. I haven't even touched tiling (and likely won't) beyond what the build process auto-applies. Rooms states, tilesets, music tracks, environments, triggers - it's all a lot to consider but maybe doable down the line.

The interface is sluggish/clunky at times because I taught myself all of this stuff and it's a lot of data on one screen. Hopefully it isn't too obnoxious. The double clicking to move in-and-out means I/you mistakenly leave the room editor without saving, so be careful for now until I come up with something better and change it. Still deciding how to give user feedback on what items/enemies are already there but I imagine for now if you really need to know you can just erase and redraw until I can add that.

Seriously loads of work to do but it's pretty crazy to just have an old laptop in the corner of my office area building patches based on the webapp stuff. I modified some maps and tested a couple downloaded patches and all seemed to work. I used the NTSC Japan/USA "(JU)" ROM to patch and play. The webapp only provides the IPS patch.

https://i.imgur.com/ac5b25b.mp4

gurno

Fixed a bunch of stuff. Added slopes and erosions! Added feedback on what items/enemies you have toggled to place and you can mouseover items/enemies to see what is placed.

Eroding a room to make it bigger:
https://i.imgur.com/wZofYv2.mp4

building a bridge and adding slopes to create a shinespark run:
https://i.imgur.com/cCT2qcN.mp4

gurno

Here's a link to the readme: https://bit.ly/3Z6GwwK
Here's a link to the webapp: https://bit.ly/3PrPhNN

Dinar87

This looks cool!  :yay: Can this be used for any metroidvania projects, or is it for hacking metroid only?

gurno

Quote from: Dinar87 on October 03, 2023, 03:41:24 AM
This looks cool!  :yay: Can this be used for any metroidvania projects, or is it for hacking metroid only?

Thanks! I've kept it interfaced/modularized as much as possible so that it can be plugged into different games if you code it out. Super Metroid is mapped/navigable/writeable with the ROM explorer classes I've built. I'm imagining other games can be coded so long as an understanding of the ROM exists. I stand on the shoulders of giants who have done incredible work documenting the Super Metroid ROM such that I could comfortably write data types and database it all.

Right now? There is a REST API in place that the web app is utilizing. What this means for other games development is if you wanted to take the overworld map data and/or customized room-view level data you can draw it down in JSON format via REST read operations. I imagine if you were a game developer who wanted to take the overworld map layout including keys, doors, regions, and explorable region information you could just pull it down and plug it into your own layout. Here's a snapshot of map #4's overworld map nodes that contain doors:



Note that each side of the door is populated (see the first two rows) to inform the gamebuilder of how doors work and should be key'd to the game's logic. Also of note are the 'tech' column noting keys (none in this screenshot), 'region' (e.g., Crateria, Brinstar, etc), 'onpath' (explorable regions unlocked by keys), 'node_type'/'closed' (walls and explorable space; used by the map and for maze generation), 'route_start' (A* seeding), 'room_id' (what collection of nodes make up a room bounded by doors/walls), and so forth.

There is a similar REST endpoint for the individual rooms customized by the app that go into the game itself. It's a lot of the same information but extended to include block_type info (tiling, slopes, special blocks, etc - game specific), enemies, items/PLM's, protected status (i.e., "don't edit me" blocks like red scrolls, door blocks, load station PLM's, perimeter nodes). This would be more game specific but also probably useful to a developer wanting to use this interface/layout.

On the topic of block types: I am slacking! I haven't touched anything since fixing the IPS download links last month (you can now just click like normal to download). I know how to clean up all the tiling and expand the enemy selection using just some simple SQL! Right now I have other things going on in my life that demand my attention but when I can I will get that fleshed out to make the builds prettier and more robust. The idea will be that since I can database the vanilla ROM I am going to extract all of the relevant possibility sets from the game and use that as a reference for builds and level creation. This should normalize all palettes/enemies/block types/slopes much better than any procedural coding can. It's so nice to have this socked away in SQL Server / MySQL. Up until this idea I've just corner-cased a few sets that seemed alright looking enough so it's a relief that I had this realization  :^_^:

I'll keep updating here once I can work on this stuff again. Until then I will make sure the server stays up and building new patches every 20 minutes for people to modify and download.