TumbleTrack

Your personal Tumblr journey starts here

Godot Engine - Blog Posts

11 months ago

A devpost? It’s about time for one of those.

I’ve put this off for too long, but I have some free time for a minute, so now’s the best moment to finally unveil my first project! So, without further ado, I hereby announce..

A work in progress of the splash art for the game Retina. A seemingly asleep individual in a blue jacket and red scarf floats in a white void. The hood of their jacket is up, obscuring their face with a black shadow that cannot be seen through. Behind the individual, there is an extremely large closed eye. The eye's lid is gray and appears heavily cracked. Above the eye, there is text that reads "RETINA".

RETINA

A puzzle-platformer metroidvania about memories, letting go of the past, and finding oneself; RETINA is now in development!

From here on out, I’ll be cataloging the development of the game as it happens! In this first (technically 0th) devpost, I'll go over my progress so far and an overview of my rough plans for the game.

RETINA Development #0 - You Gotta Start Somewhere

Over the past couple weeks, I've been busy trying to get some basic movement and animations working. That has been substantially more difficult than I thought it was going to be.

In hindsight, this makes sense, given that I'm still relatively new to using Godot and GDscript. In any case, I've managed to get basic running and jumping working, as well as a rudimentary dash ability and test level; which you can see here:

The dash is pretty janky in its current state, though: The vector is added to the player's current velocity, which is technically how it's supposed to work, but that means it only nudges the character a bit when they aren't moving. The dash vector is also determined by the cursor's global position, which is what allows it to work in the code currently, but that causes a player intent issue - the direction the character dashes in sometimes won't match the one the player wants them to. Unfortunately, I'm still not entirely sure why this is the case. Using coordinates in relation to the viewport (the camera, effectively) would fix this, but that has its own problems I need to work out. Additionally, the velocity issue means that it's possible to gain speed theoretically infinitely by just dashing along the floor. Oops!

Once I fix the dashing issues, my next goal is to implement crouching, sliding, and/or climbing walls. After that, I intend to start working on adding a grappling hook mechanic.

A Roadmap(ish)

Since RETINA is the first game I plan to release publicly, I'm trying to keep it relatively small in scope. That said, I've found that I'm rather incapable of keeping the ambitious side of me in check, so we'll have to wait and see.

Currently, RETINA is planned to be split into several distinct zones, of which two are currently in progress at the time of writing. I don't have a concrete final number of these zones in mind, but I want to aim to have a minimum of 4 in the final release. At the time of writing, I also have an idea that would necessitate having there be a variation of each zone - I'll talk more on that later in development.

When it comes to the narrative of the game, I'm aiming to convey the plot with no spoken words - some non-diegetic text will be present that will give you hints as to what's going on (The text on a game over screen, for instance), but otherwise no dialogue is present. I also plan to make a number of animated cutscenes - These are probably going to be the most ambitious and time intensive parts of the game artistically. I want there to be at least two cutscenes for each area, totaling to a minimum of 8, but the final number will depend of a variety of factors, including the scope.

Speaking of cutscenes and narrative, I also intend for RETINA to have multiple different endings. Currently, I'm aiming for three - One acquirable from the outset, one for finishing the game, and a secret "true" ending requiring finishing the game under certain conditions.

