Skip to content

Instantly share code, notes, and snippets.

View WolfgangSenff's full-sized avatar

Kyle Szklenski WolfgangSenff

View GitHub Profile
@WolfgangSenff
WolfgangSenff / gist:827b8daf74e4f63312a7d0c9d053d904
Created December 18, 2022 10:46
Calling functions on other scripts in Godot
# In your Enemy.gd script
...
const KILL_EFFECT_SCENE = preload(...)
func take_damage(amount: float) -> void:
enemy_stats.hitpoints -= amount
if enemy_stats.hitpoints <= 0:
kill()
@WolfgangSenff
WolfgangSenff / .gd
Created December 9, 2022 14:10
A horizontal shake method to help add hit stops to your games!
extends Node
# Make this a global singleton if you want
func shake_horizontal(thing, strength: float) -> void:
var orig_pos = thing.position
var current_amount = 6
var shake_count = int(abs(current_amount))
for i in shake_count: # Tweak these values
var tween = create_tween().tween_property(thing, "position", Vector2.RIGHT * pow(-1, i) * strength * current_amount, 0.01)
await tween.finished
@WolfgangSenff
WolfgangSenff / gist:3c8813a799965d3087f4223cf3e44aba
Created September 29, 2022 12:39
Godot RPG Movement Script Template
# meta-description: Classic movement for RPG or top-down games that do not apply gravity
# meta-name: RPG movement
# meta-default: true
# meta-space-indent: 4
extends _BASE_
const SPEED = 450.0
const FRICTION = 1000.0
@WolfgangSenff
WolfgangSenff / gist:168cb0cbd486c8c9cd507f232165b976
Last active May 12, 2026 07:50
Godot 4.0 Migration/Upgrade guide
## For a beginner-friendly version of the following (more advanced users likely will get better use of the below,
## if you're just starting out...), see this new gist:
## https://gist.github.com/WolfgangSenff/0a9c1d800db42a9a9441b2d0288ed0fd
This document represents the beginning of an upgrade or migration document for GDScript 2.0 and Godot 4.0. I'm focusing on 2D
at the moment as I'm upgrading a 2D game, but will hopefully have more to add for 3D afterward.
## If you want more content like this, please help fund my cat's medical bills at https://ko-fi.com/kyleszklenski - thank you very much! On to the migration guide.
@WolfgangSenff
WolfgangSenff / Butterfly.gd
Created November 17, 2021 06:33
For Jacob
extends Area2D
const FlightMagnitude = 20.0
const FlightFrequency = 5.0
const FlightSpeed = 8.0
var _current_flight_angle := 0.0
var _flying_left := 1
func _physics_process(delta : float) -> void:
@WolfgangSenff
WolfgangSenff / Node2D.gd
Created August 17, 2021 14:54
File open broken
extends Node2D
func _ready() -> void:
var file = File.new()
var file_location = "user://cache_temp/icon.png"
if not file.file_exists(file_location):
var result = file.open(file_location, File.WRITE_READ)
var buffer = preload("res://icon.png").get_data().get_data()
file.store_buffer(buffer)
file.close()
@WolfgangSenff
WolfgangSenff / PinchAndDragCamera2D.gd
Created January 10, 2021 12:50
A camera script in GDScript that makes for clean pinch-to-zoom and pan-to-drag functionality.
extends Camera2D
export (NodePath) var target
var target_return_enabled = true
var target_return_rate = 0.02
var min_zoom = 0.5
var max_zoom = 2
var zoom_sensitivity = 10
var zoom_speed = 0.05
extends Resource
class_name FolderListResource
export (String) onready var FolderPath setget set_folder_path
export (String) var ResourceCategory
var all_resources = []
func set_folder_path(value):
FolderPath = value

Keybase proof

I hereby claim:

  • I am wolfgangsenff on github.
  • I am wolfgangsenff (https://keybase.io/wolfgangsenff) on keybase.
  • I have a public key ASAvwW-SmM6W-1E_SbwlAuHp0-FzFBjg3vBVmxZeKYOo1wo

To claim this, I am signing this object:

@WolfgangSenff
WolfgangSenff / ForStephanie.gd
Created September 13, 2019 19:55
How to play looping animations in Godot _process or _physics_process
func _physics_process(delta):
if Input.is_key_pressed(KEY_A):
rotate_y(0.1)
if $AnimPlayer.current_animation != "Walk-loop":
$AnimPlayer.play("Walk-loop")
elif ...