Game
JEVILSWAP

2 years ago

Hey guys, just wanted to update y'all, since it's been a bit.

Progress on the demo is moving along steadily in the background, but there's still a shitload of work to be done...

In the meantime, here's some technical mumbo-jumbo to keep you satiated! :2


Before we begin...

No: this isn't a filler post.

I honestly just, really like talking about this kind of stuff, and I know there are fans of my work who have shown interest in the past about the insides of my games.

Since this game has a decent following, I figured some of you guys would be interested in this!

NOTE: this article doesn't really talk about anything new in regards to the game's "public development" (a.k.a. this is nerd shit you probably don't care all that much about), it is simply me discussing some interesting parts of the games code that I'm proud of!

Please enjoy my ramblings!


Discussing the Cutscene system...

image.png

Without spoiling too much, I'd like to talk about how our dynamic Cutscene engine (massive kuddos to my assistant programmer, TheEternalShine, for making this.)

Rather than how I used to do it in GameMaker Studio (using an alarm with listed states and wait-times), this allows me to program a entire, full-length cutscene in one event, which can then be run sequentially, as if the computer was checking off a list.

For example...

		
			var c = cutscene_create();

c_addDialog(c, "* Hi! This is a test!");
c_startDialog(c);
c_playAudio(c, snd_select, 0, false);
c_addDialog(c, "* Didja hear the sound?!{sleep 20}&* Crazy, huh?!");
c_startDialog(c);

cutscene_start(c);
		
	

This is a fairly basic cutscene that:

  1. Types out a introduction string.

  2. Waits for the previous dialog to be destroyed (after reading.)

  3. Plays a sound.

  4. Types out a reaction string.

  5. Waits for that dialog to be destroyed (after reading.)

  6. Ends the cutscene automatically.

There are a plethura of other functions, as well as the ability to make your own using cutscene_custom, which (ironically) all other functions use to actually run!

For example...

image.png

TML, the original creator of the engine we use, has a built-in GMU system, that allows you to make complex animations, call external strings/images, and more. I converted one of the functions, Anim_Create(...), to a script that I can run mid-cutscene, and depending on an optional argument at the end of the function, I can make it wait for the cutscene to conclude or just immediately conclude once the animation begins.

Cool, huh?!


Discussing Language support...

image.png

As briefly mentioned before, TML's GMU features houses functions that allow you to externally call text and what not. We decided to make a Japanese translation with the help of our small translation team using this system

image.png

It's been brought up how simple it would be to allow for custom language support, which I may or may not implement in the future. However, text is very simple to implement/modify in this engine, which is very helpful when working on the aforementioned cutscenes.

Would you guys want language support in the future?


Discussing why I hated Puzzles (character arc)...

image.png

In Undertale, a core component of the gameplay are the Puzzles. However, across my last 4 ~ 5 years of programming Undertale fangames, I've always tried to avoid them for whatever reason.

Maybe... I was intimidated? Worried that they might be too simple to solve? I'm unsure, but I attempted them recently and to my complete surprise: this shit was easy.

image.png

My puzzle system is composed of two parent objects:

  1. A key object.

  2. A lock object.

To absolutely no ones surprise, the two interract by the keys unlocking the lock as specific states are matched. For example, in the image above, you can see "Frisk" has pushed the rocks onto buttons. Those buttons are our key objects, and the spikes that are unlocked is our lock object.

image.png

In the room, the creation code of all three of our keys state that they're targeting inst_62A9EFF7, which is our lock object.

image.png

In our lock object, there is some very simple code:

  1. If unlocked is false, continue.

  2. If locks_opened is greater than or equal to the required amount of locks, continue.

  3. Run event_user(0), which basically runs a custom function (if supplied), usually of which a cutscene.

There's a few other things, but hopefully this gives you a good idea of how puzzles work. I dunno if this is how Undertale did it, but it works really well for me.


In conclusion...

image.png

Underswap's doing great!

I'm hoping to get the demo in a somewhat playable state by the end of this year for playtesting and bug-hunting.

Here is what I mean by "playable state":

  • Multiple encounters

  • Story events fully implemented

  • Mostly finished sprites/music

  • At least placeholder dialog for everything

  • Achievable endings

So far, I have quite a bit of every one of those programmed in, as well as much more! It still baffles me just how much we have gotten done in the past few months.

Again, we cannot thank you guys enough for your consistent support! We hope to deliver you guys the best experience we can provide!

image.png

- jevilhumor, 11/15/2022



9 comments

Loading...

Next up

im so hapey ! big grin !

Hey! Special thanks to @daBLINSKY27 , @_pancakez , and @ZaxentoTheGreedy for being my top supporters this past month! I really appreciate y'all, thanks for your support!

DEVLOG 005 - Me when the game works (TRANSLATORS WANTED)

due to recent events 👻

Happy birthday, Undertale! Development has been going well, and we're close to reaching a massive milestone. The game looks very different now, and plays pretty different too! I hope y'all look forward to its release.

noelle joined

That final update I've been talking about

Happy eighth, Undertale!

Progress is going smoothly, and development on the second-to-last fight in the game has begun. Most of the cutscenes are also done!

The unused song from the Undertale Newsletter reminds us a lot of old Happstatheatre, haha!

Wheel of Misfortune

I always forget to post this when I'm on Gamejolt but thank you @daBLINSKY27 , @ZaxentoTheGreedy , and @_pancakez for your continued support. Y'all're rockstars.