00:00
00:00
UnevenPrankster
God gives his silliest battles to his funniest clowns
Discord: unevenprankster
Matrix: unevenprankster@matrix.org
XMPP: uneven@disroot.org
PFP by @panpikidaan

Age 20, Male

Game Development

Brazil

Joined on 12/4/18

Level:
31
Exp Points:
10,489 / 10,670
Exp Rank:
3,089
Vote Power:
7.27 votes
Art Scouts
6
Rank:
Town Watch
Global Rank:
51,685
Blams:
18
Saves:
142
B/P Bonus:
2%
Whistle:
Normal
Trophies:
7
Medals:
50
Supporter:
1y 9m 26d

The Postmortem of ENA: Decimation Journey's Demo

Posted by UnevenPrankster - June 19th, 2022


iu_671237_7149040.webp

Hi, it's me, the Solo Programmer/3D Modeler/ENA & a few other chrs VA behind the ENA fangame that swept the natio- I mean Newgrounds. Me and lots of other folks like @RoligtJackson have worked hard these past 2 months on a silly SMT-like experience many have enjoyed in spite of all the issues it had due to time constrains.


Today I'll share the deets. I know you love the deets.


The background of the Main Menu

iu_671238_7149040.webp

From the start I wanted a really sick 3d background. I made it happen sometime after I had modeled the landscape around the Ice Cream Tower. The idea is every next floor will change it. I'll be sure to implement this in the first chapter.



A look inside the shops

iu_671239_7149040.webp

Câmbio's store gives the impression of being bigger than it actually is modeled. I'll add more detail in the future but worked well.


iu_671240_7149040.webp

Monumentia's hair is a shader comprising of a "space" texture sampled by the screen; this makes it as if the space is being taken entirely by it. The sampling is not aspect-corrected so its not stretched well correctly but I used a vec2 to slightly correct it.

shader_type spatial;
render_mode unshaded;

uniform sampler2D tex : hint_albedo;
uniform vec2 scale = vec2(1.0);

void fragment(){
    ALBEDO = texture(tex, SCREEN_UV * scale + (TIME * 0.2)).rgb;
}



Map Making is hard

Godot Engine's Tilemaps are pretty cool, but harsh to work with in some instances. Like defining the map.

iu_671241_7149040.webp

Why yes, I did use random textures to define every single type of tile. This was totally a great idea. Yep. Didn't have time to make an actually nice map maker though, just gotta roll with what you know.



THE DOOR

iu_671242_7149040.webp

I'll give the shader. Just don't ask me about the DOOR.

shader_type spatial;
render_mode unshaded;

const float PI = 3.1415926535;

uniform float power = 0.5;
uniform float vacuum_power = 0.05;
uniform vec4 albedo : hint_color = vec4( 0.5, 0.5, 0.5, 1.0 );

void fragment( )
{
   vec4 CENTER_VIEW = INV_CAMERA_MATRIX * vec4( WORLD_MATRIX[3].xyz, 1.0 );
   vec2 diff = ( normalize( -CENTER_VIEW ).xy - VIEW.xy ) * ( -CENTER_VIEW.z );
   float to_center = length( diff );

   ALBEDO = albedo.rgb * textureLod( SCREEN_TEXTURE, SCREEN_UV + ( normalize( diff ) * sin( to_center * 2.0 * PI - (TIME * 2.0)) * power ) * vacuum_power, 0.0 ).rgb;
}



Talking about Dialogue

Surprisingly simple. Signals are pretty sick.

iu_671244_7149040.png

I implemented it by passing a bunch of strings the system consumes. When it's done with a string or the player is skipping, its ready to go to the next or stop for good.

iu_671243_7149040.png

And typewrite is passed the pitch at which to play the weird voices I made so it sounds more masculine/feminine. Fun fact: they are all toki pona. See if you can figure out what they mean exactly.



GUARDIAN

iu_671245_7149040.webp

I wanted the stairs to look like they are moving but didn't have time to make a nice texture and everything so I just modeled it all. The GUARDIAN themselves will probably get a touch up in the future but it was a fairly odd design I had from the beginning. I wonder what the next GUARDIANs will look like.



The Ending Screen

Click this, its very funny. You should check out @DemisurgeX too. Great music. And @saphtea for that banger opening theme.

iu_671246_7149040.png


Free Open Source

It's on Sourcehut. I don't put things on Github anymore, I hate where they're heading. I want to contribute money to Sourcehut in the future for their great git hosting.


The Battle System

The most utterly complex thing I've ever written. Weeks of time spent, lots of bugs fixed and found, refactoring, just utter chaos.

iu_671247_7149040.webp

And still not everything was implemented like selecting a party member to heal. Time was not on my side, oof. But it works, darn it.


Not Very Fond of Godot Engine

Rant time.


Did you know Resources, you know, Godot's version of ScriptableObjects, in spite of how useful they are and easy to save/load to disk, can reload without your knowledge? I only learned this when leaving the shops reset your entire stats for some reason.


Turns out Godot just throws things away and reloads with enough scene changes. I'm not even using C# for it to use garbage collection and I had to move player resources to an Autoload to keep them from being reloaded on a whim. I hate this.


Godot's input handling means there may be race hazard-style bugs when implementing UI that responds to key presses. It resulted in UI locking out for a few players because things responded in a hard to reproduce order. I did not use most of their GUI nodes because they are better meant for mouse input. And generally very confusing. Their input mapping is incredible though, I'll give 'em that.


Is it easy to use? Yes. Is it great to prototype stuff and get something going quick? Yep. But wow, this engine has been screwing with me when I least expect it since when I first collabed with Jackson and the others on -FUTURE- LOVELESS. Signals weren't even firing sometimes back then.


I'm suspecting it may just be the time to be free from this nonsense and go engine-less just like I wanted to long ago. I did it thrice, can do it plenty more, specially now that I'm equipped with more knowledge. It'll even still be on Newgrounds too as far as I can manage. Just anything to be away from the pain and suffering and have more joy programming videogames.


Computers are weird, man.



Epilogue

It's amazing that more than 10k people have played this fangame. That's a bunch of people, won't even fit a theater anymore like I usually tend to vision. A lot of people didn't really follow us and that's kind of lame but its ok. Some people just wanted a gosh darn ENA game and I delivered something. It's also kind of sad JoelG hasn't really acknowledged it. I figure he might just be really busy but I don't really mind if he never pays attention to it. I hope in the following months to make this an even sillier and fantastic fangame, maybe even one of the greatest of all time, that'd be something. If you wish to follow what we're doing, links below. Follow everyone. Or I'm going to make the battle encounter sound be a boing sometimes. That was a threat.



Stay well and have a good one.


Tags:

10

Comments

GET THEM FRIES UNEVEN!!!

#GetThemFries #EDJSweep

@DemisurgeX no! It sent me to a sketchy website instead T^T

@DemisurgeX :Pleading_Emoji:

Pretty cool! Seeing Godot in action really inspires me to use the program someday! Not any time soon, but definitely in the near future!

For what it's worth (as in, zero dolla) it's the best of all the engines I ever used.