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
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
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.
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.
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
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.
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.
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
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.
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.
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.
- Uneven Prankster (Programmer, 3D Artist)
- RoligtJackson (Artist)
- FalcoTz (Musician)
- Ugasisvelta (Voice Actress, Beta Tester)
- DemisurgeX (Musician, Beta Tester)
- saphtea (Musician)
- Dryest (Musician)
- OrchardPalace (Artist)
- KingCrowned (Beta Tester, Artist)
- FelipeNoel (Artist)
- metto (Beta Tester, Artist)
- itsreddqueen (Artist)
- NG Dummy (Artist)
- Taka (Artist, Chr Designer)
- sereneFalconer (Artist)
- Vapolygon (Artist)
- Pommisc (Artist)
Stay well and have a good one.
FrazzaJazz
GET THEM FRIES UNEVEN!!!
UnevenPrankster
#GetThemFries #EDJSweep