News:

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

Main Menu

Re-Boot Engine Project - GameMaker: Studio 2

Started by Scooterboot9697, August 19, 2023, 08:29:41 PM

Previous topic - Next topic

Scooterboot9697

Re-Boot Engine Project
Made in GameMaker: Studio 2
Github | Download


Disclaimer:
This project was created for entertainment and educational purposes. Due to the nature of this project, I ask that you do not advertise it in any form, in any place, unless given permission.

The 'Metroid' IP is owned by Nintendo, and given Nintendo's actions against fan projects in the past, they may shut this project down.

If you are a journalist, Youtuber, or what-have-you, I ask that you please DO NOT share articles, videos, or any piece of media concerning this project anywhere, without permission, so that this project may go as unnoticed as can be.

Thank you for reading and (hopefully) understanding.


That all said, I hope you enjoy what I've created. This engine project is primarily created as a tool to teach myself gamedev programming, though I am also sharing it as a resource for others to make their own games with. However, in its current state, a lot of heavy lifting will still need to be done before a finished game can be made with this. Thus, consider this project heavily WIP/in an alpha state.

[spoiler=Videos]
https://www.youtube.com/watch?v=A2PYlelQSek
https://www.youtube.com/watch?v=ykkW0OXWfMg
[/spoiler]

To-do list:
[spoiler=UI Code Rewrite]
The UI (main menu, pause menus, etc.), gameplay functionality wise, works great. However, the internal code for it is kind of a mess and difficult to work with. It's hardcoded with arrays in a lot of places.

Ideally, I want to completely redo it using Data Structures and Structs to give flexibility in modifying it as needed.

In addition to all of this, the map may be rewritten.

