nitrosodiumrapidproto
nitrosodiumrapidproto
NitroSodium Rapid Prototyping
75 posts
Over-stretching Unreal textures since 2023.
Don't wanna be here? Send us removal request.
nitrosodiumrapidproto 6 months ago
Text
FINAL BROADCAST
This project is now finished. Please follow my new blog at @nitrosodiumgameanglia for the continuation of my gamedev journey.
3 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Final Outcome
youtube
This is a video I took a day or so ago, but I'm posting it now. It's a full playthrough of the game, exploring most of the areas to get a full experience.
3 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Fixing a Bug with the Menu
When clicking about in the main menu, it is possible to hide the mouse cursor because the game is frozen and the Show Mouse Cursor is only being played once. If it plays every tick and the game is stuck at t = 0, it isn't on forever.
So I solved this by putting the player out of bounds at the start, not freezing the game, and binding all proper features to a GameStarted bool, which is ticked true when the play button is pressed in the menu widget. Then the player is teleported back in bounds as if it's a new level.
Tumblr media
Ghost Mode and shooting now work off this variable.
Tumblr media
Here is the updated EventBeginPlay with the set actor location node added.
5 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Adding a Main Menu
Tumblr media
First I made a basic widget for the menu.
Tumblr media
Then I put this code into the EventBeginPlay of the player. The StartGameProper event is called when the Begin Journey button is clicked in the widget.
Tumblr media
This is how it looks ingame. I'm tempted to make it fully opaque, and then have enemy sprites in the corners, but overlaid with a translucent brown sheet so they look like old writings on parchment.
Tumblr media
Like this.
2 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Adding a Slow Mo System (because why not)
Tumblr media
I was bored, and so decided to make this bullet time effect in my game. Basically, it sets the game to 0.5 speed but your health slowly drains. Lore-wise I might make this a power of the Hammer, and also explain it in a menu that pops up when the game starts.
The widget that pops up during slow mo is a ghostly green overlay.
Tumblr media
This code I added a little later to ensure the player could die from entropy.
5 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Adding a better Font
Tumblr media
I found an ancient Roman-looking font called Dominican on Dafont, and applied it to all my widgets. I think it definitely looks better.
5 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Adding a proper Death Mode
Instead of having the game reset instantly when you die, I wanted a menu to pop up, like the infinite runner.
Tumblr media
This code replaces the Open Level By Name block in the EnemyBaseChar.
Tumblr media
This is what it looks like when you die. Of course, the boss has an identical system, but also a special one for when you kill it.
Tumblr media
I am tempted to have special audio stings for when you win or lose.
3 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Adding Particle Effects
To better show that an enemy is being hit, I implemented a Niagara particle system.
Tumblr media
It triggers when the enemy is hit, and runs off a timeline to spray out red cubes on event.
Tumblr media
This is how it appears in-game.
Tumblr media
4 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Adding Sound Effects
Tumblr media
I spent this afternoon sourcing and importing sounds for my game. Every enemy has its own specific "wakeup" sound when it spots the player, and then every enemy makes a gory sound when they die. Picking up crystals and potions makes Morrowind sounds; when the player gets hit it plays a stabbing sound; and when you fire a hammer it plays a magic sound that used to be in a lot of early 2000s fantasy games. Notes rustle, keys jingle, and doors creak open. It definitely makes the world feel more alive, but can get quite hectic. Notably, the hammer sound layers on top of itself at such a rate during the bigger fights that it drowns out everything else. It definitely seems powerful enough for a weapon called the Hammer of Heaven, and I wouldn't expect such a thunderous smiting to sound like a puny woosh anyway.
There is no music, as I am not sure what to use.
4 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Figuring a Better Damage System
Tumblr media
Today I had an epiphany and solved the issue of continually decreasing damage. Basically, an overlap triggers a separate event, which continues looping until its loop is broken by the EndOverlap. It's almost like the button component in a real-life circuit, completing the flow of electricity (or in this case, data).
There is a strange thing where the player doesn't take damage immediately on contact, but I could maybe fix that if I had the first damage code play and then set up the continued event with a delay in front of it (so it doesn't seem like a new loop is beginning).
Tumblr media
I tried this, and it caused the player to occasionally take double damage as the code would activate twice. I have a system to fix this for the moment: I simply double the player's health and all of the health pickups.
I've also applied the code to the boss actor, and now I've basically solved the damage issue. I do see that sometimes you can still get wedged in a corner by them. Perhaps if I increase the size of the collision box? Right now I'll just make a reset button - it'll work like Dark Souls; you lose all your kills, return to spawn, and the enemies reset. Actually it just opens the level but who will know?
3 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Minor Adjustments
I've edited the high score code so it changes in real time. But one issue still remains: the health. Currently the enemy touches the player and deals damage - it's a single event which ends when the player breaks contact and re-triggers the overlap. If the player gets wedged in the corner with an enemy, it's not constantly dealing damage - they are just stuck. I got a friend to try and get a high score - he ended up pushed into a corner with a rock elemental, with no more energy to kill it.
I can't quite figure out how to fix this. I'm sure there's some sort of loop system I can do which stops the loop when the EventActorEndOverlap. I've attempted to use Gates for this but they don't seem to work.
0 notes
nitrosodiumrapidproto 7 months ago
Text
Adding High Score
To add replay value, I added a high score variable to the game instance.
Tumblr media
When the event triggers, it sets the high score, such as when the player dies as part of the BaseEnemyChar. I also decided to put one in the skeleton boss, when you kill it. This required me to make an entirely new actor (just a duplicate of the base but not a child) which had new score-setting code in it.
Tumblr media
Now I can only think of little things that can be fixed, like the enemy hurt system and some collision boxes.
1 note View note
nitrosodiumrapidproto 7 months ago
Text
Finally Fixing Notes
As previously stated, I wanted notes in the game, but I couldn't get them to work. Here is the finished code:
Tumblr media
The key turned out to be casting to the widget. Previously I had been trying to contact the widget with custom events and other useless code, but this works fine. Every Note actor has a public variable called Text Contents, which can be edited per instance like the attributes of enemies. For no reason really, I decided to set the Text Contents to "Peter Griffin". And behold:
Tumblr media
To see if it also works with larger blocks of text, I wrote a little story fluff that the player would pick up throughout the game.
Tumblr media
Each paragraph is for a different note; there are 3. The first 2 are from Dwarf survivors, and the third is from an Orc invader. I wanted to have a proper reason for them to invade the Crucible, so I came up with the idea that the Orcs served the forces of heaven in a prior age, but were forever cursed for their mortal imperfections. Now they plan to literally kill the heavenly pantheon so that mortal beings are no longer judged by the standards of omniscient beings. It does raise an interesting question - if gods were real, and could make their presence felt on Earth (such as permanently disfiguring their once-humble servants because they were led astray by mortal temptation), would people not rebel against them? Would people be content knowing their every movement was being watched and scorned from the aether? And if these gods were fallible, would people not try and kill them?
The only things I have to do now are stretch goals, such as a high score system. I plan that killing the Bone Titan (also called Great Champion by the orcs) will give you 100 Honour, effectively giving you the high score by default. It gives a reason for players to go out of their way to kill enemies that are not in their path, at the behest of their resources.
1 note View note
nitrosodiumrapidproto 7 months ago
Text
Making the Map
Tumblr media
Last night I drew out a basic map sketch in my notebook. This morning I turned it into a tilemap. As you can see, there are roughly five sections to the level. You start in the southwest and head east into the Tombs. From there you can head north to the Barracks, or east again into the labyrinthine Caverns. (The northmost door to the Barracks is locked from the inside, sort of a metroidvania-esque twist so you don't have to backtrack.) To get to the Forge in the northeast of the map, you will either need to go through the Barracks with a key found in the Tomb, or go through the maze of the Caverns and bypass the key entirely. Once you reach the final room of the Forge, you can take a teleporter to the massive white-brick Arena, where you fight a massive Bone Titan in a long corridor. To keep the battle going, there is another teleporter in the far west section of the Arena which brings you back to the centre, sort of a "phase two" for the boss battle.
Tumblr media
This is the map once I have filled it with enemies and pickups. I did a short playthrough of the game each time I filled out a section, just to make sure it was playable. I had a rough formula for making sure the player had enough ammo: (total enemy HP) - (total ammo). Usually the player has some spare to account for misses and sporadic shooting at walls.
2 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Adding A Lot Of Things
Tumblr media
As you can see, the game is now more bulked out. I've created different children of the enemy parent which have the unique enemy models, and also health and ammo pickups. Most interestingly, I have also made a locked door system akin to my FMP.
Tumblr media
The key works using a public variable that can be altered per each key. If it is set to a specific index, it will give the player a respective variable.
Tumblr media
This is the door code. It checks for the respective variables and compares them to the door key index, before destroying itself if it is true.
2 notes View notes
nitrosodiumrapidproto 7 months ago
Text
Making a Prototype Tilemap
Tumblr media
My first move was to add a simple muddy ground texture, as per the SMART objective.
Tumblr media
Then I put all my textures into a basic tile set in Photoshop, and made tiles using the Unreal tileset system.
Tumblr media
I then made a tilemap and dropped it into the game, as I did in the very first project almost a year prior. This is obviously just a basic prototype, and I'll make a proper map in my notebook, before making it fully.
1 note View note
nitrosodiumrapidproto 7 months ago
Text
Playtesting Evidence
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
Today I will be going through my feedback from the playtest yesterday.
One thing that people continued to bring up was that the enemies would not notice the player. There is a reason for this that I brought up earlier: they do not have a 360 degree vision. In a full map, it would be less noticeable.
Tumblr media Tumblr media
This is a basic sketch of the problem at hand. All the encounters will be hand-crafted so the enemies face what direction the player comes from. This also gives the player a chance to take side passages and come up behind unalerted enemies.
S - I will make a level conducive to the 180-degree view of the enemies.
M - Make a level that does not allow immersion-breaking blind spots.
A - I am going to be doing this anyway.
R - As said before, I am doing this anyway.
T - This will take the majority of my project time.
A lot of people also said I should change the floor texture to something less stretched-out. Obviously this is a placeholder but it is a quantative piece of feedback that I can improve on.
S - I will change the floor texture to something less stretched-out.
M - Create a basic sandy-coloured material in Unreal and apply it.
A - Assign time to create said material.
R - I was planning to eventually change the material anyway as it didn't fit the aesthetic.
T - This can probably be achieved within the day.
Another thing people said was that I should add proc-gen levels and enemies, but this is not applicable because I'm doing static level design. One piece of advice was to slow the enemies down, however. Because I plan to have different enemy types, some will be faster, but the standard enemy type should probably be a little slower.
S - I will make the standard enemy parent slower.
M - Change the walk speed from 600 to 500.
A - Very simple.
R - People will find the game easier if I make the enemies slower.
T - This will take a second.
9 notes View notes