Gönderen Konu: Lale Savaşçıları'nı yeniden yazalım  (Okunma sayısı 345 defa)

0 Üye ve 2 Ziyaretçi konuyu incelemekte.

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 11
Lale Savaşçıları'nı yeniden yazalım
« : 20 Mart 2025, 00:19:16 »
Bu kategori bu iş için en iyi yer mi bilmiyorum ama forum'daki "Merhaba" mesajımın devamı olarak burayı açmak istedim.

Lale Savaşçıları'na hastayım, defalarca bitirdim, ve yıllardır da bir remake'in hayalini kuruyorum. Bunun için merhaba mesajımda da belirttiğim gibi bir Amiga simülatörü yazmaya başladım... Keşke @Ref'in Lale Savaşçıları'nı crack'leme post'una daha erken denk gelseymişim... iki gündür imploder'ın sonucu olan binary'yle kafayı yiyorum :D exploder.library'yi yükleyeceğim, adres translation'ını yapacağım, ondan sonra da memory'ye nasıl extract ettiğine bakacağım diye göbeğim çatladı. Meğer imploder yokmuş zaten orijinal oyunda :)) Bu arada JavaScript ile yazılmış bir emülatör bulup onun memory'sini extract ettim, fakat pek işe yarar şeyler bulamadım içinde. Belki de bir şeyleri yanlış yapıyorum, daha detaylı bakacağım.

Bununla birlikte oyunun "senaryo"larını, yani oyunda karşılaşılan metinlerin olduğu dosyaları decode ettim (bunlar ayrı dosyalardı, ROT10 kullanılmış. Çok kolay oldu). Daha sonra Pac.Pic formatındaki grafiklerini açan bir script yazdım (bunun için baya bir araştırdım, sonunda tam dosya formatını ve bir örnek kodunu bulup çevirdim), ve sonunda oyunun bütün grafiklerini çıkardım. Bununla birlikte haritalar da geldi, bitmap olarak tutuluyorlar. Çıplak gözle bakıldığında birkaç pattern belli olsa da çok bir dungeon crawler'a benzemeyen haritalar olduğu için onlarca deneme yaptım bu pixel'leri nasıl gruplarsam oyundaki haritalara benzer bir şey elde ederim diye, pek başarılı olamadım. Beraber bakmak faydalı olabilir.

Yine de bir fun fact paylaşayım, oyunun el kitapçığındaki toplanıp kullanılabilecek nesnelerin (silahlar vs) açıklamalarının sırası, oyunun nesne grafiklerinin tutulduğu tile map'in sırasıyla aynı :)))

Oyunun ilk bölümünün senaryosu:

Alıntı
QdISarIdan garip hIrIltIlar geliyor
gerCekten dISarI CIkacak MIYIZ
burada OlU bir kOpek YatIyor
hIrIltIlar Bundan geliyormuS
dellenmiS ki bu hayvan yahu
herif hala ayIlmamIS mI
burada baygIn bir adam yatIyor
UstUnU arayalIm mI
BEyler burada bir anahtar buldum
otoparktan CIkmak istediGine emin misin
anahtar gOren oldu mu
burasI amma pis kokuyo bee
CIkmak istediGinden emin misin
eminimdeGilim iyi Oyle olsun

Dikkat ettiyseniz Türkçe karakterleri özel font'ta gösterebilmek için büyük harflerle yazmışlar.

Oyunun karakter detay ekranı:
 


Oyundaki item'ların ikonları (el kitapçığıyla aynı sırada):


Oyunun ilk bölümünün haritası (16x büyütülmüş):


Şimdilik gelişmeler böyle :)

Hayatımda explode.library karabasanı olmadan sakin sakin hunk'ları extract edip içine bakacağım. İlk hedefim daha önce de dediğim gibi vecizeleri bulmak, sonra oyunun haritaları nasıl yorumladığına bakıp, trigger'larını bulup senaryoyu nasıl işlettiğini görmek.

Bu arada bir 3D retro dungeon crawler oyunu yazdım bunun için. Doğru harita yorumlama yöntemini bulsak aslında direkt Lale Savaşçıları haritasını koyup içinde dolaşabiliriz :))