With regards to releasing the game, I currently only have plans to make RETINA available on PC for Windows and probably Linux. Mac support sounds like a pain in the ass (even though I'm using an engine), and I don't have a Mac to test on, either. I'm highly unlikely to publish it on consoles seeing as though this is my first release project, but I might consider porting it to Switch in the future when I've got more experience.

Moving Forward

All in all, this is a highly ambitious project. I can't promise a schedule for these devposts due to permanent extenuating circumstances, but I'm hoping I can at least get around to making a devpost once a month. Furthermore, this game is going to take a really long time to make. I can't promise a release window of any sort, and RETINA is likely going to be a multi-year project. Real life sucks, we unfortunately all have to participate in it, and it takes more of my time than I'd like.

Having said all of that, thanks for reading! I hope you're as excited about this game as I am, and I'm looking forward to going on this development journey with y'all!


Tags
1 month ago

Character Switching

So until this point, you could only play as Alice. But now you can play as the other six! Still need to work on their field abilities haha. I want one of them to do a ground pound move, but the animation I cooked up looks pretty bad... most of my animations look pretty bad tbh...

Wishlist -> as if I would give you the link to this game's Steam page that easily.

hmm, you really thought I would hide it here? Wouldn't that be way too simple...?


Tags
1 month ago

Explosives Cont.

Physics objects are really fun to play with! Another reason you should just make a 3D game with an isometric perspective instead of a pure 2D one. Not to say you couldn't do this in pure 2D...

Anyway, I guess this means I need to come up with a reason you'd find a ton of crates lying around. Maybe a warehouse level... and a quest to find a needle in a crate stack...?

⚠️TRADE OFFER ⚠️ i receive: a wishlist -> https://store.steampowered.com/app/3163190 you receive: an email on release!


Tags
1 month ago

Explosives

Explosives

So I sorta like to develop by copying Zelda's homework. In this case, that means adding a bomb object. You can bomb jump with it, although not as crazy as the BOTW speedrun tech shenanigans lol.

I plan for the player to use this when they need MORE destructive power to proceed. I guess I should work on a breakable wall model.

You can wishlist this game on Steam! -> https://store.steampowered.com/app/3163190


Tags
1 month ago

Party Management

Party Management

While you can do some light management in other places, this is a menu dedicated to tweaking your party. The design was inspired by Final Fantasy Tactics and it works for the most part haha. It's been a while since I posted! This game has a Steam page now which you can find here -> https://store.steampowered.com/app/3163190


Tags
5 months ago

Personalization

I dream of adding alternate character skins and whatnot, but that's a lot of work and I should focus on other things. So for now all you can change is the X-ray color.


Tags
5 months ago

Procedural Cyclic Slash

Get the code for this shader here -> https://godotshaders.com/shader/procedural-cyclic-slash/

This is a really jank shader, but it looks pretty nice when the values are just right. So that's what this post is for! I'll help you with understanding the uniforms and value setup and leave some general tips so you can experiment easily on your own.

Quick Setup

Here is a quick rundown on how to get something similar to the video above:

Create a MeshInstance3D node and set the mesh to QuadMesh

Apply the shader as a Material Override (GeometryInstance3D -> Geometry)

Set these values:

Animation.Derive_Progress = -1 Animation.Time_Scale = 0.25 Shape.Rotate_All = 285 Shape.Noise = - New NoiseTexture2D - - Width = 512 - - Height = 128 - - Seamless = True - - Noise = - - - New FastNoiseLite - - - - Noise_Type = Cellular - - - - Fractal.Gain = 4 - - - - Cellular.Distance_Function = Manhattan Shape.Width_Gradient_Mask = - New GradientTexture1D - - Gradient = - - - New Gradient - - - - Offsets: 0.2, 0.5, 0.52 - - - - Colors: #FFFFFF, #000000, #FFFFFF Shape.Length_Gradient_Mask = - New GradientTexture1D - - Gradient = - - - New Gradient - - - - Offsets: 0.25, 0.4, 0.6, 0.65, 0.7 - - - - Colors: #FFFFFF, #7F7F7F, #000000, #7F7F7F, #FFFFFF Shape.Highlight = - New GradientTexture1D - - Gradient = - - - New Gradient - - - - Offsets: 0.5, 0.52, 0.54 - - - - Colors: #000000, #FFFFFF, #000000 Coloring.Color_Lookup = - New GradientTexture1D - - Gradient = - - - New Gradient - - - - Offsets: 0.0, 0.1, 0.2 - - - - Colors: #BF40BF, #008080, #ADD8E6

Overview

This shader works by taking a noise texture and wrapping it around the center point of UV1. The curved noise texture is then masked twice to set its width and "length" and an additional texture is applied to add a highlight effect. The shader uses values of gray, a lookup texture, and UV.x to apply colours. Lastly, motion is created by shifting the UV sample of the original noise texture and running the combined grayscale texture through a smooth step function to determine its alpha. This is a text-based shader written in Godot's Shading Language. Sorry, I can't help you implement it in Unity or some other engine or software. --

Animation Uniforms

The Progress uniform sets what point in time the shader is in. This only works when the Derive Progress uniform is set to (0). You can pretty much use the progress uniform to scrub through the shader's animation. If you set the progress value in code or through an animation player, you can control the animation as you like. Derive Progress changes what drives the shader's animation. If set to (-1), TIME will progress the animation. If it animates too quickly, you can use Time Scale to speed it up or slow it down. If set to (1) the particle LIFETIME will progress the animation. This is useful if you plan to set this shader as the material of a particle in a GPUParticles3D or CPUParticles3D. Ease Progress gives you a bit of control over how the shader's animation progresses if you are driving it with TIME or LIFETIME. When set to (0) no easing will occur. (-1) Will ease in exponentially and (1) Will ease out exponentially, but if you have the chops you can tweak this by changing the functions in the shader code. Time Scale alters the speed of the animation when Derive Progress is set to (-1). Anim Rot Amt controls how much the shader rotates as it animates. Set it to (0) if you want the effect to remain in the same place instead of rotating around the center of UV1. This value is put through an easing function, so it doesn't adjust linearly. I personally, wouldn't try setting this to anything other than (0) or (1). --

Shape Uniforms

Zoom controls the size of the effect on the quad. The value is interpreted inversely, so setting a larger value will make it smaller. The effect will repeat if you set this value above (1). Rotate All lets you rotate the effect on the quad. Use degrees. Base Noise generates the main shape for this effect. You can use any type of noise and I encourage you to experiment. Just make sure it's seamless so you don't get any odd artifacts. By setting the noise to be wider than it is tall, you can stretch out the shapes it makes which I think better resembles a slash. Decreasing the dimensions of the noise can lead to bigger streak blobs and softer-looking shapes depending on the noise used. I'd look into this if you want a more stylized/cartoon-looking effect.

Procedural Cyclic Slash

Width Gradient Mask masks the Base Noise in a way that controls the width of the final effect. Like Base Noise this will be wrapped around the center point of UV1 so I suggest using a GradientTexture1D. You can do some cool things here if you're willing to experiment (and possibly alter the code) just make sure this is set to a grayscale image. The way I wrote the math dictates that darker colours will be kept and light colours will clip, so use white to control what to cut out and black to control what to keep. A gradient that transitions from white to black back to white is a good place to start.

Procedural Cyclic Slash

Length Gradient Mask masks the Base Noise in a way that controls the "length" of the final effect. This also controls how it animates sorta. I can't really explain it, but how this overlays the noise will alter how the smooth step function works... I think. White denotes the edges and Black the center. If you use a gradient here, moving the white values closer to the center can help with shaping. I also suggest using gray so you can better shape the length of the effect.

Procedural Cyclic Slash

Highlight is overlayed on the effect. like everything else, it is wrapped around the center point of UV1. A thin white stripe works best. Unlike the other textures this one is played straight, so black won't appear and white will. Moving the white stripe closer to the right edge of the gradient will move the highlight effect to the outside of the slash, left will move it inside. I like to set it so it's a bit closer to the right so it appears on the outer edge. If you don't want a highlight at all leave this uniform empty. --

Coloring Uniforms

Emission Strength controls how much it glows. If it doesn't glow in the editor, add a world environment node and enable glow, you will also need this in your game scenes fyi. Mix Strength controls how much the Color Lookup is applied to the effect. If Color Lookup is applied, decreasing this value will give a darker appearance. At (0), the effect (excluding the highlight) will appear black. You can add extra glow by increasing this above (1).

Procedural Cyclic Slash

Color Lookup is used to color the effect. I think I screwed up the math, so just ensure the colors you want the shader to sample from are close to the left side of what you set here. Three colors is pretty nice, I like to put darker colors closer to the left side and lighter ones to the right. --

Final Notes

Sorry for this lengthy post. I've had issues before where a shader I found on GodotShaders was a bit obtuse and I didn't want others to run into that with this one. I've spent quite some time trying to figure this out but I still feel this is a pretty meh effect. I think I need to look into how people animate shaders using a static image and clipping/stepping/smooth stepping it. If you have any good resources for shaders I'd be interested to hear about them. I'd prefer not to get any articles about visual or node-based shaders since I keep fumbling how to convert some nodes into functions or what sorta math is going on, but at this rate, I'll take whatever I can get lol. Hopefully, this shader saves you some time or teaches you something new! If you have any questions (and I can answer them) don't hesitate to ask. However, I'd prefer if you contacted me on Discord. I'm in Godot Café, Godot Engine, and the Godot Effects and Shaders discord servers as (@)Aiwi.


Tags
5 months ago

Options Menu

The coolest thing this menu has is keybinding. I need to tweak it a bit so that the user has to specify that they want to apply changes rather than instantly updating the game settings


Tags
6 months ago

Dialogue and Camera

So this is really basic but also really cool. Once you get displaying text sorted, a cool feature you should add to your dialogue system is the ability for it to move the camera around, with good application I think you can get really cinematic with it haha. In-game cutscenes are kinda crazy now that I think about it. I wonder if there are any resources diving into how studios tackle making them. I need to hit up the GDC vault lol.


Tags
6 months ago

Plaintext parser

So my dialogue scripts used to be JSON since the initial tutorials and resources I found suggested it. For some reason, I thought writing my own Yarnspinner-like system would be better, so I did that. Now my dialogue scripts are written as plain text. The tool in the video above lets me write and see changes in the actual game UI. All in all it's incredibly jank.


Tags
7 months ago

Stacking

Very useful feature, totally not a pain to work with due to the submenus needed to select what you're acting on and then select what you're doing... I plan to make this a gimmick in at least one dungeon but maybe I should look into streamlining the process before that haha.


Tags
7 months ago

Busting

Don't mind me, just bustin' up some crates.


Tags
7 months ago

Tossing

I really want to use this feature for puzzles, but I can't think of a good one lol. Maybe I'll just make objects that do something when you yeet them.


Tags
8 months ago

Shenanigans

I decided to instantiate and drop ~99 RigidBodies to see what would happen. The game had zero problems until I tried to interact with one of the boxes and my interaction system got fussy. Now that I think about it, I need to repeat this very important experiment with my bomb object...


Tags
8 months ago

Journal UI

Started implementing another important menu. This one gives you and overview of all your quests and lets you lightly manage them. I plan to also put a 'database' feature in so you can come back to important information/lore you've encountered previously.


Tags
8 months ago

a clip from my second devlog... you should watch it :>


Tags
8 months ago

Selective Interaction

Very simple, yet super useful, feature, now you can directly choose what to interact with when surrounded by multiple options. Don't ask what happens if you have more than 26 things nearby...


Tags
9 months ago

Dungeon

I present to you my first block out for a dungeon level. Yea, it isn't great lol. But with these pieces in mind, I was able to make a proper sketch

Dungeon

It still needs some work but I'm getting somewhere with it. If only writing the story was this easy...


Tags
9 months ago

NPC scripts

Don't mind me, just stress-testing to see if my NPCs can survive a morsel of the shenanigans players might pull. With some work I got it to fall through the floor but I'm unsure if my failsafe worked properly so I think I need to bully test it a bit more...


Tags
10 months ago

NPC

How much is an NPC supposed to be capable of? I know some suggest giving them the player's capabilities, but does that help when they exist mostly for narrative rather than aiding core gameplay? I feel like mine are lacklustre... but maybe I just need more animations lol.

Does anyone have any thoughts on the matter?


Tags
10 months ago

(╯°□°)╯︵ ┻━┻

Needs some VFX, but at least how I built my system lets me turn any rigid body into something you can push around like this. Just need to set up another system to encourage you to move stuff around...


Tags
10 months ago

Camera Zone

Made this invisible trigger to move the camera around. All it does is tell my camera to focus on a new position and has settings to create a new focus point between the player and a defined position around the trigger. The transition could use some work tho haha.


Tags
10 months ago

Switches and doors... ignore the chest.


Tags
11 months ago

Quest System Cont.

Here is me playing through a short quest in an old tutorial room. I like this video since I engage with a lot of the mechanics I've been working on.

Ngl I kinda want to have combat take place on the same scene as exploration, you know Chrono Trigger/Sea of Starsy. However, to do that I'll need to do a lot of tweaking to my code and spend a lot of time redrawing enemy sprites I already made...


Tags
11 months ago

Tutorial Rooms

Tutorial Rooms
Tutorial Rooms

Both of these ended up getting scraped. oof


Tags
11 months ago

So I finally got to making a small video for pearlessential. Like the game, it was overscoped and I spent a bit too much time producing it, but I'm happy with how it turned out.

It also let me polish up my video producing skills which is nice.


Tags
11 months ago

Objective UI and Quest System

Mostly backend. As usual, it's a pretty jank system but it works. No quest markers atm but I've been considering them. I also want to look into optional objectives. This is the first time I've seriously considered how quest systems work and it's quite interesting. I need to find more references to study haha.


Tags
1 year ago
I Am NOT Stoked To Create Building Textures, But I Am Stoked To See A Textured Building... So I Guess

I am NOT stoked to create building textures, but I am stoked to see a textured building... so I guess I have to make textures one of these days.


Tags
Loading...
End of content
No more pages to load
Explore Tumblr Blog
Search Through Tumblr Tags