Also mouse support for everything UI related is planned (but not for actual gameplay).
[/spoiler]
[spoiler=NPC Code do-over]
NPC code is mostly fine, but I think I overcomplicated certain aspects regarding damage and etc.
[/spoiler]
[spoiler=Rest of the game's content]
Aside from system level stuff, I'll also need to flesh out the rest of the types of enemies, bosses, and etc. Room states is a thing that is system level that I need to figure out, and it'd give way to making escape sequences a thing.
[/spoiler]
.. and whatever else I eventually add to this list. It's constantly evolving, but not sure how frequent I'll update this.

[spoiler=Default Controls]
[spoiler=Keyboard]
Arrow Keys = Movement / Menu navigation

Z = Jump / Menu Select
X = Shoot / Menu Cancel / Pause Screen switch subscreen
C = Run

S = Aim Angle Up
A = Aim Angle Down

D = Aim Lock / Moonwalk
V = Quick Morph

Q = Item Select
W = Item Cancel

Enter = Pause / Start
[/spoiler]
[spoiler=XBox Controller]
DPad / Left Stick = Movement / Menu navigation

A = Jump / Menu Select
X = Shoot
B = Run / Menu Cancel / Pause Screen switch subscreen

Right Trigger = Aim Angle Up
Left Trigger = Aim Angle Down

Left Bumper = Aim Lock / Moonwalk
Right Bumper = Quick Morph

Select = Item Select
Y = Item Cancel

Start = Pause / Start
[/spoiler]
[/spoiler]
Controls are rebindable via the in-game Control Options menu.

[spoiler=Debug Controls]
Press '/' on your Numpad to cycle debug mode (numlock may need to be enabled).
Pressing it once toggles debug mode with hitbox and other info visible.
Pressing it again toggles to a simpler debug mode that only shows FPS and speed counter logic.
Pressing it a third time disables it.

While debug is enabled, the following buttons are active:
- press 0 to refill health & ammo
- press 9 to face toward screen / activate elevator pose
- press 8 to set health to 1
- press 7 to acquire all abilities
- press 6 to acquire a random ability
- press 5 to enable/disable godmode
- press 4 to toggle hyper beam
-no clip controls: press numpad 8,5,4,6 to move up,down,left,right
- hold shift to reduce fps to 2
- hold ctrl to increase fps up to 600 (may not always reach that high) (requires vsync to be disabled)
[/spoiler]

[spoiler=Speedrun Techniques]
Techniques from vanilla SM:
-Arm pumping
-Short charging
-Ledge grabbing & down grabbing
-CWJ
-Mockball
-Crystal Flash
--SBAs are not implemented but are planned.
-Instant Shine Sparking has been changed from jump+direction to run+direction.
Note: Hitbox and momentum logic has some minute differences from vanilla SM, so don't expect things to be 1:1.

New techniques:
-PBase's stationary spin jump (hold run and press jump while standing still)
-PBase's unmorph to spinjump (hold run and press jump while morphed)
-Accel Dash short charge (dash and then immediately shoot to cancel the dash--momentum is carried to allow a quick speed boost)
-Speed Boost wall jump (functionally mostly identical to Dread)
-Accel Dash enables redirecting shine spark by holding a different direction and pressing the run button.
[/spoiler]

[spoiler=Gameplay tweaks]
Inside the obj_Player Create event, there's a list of variables near the top:

// "Arm Pumping" is a classic SM speedrunning tech
//Tapping any aim button will shift the player forward one pixel during grounded movement.
armPumping = true;

// Global speed modifier for horizontal movement. Acts as a flat addition and does not necessarily affect momentum.
//Set to 0.5 as an alternative to 30hz frame-perfect Arm Pumping. Note: Unlike arm pumping, this will affect jump and morph movement.
globalSpeedMod = 0; // default: 0

// Continue speed boosting/keep momentum after landing (also applies to spider ball)
// 0 = disabled
// 1 = enabled always
// 2 = enabled, but disabled during Gravity-less underwater movement
speedKeep = 0;

// Run animation tweak
// Set to true (default) to use a smooth run anim speed
// Set to false to use an anim speed that is much more closely tied to the speed counter
// The latter is much better at giving feedback for super short charging
smoothRunAnim = true;

// Wall jump during speed booster
speedBoostWallJump = true;

// Cancel Shine Spark mid-flight by pressing jump
shineSparkCancel = true;

// Low-level Shine Spark flight control / Shine Spark steering
//press directions or angle buttons to slightly change flight direction
shineSparkFlightAdjust = false;

// High-level Shine Spark flight control when Accel Dash is enabled
//activated by holding a direction and pressing Run during flight (consumes Dash charge)
shineSparkRedirect = true;

// Make diagonal sparks slide up/down walls while Chain Spark is inactive
diagSparkSlideOnWalls = true;

// Prime-like trail effect for Morph Ball
// Disables normal after images for Morph while set to true
drawBallTrail = true;

// Allow Crystal Flash to clip you through tiles
// Can easily get you stuck if you don't know what you're doing
crystalClip = false; // default: false


Also inside the obj_PauseMenu Create event is a variable for switching the style of Samus in the inventory screen:
useRetroPlayer = true;
[/spoiler]

[spoiler=Credits]
Most assets are from the original Super Metroid, with some exceptions:

  • Thanks to AlexR/Physix/Mead for his well-designed extended Samus animations.
  • The pause screen Samus sprites are from Begrimed's Project Base, which is based on SM's ending sprite, with edits done by Black Falcon and Quote58. Other edits were done by me, namely the Power Suit shoulders (I used the Power Suit from here as a guideline).
    There is an alternative set of pause screen Samus sprites that can be toggled within the code. They were made by mccad00 and AlexR/Physix/Mead.
  • Also credit to mccad00 for the extended Space Pirate frames. (Shooting animation for Space Pirates was done by me, however.)
  • Norfair theme was done by TrojanHorse711 [spoiler]https://youtu.be/0zfHZyZwJzc[/spoiler]
  • Thanks to AuroraFRFX for helping with Kraid sprites (namely separating the arm from the body).
  • Also RaccoonSam
    [spoiler]For his 'Dab' pose sprite, which can be found in the code. (There's another meme-y sprite hidden in there as well, made by me.)[/spoiler]

Extensions used:
[/spoiler]

ocesse

Thanks for sharing your game!
I'm going to have fun for today in the afternoon.

Quote58

Wow, this looks awesome! I thought this was discontinued long ago, so I'm glad to see it was still being worked on.

Also in terms of credits, that subscreen sprite is a combination of the original game for the base, and then mostly Black Falcon for the gun and the other components, and then myself for some edits. The main credit goes to Black Falcon for his very rad arm cannon graphics

Scooterboot9697

Quote from: Quote58 on August 20, 2023, 11:11:23 AM
Wow, this looks awesome! I thought this was discontinued long ago, so I'm glad to see it was still being worked on.

Also in terms of credits, that subscreen sprite is a combination of the original game for the base, and then mostly Black Falcon for the gun and the other components, and then myself for some edits. The main credit goes to Black Falcon for his very rad arm cannon graphics
Updated! Thanks for telling me.

Yeah I already knew it was based on the vanilla game's ending, I just worded it poorly. lol

Scooterboot9697

Engine Updated!

Changes:

  • Pushblocks can now be pushed via Bombs and Missiles (excl. Power Bombs).
Fixes:

  • Fixed wonky after images on NVIDIA cards.
  • Kraid's finger projectiles now properly share his palette.
  • Charge spread bombs no longer ignore moving solid collision.
  • Fixed being able to activate quick morph during grapple swinging.
  • Fixed clipping into tiles by being in a 2 block tall space and pressing jump and down.
  • Fixed being able to accel dash in elevator pose.
  • Fixed being able to quick morph in elevator pose.
  • Fixed pushblock sound endlessly playing if you grapple pulled a pushblock while going through a door transition.
  • Fixed frozen NPCs being moved very buggily by moving solids. Also fixed their platforms not moving with them.
  • Fixed being able to power grip climb through impossible pathways.
  • Fixed Interact Station sound looping endlessly if you paused during it and restarted from last save.
  • Interact sound loop and pushblock sound loop will now pause in the pause screen.

VacantShade

Awesome work on this! Really cool to see it finally coming together.  :^_^:
Super is probably one of the games I enjoy most because of the gameplay, so I'm excited to see what projects spawn from this!

TobiMikami

This is awesome man! I still have the original version, your Space Pirate code was especially helpful when I was first learning how to write enemy AI with Game Maker Studio. Looking forward to more cool shit man, I'll definitely have to check this out tomorrow or sometime soon.

richardba

#7
Hey I saw that there is a SM playthrough, how can I play it too???

This engine is amazing! Nice job!

/edit

Three things I noticed

1. When Samus goes through a vertical gate, she loses momentum and return to the previous room. I don't know if this intended or not, but it is super annoying, maybe close the gate as soon as she traverses vertically or add a little bit of displacement, the second one may create some bugs, though.

2. The minimap system is missing any indicator for items. I think that an ▣ for novel items and ◻ for grabbed items would be nice. If Samus view an item with the X-Ray visor, it would add the indicator. The item indicator could also be swapped for ⛝ if there are multiple items, and once all are grabbed it could change to empty.

3. I also don't know if it is intentional or not, but the Speed Booster wall jump is super hard to perform, it took me more than 10 attempts to perform it to the fullest in the Water room

But anyway, it is AMAZING and I can't wait for the full release

Scooterboot9697

Quote from: richardba on January 05, 2024, 05:01:18 PM
Hey I saw that there is a SM playthrough, how can I play it too???

This engine is amazing! Nice job!

/edit

Three things I noticed

1. When Samus goes through a vertical gate, she loses momentum and return to the previous room. I don't know if this intended or not, but it is super annoying, maybe close the gate as soon as she traverses vertically or add a little bit of displacement, the second one may create some bugs, though.

2. The minimap system is missing any indicator for items. I think that an ▣ for novel items and ◻ for grabbed items would be nice. If Samus view an item with the X-Ray visor, it would add the indicator. The item indicator could also be swapped for ⛝ if there are multiple items, and once all are grabbed it could change to empty.

3. I also don't know if it is intentional or not, but the Speed Booster wall jump is super hard to perform, it took me more than 10 attempts to perform it to the fullest in the Water room

But anyway, it is AMAZING and I can't wait for the full release
I've recreated a small number of SM's rooms, but have not recreated the entirety of SM, and so far I don't really plan to. Right now this is a playground and learning project. I'll make a game with it someday, but currently unsure if the first game I make will be a fangame or an original game.

Also:
1. Keep holding jump when going up through a door.
Though, I may tweak its behavior later.

2. Map and UI are in need of an overhaul. So just treat it as WIP for now.

3. Speed boost wall jumps work identically to Dread... Or mostly identical, anyway.
If you haven't played it, I'll try to explain it as best I can. While speed boosting, walljump input is modified to be more simple, so that pressing left or right is not needed. Basically, when you spinjump into a wall during speed boost, let go of left/right, and just press jump. Since spinjumps always move forward, you can let go of directional input during it without ending speed boost, giving you time to readjust your directional input before and after the walljump. There is also a grace period of about ~12 frames when contacting a wall wherein speed boost does not end right away.

TobiMikami

Are you still using Physix's original map code? As far as I'm aware, it's supposed to have special squares for items but I have no clue how they actually work, that shit is a mess. He actually responded to my questions about it recently, although he couldn't offer a ton of useful advice either.

Scooterboot9697

Quote from: TobiMikami on January 06, 2024, 01:42:09 AM
Are you still using Physix's original map code? As far as I'm aware, it's supposed to have special squares for items but I have no clue how they actually work, that shit is a mess. He actually responded to my questions about it recently, although he couldn't offer a ton of useful advice either.
Nope, I never touched his map code. I wrote my own, but it's a bit barebones atm.

TobiMikami

Oh thank God. Your system is probably gonna be easier to work with, the last version of this engine you did cleaned up and simplified a lot of the same things he did with his.