diff --git a/tr-tr/gdscript-tr.html.markdown b/tr-tr/gdscript-tr.html.markdown
new file mode 100644
index 00000000..91be0327
--- /dev/null
+++ b/tr-tr/gdscript-tr.html.markdown
@@ -0,0 +1,372 @@
+---
+language: GDScript
+contributors:
+ - ["Wichamir", "https://github.com/Wichamir/"]
+ - ["zacryol", "https://github.com/zacryol"]
+filename: learngdscript.gd
+translators:
+ - ["R1cHero", "https://github.com/R1cHero"]
+lang: tr-tr
+---
+
+GDScript, özgür ve açık kaynaklı oyun motoru olan Godot için dinamik ve statik olarak
+yazılmış bir kodlama dilidir. Yazılış şekli Python'a biraz benzerdir.
+Başlıca avantajları kullanım kolaylığı ve motorla olan uyumudur.
+Oyun geliştirme için mükemmel bir uyum sağlar.
+
+## Temeller
+
+```gdscript
+# Tek satırlık yorumlar, '#' simgesi kullanılarak yazılır.
+"""
+ Çok
+ satırlı
+ yorumlar
+ üç
+ tırnak
+ kullanılarak
+ yazılır
+"""
+
+# Belge yorumları (Doc Comments) sınıflara ve alanlara açıklama ekleyebilir.
+# bunlar, motor içi dokümanlarda görüntülenebilir.
+
+## Bu sınıf, GDScript'in bir gösterimidir
+
+# Komut dosyası kendi başına bir sınıftır ve isteğe bağlı olarak bunun için bir ad tanımlayabilirsiniz.
+class_name MyClass
+
+# Kalıtım (Inheritance) komut dosyasının bağlı olduğu Node'a göre 'Node2D' kısmı değişkenlik gösterir.
+extends Node2D
+
+# Değişken türleri
+var x = 8 # int
+var y = 1.2 # float
+var b = true # bool
+var s = "Merhaba Dünya!" # String
+var a = [1, false, "turuncu kedi"] # Array - Python'daki listeye benzer,
+ # aynı anda farklı tipte
+ # değişkenleri tutabilir.
+var d = {
+ "key" : "value",
+ 42 : true
+} # Sözlük anahtar-değer (key-value) çiftlerini tutar.
+var p_arr = PackedStringArray(["Hey", "selamlar", "!"]) # Paketlenmiş diziler yalnızca
+ # belirli bir türü tutabilir.
+
+# Doküman yorumları, özelliklere uygulanabilir.
+
+## Bu değişken nesnenin kaç kez zıpladığını tutar.
+var jump_count = 0
+
+# Motorda bulunan yerleşik vektör türleri:
+var v2 = Vector2(1, 2)
+var v3 = Vector3(1, 2, 3)
+
+# Sabitler (Constants)
+const ANSWER_TO_EVERYTHING = 42
+const BREAKFAST = "Sucuklu yumurta!"
+
+# Enumlar
+enum { ZERO, ONE , TWO, THREE }
+enum NamedEnum { ONE = 1, TWO, THREE }
+
+# Dışa aktarılan değişkenler 'inspector' de görünür.
+#
+# Editörün hangi seçenekleri vereceğini bilmesi için bir tür ipucu (daha sonra açıklanacaktır)
+# veya varsayılan bir değere ihtiyaç vardır.
+@export var age: int
+@export var height: float
+@export var person_name = "Ahmet"
+# Ama ikisi de kabul edilebilir.
+@export var favorite_color: String = "Kırmızı"
+@export var favorite_food := "Lahmacun"
+
+# Fonksiyonlar
+func foo():
+ pass # pass anahtar sözcüğü gelecekteki yazılacak olan kod için bir yer tutucudur.
+ # Editörde hata olarak göstermesini engellemek için de kullanılır.
+
+func add(first, second):
+ return first + second
+
+# Fonksiyonlar üzerinde doküman yorumları yazma
+
+## Zıplama Sayısını Artırma
+func jump():
+ jump_count += 1
+
+# Değerleri yazdırma
+func printing():
+ print("GDScript ", "mükemmel.")
+ prints("Bu", "kelimeler", "boşluklarla", "ayrıldı.")
+ printt("Bu", "kelimeler", "tablarla", "ayrıldı.")
+ printraw("Bu sistem konsoluna yazdırılır.")
+ printerr("Bu konsolda hata olarak gösterilir.")
+
+ # İsimsiz fonksiyonlar (Lambdas)
+ var my_lambda = func(): print("lambda'dan merhaba!")
+
+ my_lambda.call()
+
+# Matematik
+func doing_math():
+ var first = 8
+ var second = 4
+ print(first + second) # 12
+ print(first - second) # 4
+ print(first * second) # 32
+ print(first / second) # 2
+ print(first % second) # 0
+ # Ayrıca bunlar var +=, -=, *=, /=, %= vb.,
+ # ++ veya -- operatörleri yok.
+ print(pow(first, 2)) # 64
+ print(sqrt(second)) # 2
+ printt(PI, TAU, INF, NAN) # Yerleşik (built-in) sabitler (constants)
+
+# Kontrol akışı
+func control_flow():
+ x = 8
+ y = 2 # y orjinalde float'dı,
+ # ancak "dynamic typing" gücünü kullanarak
+ # tipini int'e değiştirebiliriz!
+
+ if x < y:
+ print("x, y'den küçüktür.")
+ elif x > y:
+ print("x, y'den büyüktür.")
+ else:
+ print("x ve y eşittir.")
+
+ var a = true
+ var b = false
+ var c = false
+ if a and b or not c: # alternatif olarak bunları kullanabilirsiniz: &&, || ve !
+ print("Değer: true")
+
+ for i in range(20): # GDScript'de "range" Python'dakine benzerdir.
+ print(i) # bu 0'dan 19'a kadar sayıları yazdıracaktır.
+
+ for i in 20: # Python'dan farklı olarak, doğrudan bir int üzerinde "range" kullanmadan döngüye girebilirsiniz.
+ print(i) # bu da 0'dan 19'a kadar olan sayıları da yazdıracaktır.
+
+ for i in ["two", 3, 1.0]: # Bir dizi üzerinde yineleme (iterasyon) yapma.
+ print(i)
+
+ while x > y:
+ printt(x, y)
+ y += 1
+
+ x = 2
+ y = 10
+ while x < y:
+ x += 1
+ if x == 6:
+ continue # 6, "continue" ifadesi nedeniyle yazdırılmayacak.
+ prints("x eşittir:", x)
+ if x == 7:
+ break # döngü 7'de duracak, bu yüzden 8, 9 ve 10 yazdırılmayacak.
+
+ match x:
+ 1:
+ print("Match, switch'e benzerdir.")
+ 2:
+ print("Ancak her değerden önce "case" koymanıza gerek yok.")
+ 3:
+ print("Ayrıca her "case" varsayılan olarak durdurulur.")
+ break # HATA! "Break" ifadesi gereksiz!
+ 4:
+ print("Eğer "fallthrough" kullanmaya ihtiyacınız varsa "continue" kullanın.")
+ continue
+ _:
+ print("Alt çizgi varsayılan bir "case"dir.")
+
+ # Üç terimli operatör (tek satırda yazılabilen if-else)
+ prints("x", "pozitif" if x >= 0 else "negatif")
+
+# Bir veri tipini başka bir veri tipine dönüştürme (Casting)
+func casting_examples():
+ var i = 42
+ var f = float(42) # Değişkenlerin kurucusunu (constructor) kullanarak
+ var b = i as bool # veya "as" anahtar kelimesini kullanarak tür dönüştürme (casting)
+
+# Override fonksiyonlar
+# Built-in kurallı "overridable functions" bir alt çizgi ile başlar
+# ama pratikte hemen hemen her fonksiyonu geçersiz kılabilirsiniz.
+
+# _init nesne başlatıldığında çağrılır.
+# Bu, nesnenin kurucusudur (constructor).
+func _init():
+ # Burada nesnenin iç öğelerini başlatın.
+ pass
+
+# _ready, komut dosyasında
+# node ve children node sahneye girdiğinde çağrılır.
+func _ready():
+ pass
+
+# _process her karede çağrılır.
+func _process(delta):
+ # Bu fonksiyona iletilen delta argümanı,
+ # son kare ile anlık kare arasında geçen saniye sayısıdır.
+ print("Delta zamanı: ", delta)
+
+# _physics_process her fizik karesinde çağrılır.
+# Deltanın sabit olması gerektiği anlamına gelir.
+func _physics_process(delta):
+ # Vektör toplama ve çarpma kullanarak hareket ettirme.
+ var direction = Vector2(1, 0) # ya da Vector2.RIGHT
+ var speed = 100.0
+ self.global_position += direction * speed * delta
+ # self geçerli sınıf örneğini belirtir.
+
+# Geçersiz kılma sırasında, buradaki gibi nokta operatörünü kullanarak
+# parent işlevini çağırabilirsiniz:
+func get_children():
+ # Bazı ek şeyler ekleyebilirsiniz.
+ var r = super() # Parent implementasyonunu çağırma
+ return r
+
+# Dahili sınıflar (Inner class)
+class InnerClass:
+ extends Object
+
+ func hello():
+ print("Dahili sınıftan merhabalar!")
+
+func use_inner_class():
+ var ic = InnerClass.new()
+ ic.hello()
+ ic.free() # Ramde yer açmak için "free" kullanın.
+```
+
+## Sahne ağacındaki (Scene Tree) diğer node'lara erişim
+
+```gdscript
+extends Node2D
+
+var sprite # Bu değişken referansı tutacak.
+
+# _ready'de diğer node'lara referanslar alabilirsiniz.
+func _ready() -> void:
+ # "NodePath" node'lara erişmek için kullanışlıdır.
+ var path1 = NodePath("path/to/something")
+ # Ya da böyle kullanabilirsiniz:
+ var path2 = ^"path/to/something"
+ # NodePath örnekleri:
+ var path3 = ^"Sprite" # geçerli node'un child node'u
+ var path4 = ^"Timers/Firerate" # child node'un child node'u
+ var path5 = ^".." # geçerli node'un parent node'u
+ var path6 = ^"../Enemy" # geçerli node'un kardeşi
+ var path7 = ^"/root" # ana yol, get_tree().get_root() ile eşdeğerdir.
+ var path8 = ^"/root/Main/Player/Sprite" # Player'ın Sprite'ına giden ana yol
+ var path9 = ^"Timers/Firerate:wait_time" # özelliklere erişme
+ var path10 = ^"Player:position:x" # alt özelliklere erişim
+
+ # Son olarak, referans almak için bunlardan birini kullanabilirsiniz:
+ sprite = get_node(^"Sprite") as Sprite # her zaman belirttiğiniz türü yazın
+ sprite = get_node("Sprite") as Sprite # burada String
+ # NodePath'e dönüştürülür
+ sprite = get_node(path3) as Sprite
+ sprite = get_node_or_null("Sprite") as Sprite
+ sprite = $Sprite as Sprite
+
+func _process(delta):
+ # Artık referansı başka yerlerde tekrar kullanabiliriz.
+ prints("Sprite has global_position of", sprite.global_position)
+
+# _ready çalıştırılmadan hemen önce
+# bir değişkene değer atamak için @onready kullanın.
+@onready var other_sprite = $Sprite as Sprite
+
+# NodePath'i dışa aktarabilir, böylece onu "inspector" içinde atama yapabilirsiniz.
+@export var nodepath = ^""
+@onready var reference = get_node(nodepath) as Node
+
+# Veya Node'u doğrudan dışa aktarın
+@export var other_reference: Node
+```
+
+## Sinyaller (Signals)
+
+Sinyal sistemi Godot'nun gözlemci programlama modelinin uygulamasıdır.
+İşte bir örnek:
+
+```gdscript
+class_name Player extends Node2D
+
+var hp = 10
+
+# Belge yorumları sinyallere de yansıyabilir
+
+## Oyuncu öldüğünde sinyal gönderir (emit).
+signal died() # sinyali tanımlama
+signal hurt(hp_old, hp_new) # sinyallere değişken tanımlanabilir.
+
+func apply_damage(dmg):
+ var hp_old = hp
+ hp -= dmg
+ hurt.emit(hp_old, hp) # sinyal gönderme ve değişkenleri iletme
+ if hp <= 0:
+ died.emit()
+
+func _ready():
+ # "died" sinyali kendi içinde tanımlanan "_on_death" fonksiyonuna bağlama
+ died.connect(_on_death)
+ # Hedef nesne kendisi değilse
+ # alternatif bir yol gerekir.
+ # died.connect(Callable(self, &"_on_death"))
+
+func _on_death():
+ queue_free() # oyuncu öldüğünde sahneden siler
+```
+
+## Faydalı İpuçları
+
+GDScript'te hem kod netliği hem de performans avantajları için
+opsiyonel olarak "static typing" kullanılabilir.
+
+```gdscript
+extends Node
+
+var x: int # değişkenin türünü belirtme
+var y: float = 4.2
+var z := 1.0 # ":=" operatörünü kullanmak üstteki tanımlama ile aynıdır.
+
+var a: Array[int] = [1, 2, 3] # Dizinin tür içeriğini belirtme
+
+enum NamedEnum { ONE = 1, TWO, THREE }
+var n: NamedEnum = NamedEnum.ONE # Enum da bir tür olarak kullanılabilir.
+
+@onready var node_ref_typed := $Child as Node
+
+@export var speed := 50.0
+
+const CONSTANT := "Bu bir sabit atamadır (constant)."
+
+signal example(arg: int)
+
+func _ready() -> void:
+ # fonksiyon hiçbir şey döndürmez
+ x = "string" # HATA! Tür değiştirilemez!
+ a.append("q") # HATA! Array[int] string tutamaz!
+ return
+
+func join(arg1: String, arg2: String) -> String:
+ # Fonksiyon iki tane string alır ve bir tane string döndürür.
+ return arg1 + arg2
+
+func get_child_at(index: int) -> Node:
+ # Fonksiyon int alır ve node döndürür.
+ return get_children()[index]
+```
+
+## Daha fazla bilgi almak için
+
+* [Godot's Website](https://godotengine.org/)
+* [Godot Docs](https://docs.godotengine.org/en/stable/)
+* [Getting started with GDScript](https://docs.godotengine.org/en/stable/getting_started/scripting/gdscript/index.html)
+* [NodePath](https://docs.godotengine.org/en/stable/classes/class_nodepath.html)
+* [Signals](https://docs.godotengine.org/en/stable/getting_started/step_by_step/signals.html)
+* [GDQuest](https://www.gdquest.com/)
+* [GDScript.com](https://gdscript.com/)