Building 2D and 3D games with GDScript โ from platformers to full 3D adventures with physics, enemy AI, animation systems, and custom Blender assets.
Click the image/video area to see your game screenshot ยท Replace placeholder with your real screenshot
A complete 2D platformer built entirely in Godot 4 using GDScript. Features custom physics, multiple enemy types with AI behaviour, collectibles, health system, multiple levels, and a working save/load system.
A 3D exploration and adventure game built in Godot 4 with custom 3D assets created in Blender. Features a third-person camera system, dynamic lighting, environmental storytelling, and immersive sound design.
Save your screenshots as screen1.png, screen2.png ... screen6.png and put them in assets/images/
screen1.pngSave a screenshot as this filename in assets/images/
screen2.pngSave a screenshot as this filename in assets/images/
screen3.pngSave a screenshot as this filename in assets/images/
screen4.pngSave a screenshot as this filename in assets/images/
screen5.pngSave a screenshot as this filename in assets/images/
screen6.pngSave a screenshot as this filename in assets/images/
Player controller from the 2D platformer
# Player Controller โ 2D Platformer
extends CharacterBody2D
const SPEED = 200.0
const JUMP_VEL = -420.0
const GRAVITY = 980.0
var health = 3
func _physics_process(delta):
# Apply gravity when in air
if not is_on_floor():
velocity.y += GRAVITY * delta
# Horizontal input
var dir = Input.get_axis("ui_left", "ui_right")
velocity.x = dir * SPEED
# Jump
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VEL
move_and_slide()
update_animation(dir)
func update_animation(dir: float):
if dir != 0:
$Sprite2D.flip_h = dir < 0
$AnimationPlayer.play("run")
elif not is_on_floor():
$AnimationPlayer.play("jump")
else:
$AnimationPlayer.play("idle")
func take_damage():
health -= 1
if health <= 0:
get_tree().reload_current_scene()