Sevgiler,
Armağan

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 11
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #1 : 20 Mart 2025, 02:48:00 »
Bir yaşıma daha girdim... meğer ben sadece chip memory'yi dump ediyormuşum. Oysa her şey slow memory'deymiş. Kabak gibi açık her şey...

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 185
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #2 : 20 Mart 2025, 04:01:02 »
İlerleme kaydetmene çok sevindim. Benim ne yazık ki önümüzdeki bir kaç gün aşırı yoğunluğum olduğu için çok faydalı olamıyorum. Ama en azından @Ref'in cracklediği versiyonu indirip adf'lerin içindeki dosyaları export edip genel bir göz attım. Daha fazlasına vaktim olmadı. Senin slow memory'de istediklerini bulduğuna sevindim. Anladığım kadarıyla artık vecizeler falan da dert olmaktan çıktı. O zaman haritada dolaştığımız ilk preview'ı sabırsızlıkla bekliyoruz. :)

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2954
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #3 : 20 Mart 2025, 13:44:13 »
off çok büyük küfür yemişim belli :D

Ben o postu okuyarak buraya geldiğini tahmin ettiğim için detay vememiştim lütfen kusuruma bakma :D Kendi crack protectionumu yazmış gibi olmuşum bu durumda..

Lale'nin detaylarını hiç hatırlamıyorum fakat amos ve amiga ile ilgili bildiklerimi aktarayım yardımcı olur:

Amos bir basic dialekti. İçerisinde compiler var, bu compiler kodları derleyip executable'lar yaratıyor.

Bu program AMOS 2.0'a aktarılmış, bunun kaynak kodu github'da mevcut.

Amosda AMOS BANK denilen ABK uzantıları ile kaydedilen bir data formatı var. Bunları external olarak dosya şeklinde diske de koyabiliyorsun, executable içine de gömebiliyorsun.
ABK dosyaları sıkıştırma destekliyor, ama ben sıkıştırmaya rastlamadım paket içinde, ama olmayacak demek değil, yine de bir 4CC ile belirteci vardı, şu anda ezberimde yok.

ABK dosyaları her tür datayı tutabiliyor:  müzik, sample, sprite, bob, animasyon, türlü datalar tutabilir ama yazarların tecübesiz olduğunu göz önünde tutarak dataları banklarda değil doğrudan 1 ya da 2D array'lerde tutacaklarını tahmin ediyorum. Data dışındakiler banklara konmak zorundalar. Ya da doğrudan diskten iff ya da mod olarak yüklenmeliler.

Bu bank'lar amos2.0 uyumlu. Bu sebepten amos kurup abk dosyalarını direkt olarak amos'a yükleyip içeriklerini listeleyebilirsin, grafikleri extract etmekle vakit harcamana gerek yok. Ayrıca bu banklar sıkıştırılmışsa amos2.0 ile rahatça extract edebilirsin. (pac.pic falan yani bunlar amos bank formatıdır)

CPU chip memory'e erişirken araya agnus ve paula giriyor ve delay ediliyor, dolayısı ile program counterin takip ettiği kod genellikle dinamik olarak fast mem'e yerleştiriliyor.
PAULA ve AGNUS Fast memorye erişemiyor. Bu sebeple ekrana çizilecek grafikler ve çalınacak müzik chip mem'e yerleştirilmek zorunda. Fakat bu datalar burda tutulacak anlamına gelmiyor tabi, yine de tüm grafik/ses bufferleri burada duruyordur. En azından datayı bu alanlara taşıyan kod parçalarına odaklanabilirsin, fast mem'deki lokasyonlarına ulaşırsın.

Aklıma birşeyler geldikçe yazarım. Benim hack biraz dirty hack idi, ama şifreler dışında bir alana zarar vermedim. Buna karşın arada oyun göçebiliyor, bu orjinal disklerde de gerçekleştiği için sorunun internetteki dump'larda olduğunu düşünüyorum. Elinde lale savaşçıları olan birileri oyunu baştan dump ederse karşılaştırabiliriz. Yani test ederken göçerse bil ki senin suçun değil :D


Harita süper görünüyor.
Bence ilk bölümü oynayarak haritayı çizebiliriz. Unutmamak lazım, bölümler birkaç kattan oluşuyor. Yani kat kat düşünmek lazım.
Ayrıca bellek aşırı sınırlı olduğu için doğrudan bir harita yapmak yerine exitleri birbirine bağlayan bir data dizisi kullanmış da olabilirler. Çünkü oda hücrelerine eşya bırakıp da alabiliyoruz, orada farklı bir çözüme gitmek zorunda kalmış olabilirler.

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 11
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #4 : 20 Mart 2025, 16:01:59 »
:))) olsun guzel challenge oldu benim için. AMOS yükleyip dosyaları oradan extract etmek süper fikir ama bunu başka biri alırsa güzel olur :) benim orada pek deneyimim yok. Disketlerin içinde bir sürü bank var, görüyorum header olarak. Pac.pic'i de normal bir kullanıcı gibi nasıl açacağımı bilemedim :)

Bu arada bende normal oyun disketleri göçmeden çalışıyordu, şimdi nedense (hiç de ellemedim adf'leri) karakter yarattıktan sonra oyuna girmiyor. Ama senin adf'ler giriyor :)

Harita için ben de tam olarak bunu yaptım dün gece ve ilk bölümdeki 1. ve 4. katı çizdim. 5x5 her kat, bu da aslında extract ettiğim haritayla örtüşüyor. Öyle ki, ilk satır belli ki bir çeşit header, ikinci satırdan itibaren 5x2 piksel her bir tile'ı encode ediyor. Şimdi iş bu 5x2 pikselle encode edilmiş datanın neyi encode ettiğini bulmak...

Şimdiki teorim şu: her bir tile'ın (küp aslında bu) 6 adet yüzü var. 4 kenar, yer ve gökyüzü. Bu bir şekilde bitmap'te encode edilmiş olmalı.

Şu haritada:


Şöyle encode edilmiş:


Şimdilik bunu çözmeye çalışıyorum :) bu arada 8. tile'dan başlıyoruz.

Aslında burada destek olmak isteyenler bu kat haritalarını çıkarıp yardımcı olabilirler. Ben tile'ları şu şekilde kodladım:

wfdw, wfff, wwdf, wffw, weff, dwww, fwfw, dwww, ffww, fwdf, wwfw, fdfw, wwfd, wwfw, dwfw, fdww, fwdd, fwfw, fwdw, fwfw, wfww, dwwf, fdww, dfwd, fwwf

wall, free, door, exit—kuzey, doğu, güney, batı yönlerinde. Exit bir sonraki kata geçiyor.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2954
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #5 : 20 Mart 2025, 21:28:03 »
ilk gönderdiğin data 19x100 pixellik bir data. dediğin gibi 5x5 lik harita eğer 4 katlı ise 19x25 pixel per kat şeklinde olabilir.

levelları amiga üzerinde açıp text dosyasına çeviren bir amos programcığı yazdım 1 numaralı haritanın text dökümü burada. Renk değil palet indeksini veriyorum çünkü görünüşe göre 2 ve 5, 3 ve 6 numaralı renkler aynı, yani 00F ve 0F0 şeklinde yanıltabilir.

görünüşe göre 32 renklik bir imaj olarak kaydedilmiş, ve 19 pixel genişlikteki satırların bazılarının sonunda 5 pixellik bir işaret var, bunların son pixeli 0-31 arası değerler alıyor. Acaba bu pixeller o hücredeki item/monster data gibi birşey midir diye düşündüm. Bu şekilde bir haritada maksimum 31 item/düşman varyasyonu olacaktır.

neyse belki incelemek isteyen olursa diye palet indekslerini 19'ar pixellik satırlar halinde içeren dosya ekte. Excele falan atabilirsiniz. @wizofwor  bu işlerde uzmandır.
dasher'in koyduğu harita ile bu text dosyasını örtüştürebilirseniz bu iş çözülecek :D

ayrıca amos dosyasını da ekliyorum, lale disketindeki haritalar klasöründeki dosyaları açmak için kullanabilirsiniz.



Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 11
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #6 : 20 Mart 2025, 23:23:20 »
Ahhh süper buluş, çok mantıklı :) bu sayılarla çalışması daha kolay. 5 ve 6 sadece metadata'da çıktığı için aslında effectively aynı haritayı encode etmiş oluyor, ama belki memory'de de bu şekilde tutuluyordur, oradan bir şey çıkarmak mümkün olabilir.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2954
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #7 : 20 Mart 2025, 23:32:29 »
tamam biraz beyin cimnastiği ile map tipini çözdüm. tam da senin tarif ettiğin şekildeymiş.

 


diyelim bir satır bu şekilde.
Idx: 22   0   0   0   0   0   0   3   2   0   0   2   1   2   4   0   1   1   1   4

[ 0 0 0 0 ]|[ 2 1 ] [ 0 0 ] [ 3 2 ] [ 2 1 ] | [ 2 ] [ 4 ] [ 0 1 1 1 4 ]
ilk dört rakam 0,0,0,0 önemsiz atlıyoruz,
sonra ikili grupların sonraki duvar texture , baştaki özelliği, kapı ya da level bağlantısı vb.
sonra alt ve üst texturelar var.
son 5 değer büyük olasılıkla yine bazı özellikler veriyor. benim tahminin burada bazı eventler var.
örneğin, 22 numaralı index 4 ile bitiyor ve bu kutudan geçerken "burası da ne pis kokuyormuş be" yazısı çıkıyor.

