Skip to content

SapienzaInteractiveGraphicsCourse/final-project-interactivelan

Repository files navigation

Static Defense

Play

Tanks are coming and you are left alone with a 9M133 Kornet.
Reload manually between every shot and survive the assault.


How it plays

Three waves of enemy tanks spawn from the map edges and advance toward your position using A* pathfinding. They slow down when hit, catch fire, and eventually cook off. Let any one of them reach you and it's over.

You hold a single static launcher. Rotate it with the mouse, pitch up or down, and fire. Each missile stays under your control after launch, so you guide it to the target. Reloading takes time and plays out as a full animation, so every shot counts.

The map is different every run, generated from simplex noise before the match starts. Size, terrain frequency, and amplitude are all adjustable from the pre-game menu.

Gameplay screenshot
A tank is approaching our position

Scoped view
The scope allows for precise long-range targeting
TV intro
We received an important communication

The launcher

The weapon is a 9M133 Kornet, a Russian anti-tank guided missile system. The model and all its textures were handmade in Blender, built from reference images to match the launcher's silhouette within a low-poly budget.

In-game 3D model
In-game model
Real 9M133 Kornet
Real 9M133 Kornet

The enemy

The enemy tank started as a model downloaded from Sketchfab, then edited in Blender to fit the game's needs. The textures were created from scratch. The result does not represent any specific vehicle but loosely takes after Soviet-era tank aesthetics in shape and proportion.

Enemy tank


Terrain generation

The map is built from two octaves of simplex noise, quantized into discrete height steps for a stylized look. Vertex colors are blended per-vertex from height and slope: flat ground stays green, low depressions go brown, steep faces turn rocky. Enemy spawn positions, protected nav corridors, and the launcher placement are all derived from the final heightmap.

Every run is different. Size, frequency, and amplitude are exposed in the pre-game menu.

Terrain generation
Procedurally generated terrain
Navigation map
A* navigation grid overlay

Controls

Input Action
← → Rotate launcher
↑ ↓ Elevate gun
RMB Toggle scope
LMB Fire (scoped only)
R Reload
Click Lock pointer

Debug scenes

The scene selector includes additional scenes for isolated testing:

Scene Description
Terrain Live sliders for size, frequency, amplitude, and clutter density. Navmap overlay toggle.
Launcher Full launcher controls, no terrain. Six tanks spawn at staggered distances.
Tank Single tank in a fixed point, for hitbox and behavior inspection.
TV The intro TV prop in isolation.
Model Viewer Orbit any model. Cycles through all props, supports wireframe toggle and camera reset.

Credits

Asset Source
Tree models Sketchfab
Tank model (base) Sketchfab
TV model Sketchfab
Grass models Sketchfab
Rock models Sketchfab
Grass terrain texture freestylized.com
Sky textures Poly Haven
Sounds Pixabay

Lorenzo Carlini 1883140  ·  Interactive Graphics, Sapienza 2025–2026

About

final-project-interactivelan created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors