Long time no see! Although it hasn't been a full 5 years like I'd promised, let's go over the progress that was made since the last devlog.
I'd briefly discussed this previously, but I developed somewhat of a Tech Demo, showcasing a non-canon scenario used to test the engine's capabilities, as well as personally get a grip of how to design battles and scenarios with it. The result is a fully-fledged Sans-esque fight against my character, featuring not only the fight itself, but everything around it, such as dialogue that changes when you die or win the battle.
I'm not exactly one for wanting to put my characters out there, so this tech demo will not receive a GameJolt release. However, the tech demo is available on the Discord Server as linked in the game description, if you're interested.
One thing I would like to clarify for future reference though is the terminology I will be using to refer to the game's state before I started developing the new engine. Most commonly, I refer to it as "MTO GMS1", which is short for "Mysterytale Online: GameMaker Studio 1", as that version of the game was developed in GameMaker Studio 1.4, wheras the new engine is being developed in GameMaker Studio 2, which has since rebranded to just GameMaker. So generally, "MTO GMS1" and "MT GMS2" make sense as names to differentiate between the two versions of the game.
That said, however, that naming convention requires knowledge of the software being used to develop the game - which isn't helped by the fact that the Server and its extension used for the GameMaker Studio 1.4 version is called "GameMakerServer", which is also abbreviated as GMS. Henceforth, I'd like to differentiate between the two versions by referring to the old version as something along the lines of "Mysterytale Online Legacy". I hope that's something we can all get used to.
I will discuss some things regarding the Legacy version of the game throughout this devlog, so it's important we have that settled.
One of the features I'm occasionally asked about regarding the game is the topic of "admin skins". Older versions of Legacy used to have admin-exclusive skins, which was eventually just reduced to me having a unique skin based on my character. In the 1.0 Beta of Legacy, my character actually has a small amount of unique attacks for PvP, and while playing that version, a friend of mine liked those attacks enough to suggest making a proper dedicated fight for the character, which was something I recall attempting once back in 2017 or so for something unrelated.
Either way, I thought it'd be a nice way to test the engine's capabilities and started work on it. While it's nothing crazy, it still utilises a lot of what the engine can do. So I may as well cover some of those things quickly.
For starters, the map used for this scenario is a recreation of the final corridor in the new style of Subspace. There isn't much significance to that other than it just looking nice.
Before the battle even starts, the player is already attacked on the Overworld, which makes for a fun use of the Deltarune bullet area mechanics. The bullet area is only temporary, and attempting to leave it will block the player off via walls that get closer as you approach - the same ones that show up during various Mettaton scenarios in the original game.
Once the battle starts, you can see a custom UI that was made for it - a use of the "battle skin" feature. You can also see what is kind of a partial recreation of the introduction to Sans' fight in the original.
The fight is overall designed to be kind of a twist on the original Sans fight. While the fight uses reskins of Gaster Blasters and KARMA, it introduces new bullet types and has plenty of unique tweaks and quirks. One of my favorite twists is the addition of "Superguards". Depending on how you aim your attack you might just take damage yourself, so you can't just go on autopilot for it.
It's also been the first time in a while that I myself made some sprites. While they're not great or anything, they've at the very least passed the bar of quality for UNDERTALE sprites - which isn't saying much, but that's all they have to do.
Outside of that, the battle makes use of a lot of other functionality - plenty of save file manipulation, with the dialogue changing on repeat playthroughs - unique enemy reactions to player attacks - unique enemy reactions to being spared - so on and so forth.
As I said, I'm not too into putting my character out there, so I'll leave it at that. If the fight interests you though, you can still try it on the Discord server, where I'll also release other smaller tech demos in the future.
So, let's get back to new additions to the engine! I won't go over smaller changes like some accurate fixes, but there's still plenty to go over.
First things first, random encounters! While walking around, you decrease an invisible step counter. When it reaches 0, it starts a battle. When you kill enough monsters, well...
I think we all know what happens.
In addition to this, the random encounter system has some optional features not seen in the original game, such as using a dynamic list of encounters that can all be attributed different weights, restricting encounters to not feature more monsters than remain in the population count (i.e. can't get a 3 monster encounter when you have 1 left to kill), and some optional adjustments to the "But nobody came." encounter that make it less janky. Additionally, maps can have safe zones in which the player can't trigger random encounters.
Field enemies from DELTARUNE finally make their debut - but with a little twist. Generally speaking, they operate the same as in DELTARUNE, but with one difference to make them fit better into the context of UNDERTALE.
If you spare or kill any of them, then flee the battle...
Spared and killed monsters won't be present when the battle starts again!
In fact, if you spare or kill every monster in the encounter, the field enemy will permanently disappear. If you spare all of the monsters in the encounter, it might even turn into a friendly NPC.
Speaking of DELTARUNE features, here's another one.
TP and grazing have been implemented as an optional feature! They work just the same as they do in DELTARUNE. Grazing gives you TP and reduces the remaining time for the enemy's attack. This might seem a little confusing to those used to the TP system in Mysterytale Legacy, but worry not.
Legacy's TP system still exists in the form of MP. There isn't much more to say about it as I have yet to implement the spell system, but for the time being.. MP is there to serve the functionality as Legacy's TP.
Another new feature taken from DELTARUNE is the ability to Defend against incoming attacks, which will reduce damage by roughly 33% and give you 16% TP on the spot. Though with the already low damage values compared to DELTARUNE, 33% might not be that much and I may adjust this value in the future to fit Undertale's lower number systems.
Testing has been a lot easier thanks to the new Debug Menu I've added, loosely based on the one from Kristal. It still doesn't have all the features I intend to have for it when it's finished, but they help plenty with testing various things.
A lot of internal stuff was updated and improved a lot. Every single database was refactored to use string-based IDs rather than numeric IDs - think the change made in Minecraft when you were able to give yourself a diamond with /give [player] minecraft:diamond, rather than /give [player] 279.
Additionally, I made some changes to Save Files, making them easier to work with and making it possible to add new things to them without breaking the game. Additionally, the game can now detect edited save files and will load up the iconic Dog Error Room from the original game when loading one.
A small new quality of life feature - in-battle item descriptions! These pop up when you hover over the respective item, logically. These will also be used for the upcoming Spell and Skill systems.
Now for one of the by far largest additions to the engine. Party Mechanics! Party Members are now fully functional in battle!
They work very similarly to Deltarune, though not entirely the same. When knocked out, they will go down to half their max HP into the negatives and recover 1/8th of their health every turn. The only difference is that FIGHT attacks will play out one after the other, rather than at the same time. Here's what it looks like when a turn plays out:
That should be about the gist of it regarding updates to the new engine. I'm quite happy with how things are turning out, and it's not much further until the engine is done. It's primarily just missing some battle features and Shop mechanics.
If you're interested in watching video footage of most of the changes and additions I've discussed in this devlog, you can watch some here: https://youtu.be/G3L6f7SDyCI
Here's to hoping I'll be on time for the next Devlog. See you next time!
1 comment