son olarak harita sandığımız gibi 5x5 değil 10x10'lık bir harita çıktı. bu durumda headerdaki (bitmap 0.satır) 4 ve 5 numaralı pixeller harita boyutunu belirtiyor.

eğer kaynak kodu gerekirse diye onu da ekliyorum (drawDungeon işi yapıyor). düzelttiğim map datası fa var txt şeklinde.


daha önce bakmamıştım, ama diskin içini bir sürü imajla doldurmuşlar. Aralarından biri şu:
 


ikinci bölüm umutları ve başka bir dosyada krobb yine vardı, son çağ yine özgür özol'un hikayelerinden biri galiba...

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 11
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #8 : 21 Mart 2025, 01:40:48 »
LEGEND!!!

Hahaha inanılmaz! Haritaları elle çizdiklerimle kontrol ettim, 100% örtüşüyor!!!

Ama evet, nihayetinde her bir kat 5x5 tile'dan oluşuyor. Sadece... iki floor'u yan yana koydukları için effectively row atlamış oluyor. Yani benim çizdiğim haritadaki 6. oda aslında 6. satıra değil 11. satıra denk geliyor... REZİLLİK! 😂

Saygıyla eğiliyorum.

Şimdi bunları yaptığım dungeon crawler'a koyayım da göndereyim, en azından haritalarda gezelim :))

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2954
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #9 : 21 Mart 2025, 03:18:30 »
valla banklar ayrıştırılmış, yol gösterilmiş, sosyal medya çalışmıyor, kaydıracak instagram yok, youtube açılmıyor, boş da vaktime denk geldi.

ama ileride garip mapler çıktı, sanırım benim çözümlemem tam olarak doğru değil. İleriki levellerde kapılardan oluşan dış duvarlar var, belki de yanlış yorumluyoruz ya da levela göre değişiyor hangi rakamın ne iş yaptığı.

Kaynak kodları burada, hepsini gui threadda yazdım :) form1.cs içinde görebilirsiniz.

https://github.com/ref-xx/LaleMap

Ama oyun devasaymış arkadaşlar. Canları sıkıldıkça map çizmişler. 17 numaralı haritada sizi bir süpriz bekliyor.

Bilmem çalışırmı debug klasörünü gönderiyorum, lalemaptest.exe'yi çalıştırın, bir harita numarası girin sonra sırayla 1,2,3 butonlara basın.

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 11
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #10 : 21 Mart 2025, 18:33:56 »
Eveeet bu müthiş buluş sayesinde oyunun ilk bölümünün haritasını 3D bir ortama aktarabildim.



Buradan ilk bölümü dolaşabilirsiniz: https://lale-self.vercel.app

Mobil telefonlarla da uyumlu hale getirdim.

Tabii senaryoları filan bağlamadım, başka bir şey yok henüz. Ama bu kadarı bile epey keyifliydi :) Şimdi artık normal insan temposunda devam edebilirim...

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2954
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #11 : 22 Mart 2025, 01:53:25 »
hahah bu retro oyun tarihinde eski bir oyunu modern platforma taşıyalım hayallerinin ulaştığı en öte nokta olabilir :D

eline sağlık armağan, lale savaşçıları başka bir boyuta geçmiş :) umarım devamı da gelir.

Ben de ufaktan senaryo datalarını eşleştirmeye çalışıyorum. önceki mesajımda şüphelendiğim gibi bir satırın son pixelindeki data senaryodaki bir "event" scriptine denk düşüyor. Fakat arada çok fazla bana göre "garbage" data ver. onları emülatörde trace etmeden ne işe yaradığını anlamak çok zor. Ama ben buna girişmeyi düşünmüyorum.

Çevrimdışı Hifly

  • Retro Meraklısı
  • ***
  • İleti: 174
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #12 : 23 Mart 2025, 00:15:26 »
Ellerinize sağlık. Yazdıklarınızı pek anlayamıyorum ama bu süreci takip edebilmek son derece keyifli.

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 185
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #13 : 23 Mart 2025, 05:58:56 »
Haritada dolaşabilmek harika olmuş @dashersw, eline sağlık. Güzel bir milestone'a ulaşmışsın. Zaten yapmışsındır büyük ihtimalle ama bundan sonrası artık ToDo listi oluşturup, check ata ata ilerlemek. Her türlü takipçi ve destekçiniz.