Unfortunately, I couldn’t finish all 5 games. But the second game is finished!!
It is when Wario gets puffed up like a balloon he has to float up and dodge the bees or he will get popped and fall to the ground.
I am yet to make readme but then I’ll ship!!!
I started working on the procedural generation where the game would generate tiles all across the map. However, with my really complicated tilechunks (as you can see below) and my lack of knowledge on this topic, I decided to just simplify them. It got really messy really quickly. They started overlapping, and the cars didn’t function as planned.
Other than that, I made a home screen and a main menu, score tracking, and audio. I updated the player combat and death handling, tile collisions, and Windows export settings.
I think I’m ready to ship!
I went to my coding club and asked fellow Godot/Unity enthusiasts to test my game!
Here’s basically what they said…
Additionally, I got a 2nd round of feedback from my Dad…
He said the UI is much better, less cluttered and the flashlight is better as well as the other features, but he has some more feedback.
So, I implemented the vines with a glowing green shader, so it is easily visible to the player. I placed them in paths leading to the entrance and tunnels, so player knows where to go.
As for the radio messages I added a yellow flashing border around them to attract player attention.
As for the flashlight, I just cranked the energy up to like 50+, did the job pretty well.
I added a sonar scan because the testers believe that the beacon signal is too generic and not really helpful, thus making the periscope itself not useful. In order to improve this, I added a sonar scan, the circular map that actual submarines use. After looking at some tutorials, checking documentation and reddit posts, I realized that I just have to somehow convert my prior knowledge of polar coordinates and convert them into game code. After a while, I got the red dots (sea mines) to appear on the map when the player presses the scan button (x).
Additionally, using groups, I got the warheads to come up as yellow dots on the sonar map.
The main menu was an easy fix, just had to increase the energy of the light.
As for the initial objective, I made an animation where the camera shows the player where the warheads are located and the journey they have to take, it like shows the whole path so the player has some knowledge of knowing if they are going on the right path. Also just added another hint telling the player of the direction (80-90° East.)
As for the Finale sequence, I just added a spinning arrow that points to the warhead signalling that the player has to ram it with their hull. Additionally, there are radio messages telling the player what to do.
When the player escapes, I added a tall, enclosed tunnel with hanging vines for the player to escape through. Makes the game design much more intentional and doesn’t confuse players into thinking they just broke through the map.
For the minimap, I used a SubViewportContainer with a camera being referenced to the actual SubViewport Node. The camera is in Orthogonal mode, and just facing down on the player 30metres away. The input is being displayed on the SubViewport.
For the submarine font, I changed some of the colors so the font stands out more and becomes more CRISP and changed the font so the player can easily understand what’s on the dashboard.
Another quick and easy fix was the radioactive logos. Just got a MeshInstance3D and slapped the texture on there and stuck it on the side of the warhead.
I have asked a tester (Dad) to test my game. He started playing the game and gave me a sheet of feedback. Upon deciphering the handwriting I made a list of main list of what needs to be improved.
As a result, I merged the top panel into the bottom panel while replacing the top section with the radio messages. This time the player has much more screen-space to play in while the radio messages just briefly appear on the screen, not blocking the player’s view.
As for the flashlight, I used a MeshInstance3D equipped with an emission Material so the flashlight looks much “crisper”.
I also increased the show time for the radio messages from 3 seconds to 5 seconds so player will realise that a message has popped and has sufficient time to read it.
As for the ocean environment, I just boosted the emission of the volumetric fog while make the background color slightly lighter rather than leaving it pitch black (Made it like a really dark navy blue).
While testing the game, I also found a bug with the Restart button in the pause screen.
The bug was that when the player pressed restart, the scene tree was still paused, so the intro animation wouldn’t start until you unpaused it.
So in order to fix this I just added another single line of code.
func _on_restart_button_pressed():
get_tree().paused = false#This was the line of code needed
get_tree().reload_current_scene()
The death screen was fairly easy, I just repurposed the pause screen to become the death screen when the player dies.
Put a help option on the home screen. If you hover your mouse over the help button, the hints will appear on the side, similar to FNAF.
Additionally, I added a scrolling bar that goes from right to left on the submarine UI. I didn’t want to add another button to the pause menu because it would look too cluttered. This new addition looks pretty neat.
I went for an extreme horror vibe, dark environment, low light, eerie background noises and single sonar ping. I also animated the camera so that it ‘floats’ around as well as a nearly invisible figure moving in the background to give that eerie feeling that you are not safe and something is watching you. This was done in response to my research on what makes a horror game so scary from the menu only.
Using the visible characters setting in the Label node, I made this niche typewriter/coding briefing scene. With a single ‘ACCEPT’ button. Upon clicking it, player gets sent to the play scene.
I made a fairly simple pause screen. Nothing fancy, but vital at the same time. Press ‘Escape’, game paused. I am considering reusing the pause menu, change the text with code to use it as a death screen
The animations are just the player being transported on the tugboat. The same one I modelled in the previous devlog. Intro takes the player to the site. Outro has 5/6 warheads on it and taking the player away from the site. This is to add cohesion so the player doesn’t get confused between scene transitions. However, I realised during the animations, the sky in the environment goes MAD. It starts rapidly flashing between white and blue, similar to lightning, but I am not a fan of it, must remove.
I decided to spice things up by adding a little bit of drama at the end. The player will collect the 6th warhead, uh-oh it’s jammed AND at the SAME time, the ceiling’s going to collapse! The player ram their hull with the warhead to trigger the ignition. The warhead will launch itself at the wall creating a huge hole for the player to escape through, they rise up to the surface and the epilogue cutscene plays.
Making the environment definitely took the longest but it wasn’t the hardest task, just a lot of copy and paste of walls. However finding any gaps or holes in which the player can creep down into was annoying. After a few hours of looking around, banging into walls, I did find and patch up a few but am not sure if that is all of them. Hopefully, to discourage/guide the player away from the corners and edges, I put huge sharks guarding the walls as well as rows of sea mines to tell the player to look somewhere else, not here.
Also, I added a couple of underwater ruins, like a wrecked ship and a submarine.
The actual warhead retrieval process is working now, when the submarine touches it, a parachute will come up and lift the warhead to the surface, where hopefully the boat will collect.
Coding the sharks was fairly easy (Literally 2 lines of code) as I used a Path3D and a PathFollow3D node to just map out the path in the inspector.
func _process(delta):
progress += 20*delta
That is all the code, the progress, is how far the shark is along the track and the integer determines how fast the shark moves.
I could’ve used an AnimationTree node but with my prior experience to that, just thinking of the whole coding part, setting the animations up, the chase player code made me cringe a lot, also there’s not enough time.
So in addition to the current features of the MMS scanner, it can also track the ‘SOS beacon’ of the abandoned target submarine by taking its position and comparing it to the player’s and using ranges of signal strength with distance to see how ‘strong’ the signal is.
Additionally, it does the exact same for angle, so the scanner can tell player which direction the submarine was found.
The plan in mind is like some cool visual graphics telling you, your objective, a brief map layout telling you of hazards, some lore, like ‘Secret weapon’s mission gone wrong, must retrieve warheads before enemies do so’ the submarine is on a tugboat sailing on the sea, the crane will pick it up and dump it in the water
Full lapse of tugboat here : https://lapse.hackclub.com/timelapse/lsYzC1wA-xLH
The part that took the longest was the environment, taking in the lengths, finding hidden collision gaps, setting each zone up and placing obstacles.
The sea mine code was fairly simple, I also added some explosion particles when it exploded. That was really fun.
Additionally, I made a periscope scanner that can scan the ocean for any relics/mines/sharks in sight. The most aesthetic addition to the submarine and it gives the periscope a proper purpose rather than just a fun extra. I was heavily inspired by Call of Duty with their MMS (Milimeter scanner). This scanner can see through walls and highlight enemies!
Before we would have relics being the prized possession to retrieve.
However, after realising how vast the map was and the extreme likelihood of players not being able to find all relics was too high to ignore.
So instead of the player collecting relics, I have decided that they will go on an extremely difficult mission to retrieve some nuclear warheads/missiles on a U.S. nuclear submarine. The abandoned submarine will lie at the very bottom of 300m. The player must dodge sea mines, explore the other shipwrecks/submarines all before some rivals get their hands on it. Something like that for the briefing screen
The player will deploy buoys/parachutes on the missiles, and they will float to the surface. A boat will come and collect them. Mission Complete!
I will be using a similar layout but with a different set of decorations, more submarines/shipwrecks, signs of naval warfare, mines and the warhead finally.
For some ruins where the relic might be, I have added some crumbled pillars, ruined archways, cracked stone slabs and an altar for the relic to rest on. I did some basic extruding to get the original shape down, then just pulled and twitched with the vertexes to give it the run down effect
Additionally, the sea mine was fairly easy to make, a sphere, cylinders and a chain. Making the chain to the base was by far was the most satisfying part of the build as you just copy, paste, rotate and within seconds you get a neat, professional looking chain.
The relics were pretty easy, a glowing orb with unique patterns drawn across it and a shield. The plan is to just change the colour of the hues so the player has a common sense of what an orb looks like. Colours can be blue, violet, pink, red, yellow, gold, orange, and vice versa for the shield.
Now, the main event, the shark. I spent 6 hours and 32 minutes, modelling, texturing, rigging and animating this thing. This is by far the most complex project I have ever done (maybe even the most successful in terms of rigging!)
Below is the link of all my lapses for the shark only
https://lapse.hackclub.com/user/@NCGAMEMAKING
I’ve set the basic environment up, just a big square with rocks as barriers.
Using all of these assets to make the environment. I have to layout the relics, ruins, sea mines, sharks.
I have to code out the sea mine so it explodes with explosion graphics (not that hard)
Code the shark so it like swims in its patrol area and so if the player’s flashlight is shining on the shark it will start chasing the player, hurt the player and move on with its basic patrol.
During further testing of the submarine on new features, I felt like steering the submarine felt awkward as it was locked on a flat horizontal plane. Pitching up and down required extra key binds.
So I decided to change/improve the physics and input methods of the submarine so driving it feels much more smoother.
I decided to change my third person camera into a periscope to give my game a more ‘claustrophobic’ feel hoping to get the element to show how small you are in such a big ocean.
Well, the periscope has a open and shut animation and well as audio polish. The player can see through a small circle and see their surroundings. (Also for visual polish when the submarine is at low health the glass will even appear cracked!)
Moving the mouse left and right handles the Yaw (left and right) but now I made it so that it can handle the pitch (up and down) so the player can point the sub’s nose up when ascending.
The player does have the direct keys for vertical changes like diving and climbing still giving players all the options when using the submarine.
I have added dynamics pitch scaling so the background engine hum will go change when in different states. Quiet for idle. Loud for moving. I added hiss and bubble effects just like how real submarine use their ballasts to rise and fall, hull breach alarms, collision thuds, warning sounds as well deep pressure creaking of the hull.
When the player reaches 0(Zero) health, the sub will like spin out of control and ‘crash land’ in the water. The screens will show errors and soon fade away. The scene then reloads.
Also using a Shapecast3D, I managed to make a collisions system. The bottom left text will say ‘COLLISION : FINE’ if there are no objects in the enlarged ShapeCast but if there are objects in that shape the text will go red and say ‘COLLISION : WARNING’
I also added a script to the steering wheel so it would turn as the player is moving the mouse to give it more responsiveness. Much better than a static wheel in the front.
Additionally, to give that immersive feel I made simple marine particles. These are like your pieces of plankton or dust in the ocean. They just float around the screen and even rush by appropriate to the sub’s velocity.
After the player features and movement was locked in. It was time for environmental visuals. I realised that my basic volumetric fog wasn’t quite cutting it for an immersive ocean.
After some research, I stumbled upon the fantastic Boujie Water Shader created by Cory Petkovsek (GodotNite / Boujie)
I love this addon. It really brings the ocean to life using Gerstner waves this is really good for optimization in the future!
With Submarine movement, UI and audio out of the way, the focus is now entirely towards Level Design and Gameplay loops.
Here is my todo list:
I will have 3 zones and each zone has 4 artifacts. Each zone will get darker, and more scarier.
Now that I am changing my placeholder of ‘RINGS : 0/12’ to Relics I am thinking of making 12 ancient, artifacts scattered across the map waiting for the player to collect them.
By placing environmental obstacles, tight squeeze caverns, minefields or even patrolling enemies this will make the gameplay much more exciting!
See you in the next devlog where we explore level design!
Another update with the game, things are really starting to come together with the game feel and world design
tween functiontilemaps and Sprite2Ds to make different zones.I am yet to figure out how to stitch the chunks together.
This is the difficulty logic
enemies_left_to_spawn = 5 + (current_wave + 2)
spawn_cooldown = max(0.4, 1.5-(current_wave * 0.1))
We have a base amount of 5 plus the extra enemies + 2 and the extended time it take to spawn zombies making each wave slightly longer than the previous one.
#Imperfect spawning of zombies
One thing I am noticing, is that some of the zombies are spawning inside of the bushes and are just stuck there, the player can’t shoot the zombie because of collision layers and the game is ‘hardstuck’ I am yet to work on how to fix it
Something also that I’ve have noticed consistently is that the bullets sometimes not fire that well, it appears that they might be hitting the player and not spawning? I have been scratching my head on this bug for a while, any suggestions will be GREAT!
Have a look at the screenshots and comment down below what you think the following structures look like! (This feedback will be very helpful! I’ll tell the answers in the next devlog!)