Tumgik
Further Development
HUD
As with the rest of my prototypes, this has a very rudimentary HUD. I'd take inspiration from Cyberpunk 2077, Neon Abyss, you've seen this before.
Tumblr media
Variation
Adding enemies with different mechanics such as range attacks, low speed but high health, etc would make replaying the game considereably more entertaining. The same also applies to my rooms - I currently only have 2 and it shows. Adding more unique rooms, each with their own weird gimmick, would make gameplay more fun.
youtube
Progression
Adding XP or, at the least, a weapons system [with relevant GUI] would allow the player to feel like they're actually achieving something during gameplay, rather than using the same tools continuously. A system like Borderlands', with random weapons with random modifiers would add to this
Tumblr media
Abilities
In most similar games, the player has some movement or attack ability to make up for their 2D movement - in Soul Knight [<3], the Wizard has a teleport, in Just Shapes and Beats, the square has a dash and Reece managed to give his player both King Crimson [dash] and Za Warudo [time dilation] abilities. This is something my game absolutely needs as the movement is very, well, flat and 2D.
Tumblr media
Doors
My game has no doors. As a result, both players and enemies can just walk out. I was planning on adding some but I lacked the time or ability, and frankly I don't really know how I'd code them.
Tumblr media
0 notes
Decorations
Tumblr media
This was my first redesign of a room. That's right, I'm using the same theming. Again. There wasn't really any thought process or inspiration, I'm just using neon to highlight important areas [walls, exits].
Tumblr media
I also decreased the light level and made it a bit colder to really make the neon stand out
Tumblr media
For my next Funny Room, i wanted a cannon that span around came to a stop and fired a few enemies. This was how I tried to implement it. This did NOT work, the cannon went way too fast
Tumblr media
I thought this would fire the enemies. It does not.
Tumblr media
BUT THIS DOES. I'd like to personally thank the following forums post. I just need to tweak the speed and actually activate the AI
Unfortunately at this point I've realised my AI isn't actually doing anything anymore. Even worse, I don't know why.
SIMULATE PHYSICS
GODDAMNIT after over an hour and 2 lecturers, we finally worked out WHY the AI wouldn't. I'd toggled SimPhys on, which I guess kills the AI.
0 notes
Text
Creating a Dungeon Crawler [cont. 4]
Tumblr media
I then created an extremely rudimentary UI, and bound the text to the score. Nodes to create the widget and add it to the viewport were then added to the player, and it should now increase when I kill an enemy.
And it all works fine :D I decided to set the enemy score value to 3.
Tumblr media
This should check to see if there are enemies in a hitbox the size of the room. I haven't seen 'get overlapping actors' before, however it could DEFINITELY have been useful in Shipping Delay.
Tumblr media Tumblr media
This variable, tied to the previous nodes, should control whether the doors are open, allowing the player out once the room is clear of enemies.
The game tutorial is complete. However, I do see extension tasks so I'll get cracking on those. And yes I feel a lot better now
Tumblr media
Changing out the variable for a do once and custom event should allow me to raise the doors. This was NOT my first try - initially I had an enemy check without realising I'd only need doors in levels with enemies.
Tumblr media
I thought this would work. Not only did it not, it actually stopped rooms from generating. dear god its happening again
I have since deleted this code. I really don't care enough to make it work
0 notes
Text
Creating a dungeon crawler [cont. 3]
Tumblr media
Next, I created an enemy character, added a sphere with no collision and added this code to follow the player.
Tumblr media
I then changed the auto posess AI function so that the AI would work when spawned. After adding a colossal nav mesh, the enemy worked. It's reassuring to know that I can code absolutely bottom-of-the-barrel, basic things. God I wish I was sarcastic here.
Tumblr media Tumblr media
These project settings ensure that the enemy AI will do nothing until 'reloaded' whereby it navigates to the player.
Tumblr media
This makes the enemy now an invoker. I'm guessing it has something to do with the settings I just changed but i really don't know anymore.
Tumblr media
This has been unticked in the player. You know, I really don't understand what else I'm supposed to say. I'm probably gonna rewrite this anyway.
Tumblr media
Adding this to the rooms allows it to spawn enemies at certain spawnpoints. A hitbox has also been added at the front of the enemy, which will reset the level when it overlaps the player
Tumblr media
im going bananas. losing my marbles you might say. a bit cookoo.
Tumblr media
Although I'd lost what had fixed my code [placing the pivot in the player, the sphere further ahead and THEN making the sphere a child of the pivot] I was able to recreate it.
Tumblr media
In my new projectile, I set the sphere as the root so I had to add a new object channel
Tumblr media
where is my collision channel, UE5?
Tumblr media
oh there it is. huh.
Tumblr media
I have now added an input for shooting - a trigger is set to pressed to ensure I don't have a machine gun. This may later be changed.
Tumblr media
Projectiles now spawn at the sphere pivoting around the player at the mouse, now I just need to make the projectiles actually move. [done via updating the projectile movement component in the projectile. Due to collision shenanigans, it forces the player back a little when fired]
[I fixed this by literally making it spawn in front of the player. I'm not too bright]
Tumblr media
After creating a new game instance and adding a score variable, I added this to the enemy which should now increase the score when applicable
Tumblr media
After changing my projectile's code so that it calls the enemyscore event when it overlaps an enemy, and adding a node to the enemy so it deletes itself, the game functioned as intended but I got a ton of errors. Having had this issue many times before I knew what it would be - the enemy was getting deleted before enemyscore could be called.
After adding a 0.05 second delay before deleting the enemy - long enough to get everything done, short enough to not be noticeable - I stopped getting error messages.
0 notes
Text
Creating a dungeon crawler [cont. 2]
The code for spawning new rooms via the collision boxes has now been added.
Tumblr media
This code works great. Until we get to spawning from the top and botoom. These spawn diagonally for reasons beyond my comprehension.
Tumblr media
Ok I have no recollection of changing a single thing in the code but it stopped doing this. No, I don't know why. It also crashes loading a new room now.
Tumblr media
This macro prevented infinite loops and therefore crashes. I also made the room, at Reece's request, rotate -90 on the Z axis when spawned. This worked in so much that diagonal rooms no longer spawn, but now the player controls rotate every time you stop going straight and go through an adjacent door. why.
After implementing the macro and removing the -90 rotation, we're back to generation not working. yay! wahoo! i'm not even having fun anymore! i just wanna go home! yippee!
I've come back the next day and rewritten the code. It still doesn't work. I've just rotated the room by -90 and decided that's just how it is now. It's really just that or I walk out and I'm beginning to seriously consider the latter.
Tumblr media
Next to mitigate my decliniing mental health, I added an actor class array into my master room - this will store all the other rooms so they can be generated randomly. On my first try, the array wouldn't accept any variables. That was fun
Tumblr media
This was then hooked up to the spawning node, so the rooms should spawn randomly. I really hope it works.
[it did not. The first room never spawned, only the second. Call me chernobyl's reactor 4 the way i am becoming increasingly unstable please dear god help me i am just moving on i will likely just not fix this i do not care anymore]
Tumblr media
This code should make a sphere follow the mouse. It probably works great but I am yet to see where the hell I call the custom event.
Tumblr media
I tied the Show Mouse node to event beginplay, and everything else to on tick. Nothing happens. I'm not even unstable anymore, I'm just sad.
[WEIRD GENERATION AND CONTROLS RANDOMLY ROTATING HAS BEEN FIXED. I JUST NEEDED TO ADD A SPRING ARM TO ATTACH THE CAMERA TO, AND DISABLE INHERIT ROTATIONS]
0 notes
Text
Creating a dungeon crawler
First thing I did was create a character, add a cube and material for visibility, then an input action and input mapping the context - I changed the input action to an Axis2D
Tumblr media
I then added this input action to the mapping context, and added it to the player
Tumblr media
The input action is now tied to moving the player, as it should be.
Tumblr media
And now the player and a new gamemode are the defaults for their respective categories.
Tumblr media
Next, I created a master room with named collision boxes pointing outwards to spawn the next room, and a camera above in the centre.
Tumblr media
With this code in the player, the custom event will trigger the players camera to be blended with the one above the room. This allows for camerawork similar to Celeste where the camera is in the same position for every room.
Tumblr media
This is now called on every tick
Tumblr media
0 notes
Text
Dungeon Crawlers
Pixel Dugneon
Pixel Dungeon is a very well-made but basic dungeon crawler. The art is nice, audio is sufficient and the gameplay is well-balanced. This is the reason there are MANY remixes and variations based on this game [a few of which I've played] - this shows how popular and polished the original was.
Folder Dugeon
Folder Dungeon is a really unique dungeon crawler which remains fun despite having literally no mechanical complexity. By boiling the Dungeon Crawler gameplay down to its very basics, all gameplay fat is stripped away completely - no tasks have to be repeated, the player doesn't have to keep walking through rooms. This is a very interesting take on the genre, but something I likely won't be able to take inspiration from - the gameplay is something you either commit completely to, or don't really use at all.
Labyrinth of Legendary Loot
Labyrinth of Legendary Loot is a fairly simle turn-based dungeon crawler. The art and designs are lovely, and the gameplay is pretty fun but what I like most is the turn system, something I don't really see in dungeon crawlers. Whilst I don't prefer turn systems or free combat over one another, it may be interesting to try to implement a turn system in my game.
Aguijero
Aguijero is a very simple game that, like Folder Dungeon, has no mechanical gameplay. The witty dialogue, the interesting art and the way that decisions respect the players intelligence and critical thinking make me REALLY like this game. The way that every character has their own gimmick, and especially how your own player does too depending on what choices you make. Given I'll be working from a tutorial, I likely won't be able to create a game like this or Folder Dungeon, but they're a type of game that appeals to me.
Porklike
Honestly, I'm not really a fan of Porklike. The art is nice and I like the music but playing it just isn't engaging for me. The art on the itch page, however, is really well made and I just wish they'd gone for that artstyle over having another black-white-and-bonus-colour minimalist game. It doesn't really stand out.
In conclusion, most dungeon crawlers fall into one of two gameplay loops - top down mechanical gameplay which plays it safe [Pixel Dungeon, Labyrinth, Porklike] or text-based, taking a risk of creativity at the cost of well-known gameplay [Folder Dungeon, Aguijero]. The latter, to me, is a lot more interesting but due to the lack of time I'll likely have to create the former.
0 notes
Text
Furthering my project
Audio
My project currently has a distinct lack of audio cues or backing track. My audio would likely be similar to that planned for my endless runner - Waterflame or an arcade-style chiptune track for the background and maybe pinball noises for shooting the ball and it hitting a block, but bit-crushed to be more in-style. The healthbar would also need a sound cue - perhaps a one-second note going down in pitch would do.
HUD
Although I am really happy with how my health bar looks, I don't have levels, score or high score displayed. I can get away without having levels displayed as I haven't seen anyone get past 2 yet, but score and high score are absolutely nescessary - breaking a block literally shows a '+5 points' message. Unfortunately, i'm not sure how these could be shown
Screen Space usage
As the main game is in the centre third of the screen, screen space is used very inefficiently. I really feel like I'm missing out on opportunities not utilising it - perhaps I have the score and high score on the opposite corner of the screen, and extend the lower half of the level left below the score and the upper half right above the life counter.
[I'd LOVE to add an image or video but EVERYTHING is about sodding screen-space reflections. GREAT.]
Levels
As of currently, my game has no different levels. I don't see this as a huge problem - the current one is designed sufficiently well so gameplay isn't monotonous. However, I recognise that randomised levels could absolutely make the game more interesting.
Tumblr media
Block variation
As with Shipping Delay, I could add variation in the blocks - maybe some explode, launching the ball away, some spawn another ball, some provide notably more points etc. This would add another level to the strategy and I imagine would make gameplay more fun.
Tumblr media
0 notes
Text
Level Changes
Tumblr media
To add a little variety, I first added these corner pieces at the bottom - I really like how the centre two work. Initially, they help by catching a ball but if they're never hit, the player has to risk letting the ball past to hit them.
Tumblr media
I then added a layer of cut up pieces and added wedges at the bottom. This serves to give the area a little more shape and prevent the player from going clean through the first column without moving.
Tumblr media
The arena now has corner pieces - these are to ensure that if the ball gets stuck going near horizontally, it will hit one and be sent off at an angle. So far these have worked very well.
Tumblr media
I also asked Reece for a particle trail, which I applied to my bat and an orange version to my ball. Now, there's a track of their movement which I think looks really cool.
Tumblr media
I have now added what I can only describe as sideburns and a triangle. Not only is this beginning to resemble Galactus [or magneto. I can't remember. Scarlet Witch???], but I really like the shape. The amount of angles also helps reduce time where the ball is going horizontally, and makes the gameplay more similar to that of a pinball machine
0 notes
Text
Fixing bat drift
Currently, the bat will drift pretty far even when the mouse isn't moving. This makes it a bit harder and much less satisfying to control
Tumblr media
This is how I fixed it, so that as soon as it the game stops recieving mouse input, the bat stops moving, which worked perfectly fine.
0 notes
Text
Point text
Tumblr media
I also want to have a little points display when you break a brick, similar to Hotline Miami's. First I made a text sprite which was simple, then imported it to Unreal.
Tumblr media
I then added code so it would delete itself after 2 seconds.
Tumblr media
This code handles spawning. It actually works great. I added a little randomisation to certain areas so that they would spawn at angles. The points sprite was way too fast so I reduced its speed and tweaked a few projectile movement settings, but I like it. It also has physics enabled so it is affected by gravity - this wasn't intentional, but I might keep it. I really like how it looks. Now I just need to add colour randomisation.
Tumblr media
I'd made a whole set of sprites before I saw you could set the sprite's colour
Next, I realised I had to make the text emissive. This was done by multiplying the value plugged into emission for the material my sprite originally used. I then created a material instance, applied it to my sprite and tweaked the emmisive value. This is extremely useful to be able to do.
Use of emission and enlarging the sprites was done to better help visibility.
I also did have a problem with point sprites spawned from the upside-down triangles at the bottom, this was fixed by ensuring they spawn with 0 as their X and Z rotations
Tumblr media
0 notes
Text
HUD improvements
As my HUD is fairly empty, I've decided it should be the first thing to be redesigned. As TETRIS had a similar problem to me with its gameplay area and screen space, I'll be using them as inspiration
Tumblr media
My first decision was to update the text. As I can't make fonts, I elected to use the same system as I did for health in Tempting Fate, using sprites. I recreated the code and began working on my sprites
Tumblr media
Originally, they had little starts and moons. However, they just made it look infected so I cut them from the design. The gradient is to stay consistent with my game's palette.
Tumblr media
For whatever reason, the number displayed was 1 higher than the value of lives left so I bodged it and had them direct to a number 1 lower. I didn't like this solution but it did work
Tumblr media
My display for the text initially looked like this, with a gold border. However, it just didn't work with my game so I went for a luminescant blue
Tumblr media
I still hate this. I tried reducing the number to a neon sign but it just doesn't work
Tumblr media
So, if I can't make a good HUD, I won't. There won't be a HUD - at least in widget form. That's right, I'm making a 3D one. God help me.
For my first 3D HUD item, I'll need a life counter in the form of a bar. This will need to get the current life count, set the bar to a corresponding height and lerp to a smaller height when an event is called.
Tumblr media
This code is a mess but it works as intended. i had a little issue about it lerping from 0, but that was because I hadn't set a default value for the max health. Now, I just need to reuse the code from Shipping Delay on the crane's rope to make it seem like one side of the cube is going down.
Tumblr media
I tried doing it myself. It didn't work.
Tumblr media
BUT THIS DID. I realised my rope in Shipping Delay used a different way of doing this, that I hadn't used a lerp node for moving the cube, and that it actually was moving, just not enough. Now it's done, I really like how it looks :D
alright it wasn't perfect. When the player's life count reaches 0, the bar bugs out - it goes back from 2 to 1, but without going up so both top and bottom move. Basically, it looks weird.
I have identified the problem. The life count REALLY doesn't want to go to 0. It will go 3-2, 2-1 and then 1-1. WHY? I DON'T KNOW. Correction: its perfectly happy goinng to 0. It just hates going down a third time.
Tumblr media
Changing this check in my killbox DOES kind of fix it. The player does have 4 lives, and the last animation does play the previous one, but it's in the right place again. Huh
Tumblr media
I FIXED IT KIND OF My solution is foul but it DOES work. I copied the code form the false tree into the true tree after the life check in my killbox and added an open level node. This solution is terrible, but you wouldn't know that by the gameplay.
look at that health bar go
Tumblr media
I've added a small fram around the block to help get an idea of scale for how many lives are left
Sam gave me the idea to implement a colour system - I plan to do this by lerping between differend colour variables
Tumblr media
'what did it cost you' 'everything' oh who am I kidding I love this. It's awful. It also works - it goes from blue to green, green to yellow, and a backup yellow to blue one in case I mess something up.
Tumblr media
This, however, doesn't work. As I sit here typing this, I just realised why. These nodes happpen on update from the timeline, so I need to ensure they aren't happening every tick of the animation.
Tumblr media
I showed my code to Jake. After about 10 minutes of suffering and trying to understand what I was doing and why, he showed that I could just use the above nodes instead. Then we spoke about Yugoslavia, but that's unrelated. At any rate, I now know a prettier way of writing that code
Tumblr media
As for the little heart below the bar, I tried making it pulsate but this didn't work. I also swapped it out for an image of an actual human heart. Alas, i have reverted both as neither worked.
Tumblr media
Adding this code to my heart sprite should have allowed it to shake, and switch the sprite to a more broken one, but for whatever reason it went too far left. I fixed this in the image below.
Tumblr media
This was then duplicated for the other heart sprites.
0 notes
Text
Adding bonus features
Ribbon Trails
Not for lack of trying, I couldn't add ribbon trails. I tried using tutorials below but none helped as I could never see the particle. It being in a different version of UE doesn't help. I have decided either I'll fix it later, or steal a ribbon from Reece.
youtube
youtube
0 notes
Text
Creating a Brick Breaker [cont. 5]
Tumblr media
This code in my bricks affects their material, changing the colour. Given how much I use custom materials, I imagine this will be extremely useful. I will have to customise this as my bricks are purple, so the R value gets maxed out immediately [might just decrease the emissive value]
Tumblr media
The values are affected by this code which changes the colour based on the brick's heath.
Tumblr media
I have decided to rebuilt this code in a way that is more fitting. Now, instead of the hue changing, the luminosity does. As my brick material is both very purple and very luminous, decreasing the luminosity makes it seem more purple. This is also scaled to the level so, if my maths is correct, it should work infinitely. I think.
I then used the below tutorials to remove auto-exposure, and to add a keybind that increases time dilation. This was fairly simple, and I decided to add space as the keybind to increase time.
youtube
youtube
Tumblr media
These are things I'm likely to reuse
0 notes
Text
Creating a Brick Breaker [cont. 4]
My ball had been constantly slowing down, which messed with the gameplay. I'd tried everything I could think of - the forums, every single setting in all 3 components and eventually stealing reece's projectile. This actually did work - but I don't know why. At any rate, it doesn't lose velocity now. Having said that, I did decrease the velocity so the ball would be more controllable.
Tumblr media
I then created a HUD with space in the centre for the gameplay, and two sections either side - one displays level and lives, the other the high and current scores via a game instance containing these variables.
Tumblr media
Small adjustments had to be made to the size but I like where it is.
Tumblr media
Tumblr media
This is my new code for my bricks - it uses a health system that scales with the level, so it takes more hits to break them depending on the level. They also reward the player with points now, which are displayed correctly in the HUD.
Tumblr media
And this is the new code for my killbox. Now, it checks how many lives the player has - if it's more than 1, it decreases them. If less, it compares the current score and high score - if the current score is greater than the high score, it is set as the high score. The current score and player are then reset.
Tumblr media
This system in my game instance now keeps track of when a brick is destroyed and checks how many are left - if none, the level is reloaded.
Tumblr media
It's originally set when the game begins by these nodes in the player.
This didn't work - as soon as a brick was hit, the level reset. I was stumped as to why - the code in the bricks and game instance seemed to be accurate but I knew I'd missed something.
Then I noticed I hadn't set a class to be counted above.
0 notes
Text
Creating a Brick Breaker [cont. 3]
I then proceeded to create a sphere using the appropriate material, with a sphere collision as the scene root. The collisions were changed, and a projectile movement component was added with tweaked settings to make it more ideal.
Tumblr media
Next I created a killbox with this code. I find the first section redundant - you don't need to cast to the same object twice.
Tumblr media
As it turned out, it was very much not redundant. I just can't read.
Tumblr media
My ball, for whatever reason, hadn't been colliding. I had constantly tried changing the collision of the walls, the ball, hitbox etc but eventually throught trying every option I saw it wasn't simulating physics. As soon as I toggled this on, it worked. It's always the simple things.
Tumblr media
0 notes
Text
Creating a Brick Breaker [cont. 2]
I next created an input mapping for player movement [setting the value type as a float], and an unedited one for firing the ball. These were then hooked up to a Actor Input Context blueprint, making them activated via button presses. This is something I haven't used before, but it does make sense.
Tumblr media
This code was then added to my player character. This should organise the player movement. Unfortunately, literally nothing happens when the movement button is pressed.
Tumblr media
This didn't work. This was due primarily to the below node - I hadn't added anything to the highlighted section. It now works correctly.
Tumblr media
0 notes