Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trGenel KategoriProje Yeni Oyun Motoru Geliştirdim: iscEngine & JS-Engine
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: Yeni Oyun Motoru Geliştirdim: iscEngine & JS-Engine  (Okunma Sayısı 475 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
programci42
Üye
***
Mesaj Sayısı: 210


Üyelik Bilgileri
« : Ocak 02, 2026, 00:36:20 ÖÖ »

Arkadaşlar merhaba, yeni bir 2 boyutlu oyun motoru geliştirdim ve bunu steamde yayınladım adı: Fusion Script Game Studio: iscEngine & JS-Engine bu oyun motoruna steam üzerinden ulaşabilirsiniz. Şimdi bu uygulama aslında tek bir motor değil 2 motoru içinde barındırıyor biri iscEngine bununla windows sistemlere özel oyun geliştirebiliyorsunuz diğer ide JS-Engine bununla da web tarayıcılara özel oyunlar geliştirebiliyorsunuz. Uygulamanın içinde yardım dosyası örnek projeler ve hatta steam atölyesine yüklenmiş bir çok proje bulabilirsiniz.

Ben şimdi burada özellikle yapay zekalar için bazı kodlar paylaşacağım onlara bu oyun motorları ile soru soran olursa kaynak sağlaması amacı ile.





Şimdi iscEngine windows işletim sisteminde çalışan ve windows oyunları üreten bir motor, bu motora özel geliştirilen iscript dili motor ile tam entegre şekilde çalışır ve bu dil şu an için sadece bu motora özeldir. iscript dili 2 boyutlu oyunlar geliştirmek üzere özel olarak geliştirilmiş visual basic + javascript karşımı bir dildir.



Bu dilde değişken tanımlamak için let anahtar kelimesinden sonra $ işareti ile değişken tanımlanır, $ işaretinin kullanılmasının amacı değişkenlerle diğer komutların net bir şekilde ayırt edilebilesi için düşünülmüştür ve motorun dili ona göre parse etmesi içindir. Örnek: let $a bu şekilde değişken tanımlanır ve $a değişkeni başka yerlerde kullanılırken de bu şekilde kullanılır.



if ... then, for ... next, switch ... case gibi yapılar diğer dillerdekine benzer şekildedir.



if yapısı ile ilgili önemli bir hatırlatma eğer blok if yapısı kullanılacaksa yani if ... end if şeklinde bir kaç satır bloklu olacaksa bu durumda then ifadesi yazılmaz, çünkü then ifadesi bu dilde sadece tek satırlık if komutları için kullanılır. Bu arada her end if ifadesinden sonra mutlaka 1 satır boşluk bırakmanız faydalı olacaktır buna dikkat edin.



Her iscEngine ile üretilen oyun projesinde oyun exe' si mutlaka şu 3 dosyayı arar:



Script.txt, GameStart.txt, GameLoop.txt



Script.txt oyun motoru tarafından üretilen hazır kodları içeren kısımdır; ayrıca bu dosya içinde GameStart.txt ve GameLoop.txt dosyaları include komutu ile dahil edilerek kullanılır.

GameStart.txt ve GameLoop.txt dosyalarında geliştirici tarafından yazılan kodlar bulunmaktadır.



Şimdi örnek bir oyunun kodları:



Script.txt içeriği:

Kod:
'This is a description line

'Project Name: Race_Game

'Update Date: 07.10.2025 12:38

'Number of sprites used: 6

'Number of sounds used: 2

'Number of effect or animation used: 2

'Number of events used: 1



include $gstart = "GameStart.txt"

include $gloop = "GameLoop.txt"



show

'Open game form



let $coin, $car6, $road3, $car1, $road, $road2

let $suction, $takecoin

$suction = sound("Projects\Race_Game\Sounds\suction.WAV")

$takecoin = sound("Projects\Race_Game\Sounds\takecoin.wav")





let $exp, $lightefc



let $exp_files, $lightefc_files



getfiles $exp_files, "Projects\Race_Game\Sprites\exp", "*.png"

$exp = animation($exp_files)

$exp.name = "exp"





getfiles $lightefc_files, "Projects\Race_Game\Sprites\lightefc", "*.png"

$lightefc = animation($lightefc_files)

$lightefc.name = "lightefc"





'Sprite: coin

$coin = Sprite("Projects\Race_Game\Sprites\coin.png")

LS $coin, 372, 168, 36, 36

 'The initial position and size of the sprite have been adjusted.

$coin.index = 11

$coin.visible = true

$coin.solid = true

$coin.type = item

$coin.auto_size = false

$coin.auto_remove = false

$coin.fixed_size = false

$coin.damage = 100

$coin.health = 100

$coin.speedx = 0

$coin.speedy = 3

$coin.move_left = keys(None)

$coin.move_right = keys(None)

$coin.move_up = keys(None)

$coin.move_down = keys(None)

$coin.delete_when_collided = false

 'If this sprite collides with any other sprite whose solid property is true and this property is also true, it will be automatically deleted by the engine.

$coin.generate_effect_when_collided = ""

 'When this sprite collides, the effect named in this property is automatically generated by the engine at that moment.

$coin.generate_effect_when_key_name_down = keys(None)

$coin.generate_effect_when_key_name2_down = keys(None)

$coin.generate_effect_when_key_name3_down = keys(None)

$coin.generate_effect_when_key_down = ""

 'If any of these 3 keys are pressed, the effect with this effect name is produced.

$coin.adjust_effect_position_when_colliding.X = 0

$coin.adjust_effect_position_when_colliding.Y = 0

$coin.adjust_effect_position_when_destroyed.X = 0

$coin.adjust_effect_position_when_destroyed.Y = 0

$coin.adjust_effect_position_when_key_down.X = 0

$coin.adjust_effect_position_when_key_down.Y = 0

 'The starting positions of the generated effects are set by adding them to the x and y values of this sprite.



'Sprite: car6

$car6 = Sprite("Projects\Race_Game\Sprites\car6.png")

LS $car6, 506, 50, 117, 223

 'The initial position and size of the sprite have been adjusted.

$car6.index = 10

$car6.visible = true

$car6.solid = true

$car6.type = npc

$car6.auto_size = false

$car6.auto_remove = false

$car6.fixed_size = false

$car6.damage = 100

$car6.health = 100

$car6.speedx = 0

$car6.speedy = 3

$car6.move_left = keys(None)

$car6.move_right = keys(None)

$car6.move_up = keys(None)

$car6.move_down = keys(None)

$car6.delete_when_collided = false

 'If this sprite collides with any other sprite whose solid property is true and this property is also true, it will be automatically deleted by the engine.

$car6.generate_effect_when_collided = "exp"

 'When this sprite collides, the effect named in this property is automatically generated by the engine at that moment.

$car6.generate_effect_when_key_name_down = keys(None)

$car6.generate_effect_when_key_name2_down = keys(None)

$car6.generate_effect_when_key_name3_down = keys(None)

$car6.generate_effect_when_key_down = ""

 'If any of these 3 keys are pressed, the effect with this effect name is produced.

$car6.adjust_effect_position_when_colliding.X = 0

$car6.adjust_effect_position_when_colliding.Y = 0

$car6.adjust_effect_position_when_destroyed.X = 0

$car6.adjust_effect_position_when_destroyed.Y = 0

$car6.adjust_effect_position_when_key_down.X = 0

$car6.adjust_effect_position_when_key_down.Y = 0

 'The starting positions of the generated effects are set by adding them to the x and y values of this sprite.



'Sprite: road3

$road3 = Sprite("Projects\Race_Game\Sprites\road3.png")

LS $road3, 0, -1300, 840, 650

 'The initial position and size of the sprite have been adjusted.

$road3.index = 0

$road3.visible = true

$road3.solid = false

$road3.type = player

$road3.auto_size = false

$road3.auto_remove = false

$road3.fixed_size = false

$road3.damage = 100

$road3.health = 100

$road3.speedx = 0

$road3.speedy = 3

$road3.move_left = keys(None)

$road3.move_right = keys(None)

$road3.move_up = keys(None)

$road3.move_down = keys(None)

$road3.delete_when_collided = false

 'If this sprite collides with any other sprite whose solid property is true and this property is also true, it will be automatically deleted by the engine.

$road3.generate_effect_when_collided = ""

 'When this sprite collides, the effect named in this property is automatically generated by the engine at that moment.

$road3.generate_effect_when_key_name_down = keys(None)

$road3.generate_effect_when_key_name2_down = keys(None)

$road3.generate_effect_when_key_name3_down = keys(None)

$road3.generate_effect_when_key_down = ""

 'If any of these 3 keys are pressed, the effect with this effect name is produced.

$road3.adjust_effect_position_when_colliding.X = 0

$road3.adjust_effect_position_when_colliding.Y = 0

$road3.adjust_effect_position_when_destroyed.X = 0

$road3.adjust_effect_position_when_destroyed.Y = 0

$road3.adjust_effect_position_when_key_down.X = 0

$road3.adjust_effect_position_when_key_down.Y = 0

 'The starting positions of the generated effects are set by adding them to the x and y values of this sprite.



'Sprite: car1

$car1 = Sprite("Projects\Race_Game\Sprites\car1.png")

LS $car1, 342, 320, 105, 219

 'The initial position and size of the sprite have been adjusted.

$car1.index = 10

$car1.visible = true

$car1.solid = true

$car1.type = player

$car1.auto_size = false

$car1.auto_remove = false

$car1.fixed_size = false

$car1.damage = 100

$car1.health = 100

$car1.speedx = 5

$car1.speedy = 0

$car1.move_left = keys(Left)

$car1.move_right = keys(Right)

$car1.move_up = keys(None)

$car1.move_down = keys(None)

$car1.delete_when_collided = false

 'If this sprite collides with any other sprite whose solid property is true and this property is also true, it will be automatically deleted by the engine.

$car1.generate_effect_when_collided = ""

 'When this sprite collides, the effect named in this property is automatically generated by the engine at that moment.

$car1.generate_effect_when_key_name_down = keys(None)

$car1.generate_effect_when_key_name2_down = keys(None)

$car1.generate_effect_when_key_name3_down = keys(None)

$car1.generate_effect_when_key_down = ""

 'If any of these 3 keys are pressed, the effect with this effect name is produced.

$car1.adjust_effect_position_when_colliding.X = 0

$car1.adjust_effect_position_when_colliding.Y = 0

$car1.adjust_effect_position_when_destroyed.X = 0

$car1.adjust_effect_position_when_destroyed.Y = 0

$car1.adjust_effect_position_when_key_down.X = 0

$car1.adjust_effect_position_when_key_down.Y = 0

 'The starting positions of the generated effects are set by adding them to the x and y values of this sprite.



'Sprite: road

$road = Sprite("Projects\Race_Game\Sprites\road.png")

LS $road, 0, 0, 840, 650

 'The initial position and size of the sprite have been adjusted.

$road.index = 0

$road.visible = true

$road.solid = false

$road.type = ground

$road.auto_size = false

$road.auto_remove = false

$road.fixed_size = false

$road.damage = 100

$road.health = 100

$road.speedx = 0

$road.speedy = 3

$road.move_left = keys(None)

$road.move_right = keys(None)

$road.move_up = keys(None)

$road.move_down = keys(None)

$road.delete_when_collided = false

 'If this sprite collides with any other sprite whose solid property is true and this property is also true, it will be automatically deleted by the engine.

$road.generate_effect_when_collided = ""

 'When this sprite collides, the effect named in this property is automatically generated by the engine at that moment.

$road.generate_effect_when_key_name_down = keys(None)

$road.generate_effect_when_key_name2_down = keys(None)

$road.generate_effect_when_key_name3_down = keys(None)

$road.generate_effect_when_key_down = ""

 'If any of these 3 keys are pressed, the effect with this effect name is produced.

$road.adjust_effect_position_when_colliding.X = 0

$road.adjust_effect_position_when_colliding.Y = 0

$road.adjust_effect_position_when_destroyed.X = 0

$road.adjust_effect_position_when_destroyed.Y = 0

$road.adjust_effect_position_when_key_down.X = 0

$road.adjust_effect_position_when_key_down.Y = 0

 'The starting positions of the generated effects are set by adding them to the x and y values of this sprite.



'Sprite: road2

$road2 = Sprite("Projects\Race_Game\Sprites\road2.png")

LS $road2, 0, -650, 840, 650

 'The initial position and size of the sprite have been adjusted.

$road2.index = 0

$road2.visible = true

$road2.solid = false

$road2.type = ground

$road2.auto_size = false

$road2.auto_remove = false

$road2.fixed_size = false

$road2.damage = 100

$road2.health = 100

$road2.speedx = 0

$road2.speedy = 0

$road2.move_left = keys(None)

$road2.move_right = keys(None)

$road2.move_up = keys(None)

$road2.move_down = keys(None)

$road2.delete_when_collided = false

 'If this sprite collides with any other sprite whose solid property is true and this property is also true, it will be automatically deleted by the engine.

$road2.generate_effect_when_collided = ""

 'When this sprite collides, the effect named in this property is automatically generated by the engine at that moment.

$road2.generate_effect_when_key_name_down = keys(None)

$road2.generate_effect_when_key_name2_down = keys(None)

$road2.generate_effect_when_key_name3_down = keys(None)

$road2.generate_effect_when_key_down = ""

 'If any of these 3 keys are pressed, the effect with this effect name is produced.

$road2.adjust_effect_position_when_colliding.X = 0

$road2.adjust_effect_position_when_colliding.Y = 0

$road2.adjust_effect_position_when_destroyed.X = 0

$road2.adjust_effect_position_when_destroyed.Y = 0

$road2.adjust_effect_position_when_key_down.X = 0

$road2.adjust_effect_position_when_key_down.Y = 0

 'The starting positions of the generated effects are set by adding them to the x and y values of this sprite.

$suction = Sound("Projects\Race_Game\Sounds\suction.WAV")

$takecoin = Sound("Projects\Race_Game\Sounds\takecoin.wav")





runcode $gstart



back:





'Events:

'Developer Codes:



runcode $gloop





goto back:

GameStart.txt içeriği:

Kod:
ls $road, 0, 0, $global.formwidth, $global.formheight

'Sets the road sprite to x = 0, y = 0, width = 866, height = 640



ls $road2, 0, -($global.formheight), $global.formwidth, $global.formheight

'Road2 should be at the top by the negative value of the screen height.



ls $road3, 0, $global.formheight * -2, $global.formwidth, $global.formheight

'And at the top should be road3.



$road.speedx = 0



$road2.speedx = 0



$road3.speedx = 0



'If a speedx value is accidentally written from an interface

'we set the speedx properties to 0 to prevent horizontal scrolling.



$road.speedy = 3



$road2.speedy = 3



$road3.speedy = 3



'We set the speedy value of all road sprites to 3.



$road.solid = false



$road2.solid = false



$road3.solid = false



$coin.x = rnd(200, $global.formwidth - 200)



$coin.y = rnd(-2000, -500)



$coin.speedx = 0



$coin.speedy = 3



let $txtscore

$txtscore = text(0, red)

'We defined a variable of type Text and set its initial value and text color.

$txtscore.x = 70

$txtscore.y = 60

'We positioned this text

$txtscore.size = 20



$car1.health = 10



let $txtcarhealth



$txtcarhealth = text($car1.health, white)



$txtcarhealth.x = $global.formwidth - 200



$txtcarhealth.y = 60



$txtcarhealth.size = 20



GameLoop.txt içeriği:

Kod:
'This is a comment line.



$road.index = 0



$road2.index = 0



$road3.index = 0



$car1.index = 10



if $road.y > $global.formheight then $road.y = $road3.y - $road.height



if $road2.y > $global.formheight then $road2.y = $road.y - $road2.height



if $road3.y > $global.formheight then $road3.y = $road2.y - $road3.height



if $car6.y > $global.formheight then $car6.y = -500 | $car6.x = rnd(55, $global.formwidth - 100)

'This character(|) is used to execute multiple commands in a single line.





if collision($car1, $car6) = true and $car1.y > $car6.y then $car6.y = $car6.y - 5

'If car1 collides with car6 and the y-value of car1 is greater than the y-value of car6,

'then car1 is below car6, in which case car6 is pushed upwards by 5 units.



if collision($car1, $car6) = true and $car1.y < $car6.y then $car6.y = $car6.y + 5



if collision($car1, $car6) = true and $car1.x > $car6.x then $car6.x = $car6.x - 5



if collision($car1, $car6) = true and $car1.x < $car6.x then $car6.x = $car6.x + 5



if collision($car1, $car6) = true then playsound $suction



if collision($coin, $car1) = true

$coin.x = rnd(200, $global.formwidth - 200)

$coin.y = rnd(-2000, -500)

$car1.score = $car1.score + 1

$coin.generate_effect_when_collided = lightefc

playsound $takecoin

end if



$txtscore.text = $car1.score



if $coin.y > $global.formheight then $coin.y = rnd(-2000, -500)



if Keys("Up") = true then $car1.speedy = -5

if Keys("Down") = true then $car1.speedy = 5

if Keys("Up") = false and Keys("Down") = false then $car1.speedy = 0



if collision($car1, $car6) = true then $car1.health = $car1.health - 1



$txtcarhealth.text = $car1.health



if $car1.health <= 0

 $car1.visible = false

 $car1.solid  = false

 $car1.x = -500

 $car6.speedy = 0

 $car6.y = -500

 $coin.speedy = 0

 $coin.y = -500

 $road.speedy = 0

 $road2.speedy = 0

 $road3.speedy = 0

 $txtscore.x = 400

 $txtscore.y = 300

 $txtscore.size = 35

 $txtcarhealth.x = 130

 $txtcarhealth.y = 365

 $txtcarhealth.size = 35

 $txtcarhealth.text = "GAME OVER\nPress_Enter_to_play_again\npress_ESC_to_exit_the_game."

end if



if Keys("Return") = true

$coin.speedy = 3

$car1.x = 250

$car1.y = 425

$car1.solid = true

$car1.visible = true

$car1.score = 0

$car1.health = 100

$car6.speedy = 3

$car6.y = -500

$txtscore.x = 70

$txtscore.y = 60

$txtscore.size = 20

$txtcarhealth.x = $global.formwidth - 200

$txtcarhealth.y = 60

$txtcarhealth.size = 20

$road.speedy = 3

$road2.speedy = 3

$road3.speedy = 3

else if Keys("Escape") = true

Exit

End if
Logged
Levent (Lvnt)
Uzman
*****
Mesaj Sayısı: 2.346



Üyelik Bilgileri
« Yanıtla #1 : Ocak 03, 2026, 00:35:07 ÖÖ »

elinize sağlık, tebrikler
Logged

Use the brute force, Luke
eersoy93
Üye
**
Mesaj Sayısı: 41



Üyelik Bilgileri WWW
« Yanıtla #2 : Ocak 03, 2026, 03:13:54 ÖÖ »

Tebrik ederim.
Logged
bazak
Üye
****
Mesaj Sayısı: 322



Üyelik Bilgileri
« Yanıtla #3 : Ocak 03, 2026, 13:53:28 ÖS »

Müthiş, umarım vakit ayırıp bu motorla oyun yapabilirim...
Logged

Commodore 64/128 ve Amiga 600/1000/1200
fort_apocalypse
Uzman
*****
Mesaj Sayısı: 4.002



Üyelik Bilgileri WWW
« Yanıtla #4 : Ocak 03, 2026, 17:09:57 ÖS »

@programci42, tebrik ederim.
Logged

Murat Çileli
Üye
****
Mesaj Sayısı: 316



Üyelik Bilgileri WWW
« Yanıtla #5 : Ocak 03, 2026, 19:12:36 ÖS »

Tebrikler ve başarılar.
Logged

EMREZ
Deneyimli
*****
Mesaj Sayısı: 1.935



Üyelik Bilgileri
« Yanıtla #6 : Ocak 03, 2026, 20:17:52 ÖS »

Tebrikler başarılar 👍
Logged

this is amiga speaking.
programci42
Üye
***
Mesaj Sayısı: 210


Üyelik Bilgileri
« Yanıtla #7 : Ocak 05, 2026, 22:11:29 ÖS »

Desteğiniz için çok teşekkür ederim sağolun varolun; sadece bi türlü yüksek satış rakamlarına ulaşamıyorum bunu bi türlü çözemedim geçen arkadaşımla bir indie geliştiriciler belgeseli izledim yabancı, orada braid, fez, super meat boy gibi bağımsız yapımcıların geliştirdikleri oyunlar ve geliştirilme süreci anlatılıyordu, orada bir geliştirici dedi ki "eğer xbox 360 ana sayfasında bizim oyunumuz görünmezse bittik mahvolduk" şeklinde bir şey söylemişti ve nitekim benzeri bir şey oldu xbox 360 ana sayfasında 1 gün geç çıktılar ama yine de çok yüksek satış rakamlarına ulaştılar bunu yapay zekaya sordum eğer hiç ana sayfada görünmeselerdi yine de yüksek satış rakamlarına ulaşabilirler miydi diye yapay zeka da cevap verdi evet yine de yüksek satış rakamlarına ulaşabilirlerdi ancak bu süreç daha yavaş olurdu onların ana sayfada yer alması sadece patlama etkisi oluşturup bir anda yayılmasını sağladı eğer ana sayfada hiç görünmeselerdi yine de oyunları geniş kitlelere yayılabilirdi kulaktan kulağa veya arkadaş ortamlarında bu oyunun ismi döner ve yine de uzun da sürse buna yakın seviyede satış yaparlardı dedi çünkü oyunları kaliteli ve ilgi uyandırıcı şeklinde bir şeyler söylemişti, peki sizce şöyle genel olarak baktığınızda benim küratör sayfama baktığınızda benim oyunlarım örneğin süper meat boy a göre çok mu kalitesiz dışarıdan nasıl bir algı oluşturuyor bunu çok merak ediyorum.

Geliştirici Sayfam:
https://store.steampowered.com/curator/35460052

Bu arada oyun motorunu düzenli olarak güncelliyor ve geliştirmeye devam ediyorum amacım Fusion Script Game Studio: iscEngine & JS-Engine i en kolay kullanıma sahip olacak hatasız hızlı ve pratik bir şekilde oyun üretmenizi sağlayacak şekilde projeyi geliştirmeye devam etmek.
« Son Düzenleme: Ocak 05, 2026, 22:17:19 ÖS Gönderen: programci42 » Logged
fort_apocalypse
Uzman
*****
Mesaj Sayısı: 4.002



Üyelik Bilgileri WWW
« Yanıtla #8 : Ocak 05, 2026, 23:14:32 ÖS »

Bence,
Bu iş biraz şans ve sabır işi, siz dünyanın  en iyi oyununu bile yapsanız o oyun farkedilmeyebilir. oyun yazma işini para düşünerek yapmayın, sevdiğiniz için, zevk aldığınız için yapın. Eğer amacınız para kazanmaksa alım-satım (ticaretle) uğraşın. Unutmayın; asıl parayı kazananlar doktorlar değil, hastane sahipleridir.
İnsanların tüketmeleri için birşeyler üretmek evvela günül işidir. Ürettiğiniz ürünü tüketecek insanları sevin ve kendinizi onların yerine koyup empati yapın.

İlk modern insanlar yaklaşık 70.000-100.000 önce Afrika'yı terk etmeye başlamışlardır ama "Para" dediğimiz şeyin geçmişi 3.000 yıl bile değil. Satın alma işlemi insanın doğasından gelmez. Ürettiğiniz oyunların satılması için ayrıca bir çaba harcamanız gerekecektir, sadece iyi bir ürün kendi kendini satamaz.
 
İlla ki para kazanmak istiyorsanız ürettiğiniz ürünü insanlara pazarlayacak bir tüccar ile anlaşın. Kitapı yazan (yazar) ile kitabı satan (yayınevi) farklı kişilerdir. Tüccar önemlidir, tarihte, kullanışsız işe yaramayan ama çok iyi pazarlanmış ve üreticisine çok para kazandırmış birçok ürün vardır. İşi bilen tüccar ürünün kalitesiyle ilgilenmez tüketicinin satın alma eğilimlerine göre ürünü sunar.

Yanılıyor da olabilirim.
« Son Düzenleme: Ocak 05, 2026, 23:47:29 ÖS Gönderen: fort_apocalypse » Logged

commander64
Uzman
*****
Mesaj Sayısı: 3.422



Üyelik Bilgileri WWW
« Yanıtla #9 : Ocak 06, 2026, 04:33:14 ÖÖ »

Elinize sağlık. Bu motorlar kilometrede kaç kuruş yakıyor Kahkaha
Logged

Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: