Godot 4 Game
Andrei Potrebin, Natalja Frantikova, Kaspar Metsa
Video: https://drive.google.com/file/d/1IrGj9Zxc_mbpHEIjaCRQf7LLBTQrbds4/view?usp=sharing
Repo: https://github.com/potrebin/cg_project_godot4
Executable: https://drive.google.com/file/d/1Wt37CVyr5hfvRnlm0HZadbd8DraBzcAg/view?usp=sharing
Project Overview
Our project is a 3D first-person survival horror game built with Godot 4, set aboard a wooden sailing ship on a dark, moonlit ocean. The game combines exploration, resource management, and tense combat as players navigate the ship while defending against a kraken's tentacles emerging from the depths.
This project is firmly grounded in computer graphics, encompassing the full real-time graphics pipeline from manual 3D modeling and asset creation to rendering, animation, and post-processing. It combines handcrafted geometry, skeletal animation with inverse kinematics, custom shaders, and physically inspired lighting techniques to create a cohesive and atmospheric interactive experience.
The player takes on the role of a lone sailor whose peaceful night voyage is interrupted when a massive sea creature begins attacking the ship. As tentacles emerge from the water and attempt to grab hold of the vessel, the player must use whatever tools they can find - bottles to throw, an axe to swing - to fight back and survive.
The project uses visual storytelling to communicate atmosphere and tension, achieved via custom shaders, ambient lighting, and the ever-present threat lurking beneath the waves.
Players are rewarded with a score for successfully fighting back against the kraken, earning one point for each tentacle defeated. If you’re feeling brave, download the game and see how long you can survive and how high a score you can achieve before the ocean claims the ship :D




Core Gameplay
- Explore a wooden ship by going between different parts of the deck and the captain's cabin
- Collect items such as binoculars (for scouting), bottles (throwable items), and an axe (melee weapon)
- Defend the ship against tentacles that emerge from the water and attempt to grab hold of the vessel
- Manage stamina - sprinting drains energy, which can be restored by sleeping in the cabin bed
- Survive - if too many tentacles grab the ship simultaneously, the player loses


How Did We Do It?
- Godot 4 for the Game engine - handles rendering, physics, scripting, and game logic.
- Blender for 3D modeling - all assets (except the radio) were created in Blender and exported as .glb files.
- GDScript - Programming language for game mechanics and systems.
- GLSL for ocean shader.
3D Assets (Blender)
Blender was completely new to our team at the start of the project. In the early stages, we were beginners and worked very slowly, often struggling with basic modeling workflows and best practices. However, as development progressed, we gradually became more comfortable with the tool.
From the beginning, we made a deliberate decision to model almost everything ourselves. This was important to us both as a learning exercise and so we could honestly claim that the game’s visual assets were handcrafted by the team. Every major object in the game, from the ship itself to the smallest props was created manually in Blender. There was only one exception to this rule. We decided to try out an AI-based 3D model generator for a single asset: the idle radio placed on a table.
All 3D models were hand-crafted in Blender (except radio):
- Ship - Detailed wooden vessel with proper collision geometry (40+ collision shapes)
- Furniture - Bed, table, chairs, helm/steering wheel, crates, lockers
- Items - Binoculars, bottles, axe, lanterns


- Tentacles - Rigged and skinned for IK-based animation

- Textures - 2K resolution albedo, normal, roughness, and metallic maps
Shaders
Screen Distortion Shader
A post-processing effect that signifies tentacle attack

Ocean Shader
Written in GLSL with the following features:
- Wave Simulation
- Moonlight Reflection with Blinn-Phong reflection model
Atmosphere & Lighting
- Dark procedural sky
- Volumetric fog for depth and mood
- Large moon with emissive material (glows visually but does not cast light)
- Simulated moon reflection on ocean surface (shader-based, using Blinn-Phong specular calculation)
Lighting Sources:
- Ambient light - Very dim global illumination (energy 0.02) creates the dark nighttime atmosphere
- Lanterns - Local light sources placed throughout the ship interior provide warm illumination
- Ocean shader - Fakes moonlight reflection on water through specular calculations, not actual light rays
Tentacles
- 11 spawn points positioned around the ship
- 22 grab points distributed across the ship

- State machine: INACTIVE -> EMERGE -> REACH -> HOLD -> RETURN
- Wave spawning: 2 tentacles at a time at random intervals
- Lose condition: 7+ grab points held for 5 seconds
Godot 4 provides a node called SkeletonIK3D, which we used for animating the kraken’s tentacles. Our tentacle models were rigged in Blender, where we added a full bone structure suitable for inverse kinematics. Using SkeletonIK3D, made active tentacles dynamically “reach” toward specific target points on the ship.
In addition to these interactive tentacles, we also included background tentacles that are purely decorative. These use the same bone structure but are animated more simply within Godot, without any gameplay logic. This approach helped add atmosphere and a sense of doom.
Cull Masks
We encountered a visual issue with items the player could pick up, such as the axe and bottles. When held, these items were technically just 3D models positioned in front of the camera. As a result, when the player moved close to walls or other objects, the held items would clip through the environment.
To solve this, we needed the carried items to always appear visually “in front of” the rest of the scene, while still remaining fully 3D and responsive to lighting. The solution was to use Godot’s cull mask system.
We implemented a second camera that follows the player and renders only the held items using a separate cull mask. The main camera renders the world, while the secondary camera renders only the axe and bottles.

Development Progress
How Our Idea Evolved
Our original concept was a story-driven horror experience with a scripted narrative. The game would follow an old sailor navigating the ocean, with the creature's attacks escalating in aggression and visual distortions intensifying over time. The game was planned to end with a dramatic scripted sequence where the kraken throws the ship into the air, resulting in the protagonist's death.
During development, we shifted to an endless survival approach. Instead of a linear story with a predetermined ending, the game now challenges players to survive as long as possible against waves of tentacles. This change allowed us to focus on replayable gameplay mechanics and the tension of defending the ship, rather than scripted cinematic sequences.
Initial Progress (Nov 11)
- Ship model created in Blender
- Dynamic ocean with custom wave shader
- Player movement and interaction system
- Animated cabin door
- Basic environment with moon and nighttime settings
- Initial tentacle design


Links
- Repository: https://github.com/potrebin/cg_project_godot4
- Demo Video: https://drive.google.com/file/d/1WKaW9j0nYRBMFAotSxNWQzY9Cz2jIp3v/view
Download & Play
Controls
| Key | Action |
| WASD | Move |
| Mouse | Look around |
| Shift | Sprint / Get up from bed |
| E | Interact |
| Left Click | Use item (throw/swing) |
| Right Click | Zoom (binoculars) |
Running the Project
Runnable either in Godot Editor or as a Windows executable file. (The guide is detailed in the GitHub repository)
Requirements:
- Godot 4.x Engine
- Git (to clone repository)
Launch Guide (via Godot)
Prerequisites
Make sure you have Godot 4 installed.
Option A: Visit Godot's official page HERE and download the latest Godot 4.x version for your operating system.
Option B: Go to Steam and search for Godot Engine. Add it to your library and install it.
In order to run the game in Godot:
- Clone the repository
- Open Godot 4
- See prerequisites if you don't have Godot 4 installed
- Click Import
- Select the cg-project-2025 folder in the cloned repo and open it
- When the project fully loads, click the Run Project button (small triangle on the top bar)
Launch Guide (Windows executable)
- Access this Google Drive folder: LINK
- Download the folder
- Once downloaded, run the .exe game file