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

0 Üye ve 2 Ziyaretçi konuyu incelemekte.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3005
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #15 : 03 Nisan 2025, 20:46:59 »
Eline sağlık, level data benim verdiğim text dosyası olarak gidiyor galiba. Eğer txt olarak kullanmaya devam edeceksen benim level data programına bir export özelliği koyayım, diğer levelları da text olarak çıkartalım.

Alıntı
Oyunun remake'inde ihtiyaçların başında senaryoların decode edilmesi geliyor.
ben o senaryoları haritadaki son 4-5 pixelde saklanan datalarla örtüştürmeye çalışıyordum ama başka işlerimin deadlinelar yaklaşınca onu rafa kaldırdım. ama tekrar dönebilirim.
Tabii bir başkası yaparsa daha iyi olur :D

Bu arada sistem belli, level data'da her satırın sonundaki 4-5 pixeldeki rakamı senaryodaki girdi indeksine göre alıyor, onu kontrol ettim, fakat senaryodaki array/tablo her ne ise ilk bakışta belirli bir pattern izlemiyor, datayı extract etmek için biraz kafa yormak gerekecek.

Belki leveldata-storyevent arasındaki bağlantıyı daha kolay çözerim diye exe'yi incelemek istedim. Exe'yi hunklarına ayırıp exe içine gömülen abk dosyalarını extract eden bir program yazdım, bankları amosa yükleyip test ettim, müziği ve intro grafiklerini exeye gömmüşler, bize faydası yok. Ayrıca duvar/yer grafikleri hala kayıp. Birkaç bank simsiyah olarak açılıyor, belki palet datası yoktur, orada da biraz araştırma geliştirme gerekiyor. Fakat iki bank data bank, tahminim burada copyprotection dataları tutuluyor, yine bize lazım olan birşey değil. Sonuncu hunk compiled oyun kodu. Bunu da 68k asm bilen biri tarafından trace edilmesi güzel olur. Bir ara ghidra'ya besleyip loop'ları falan analiz etmeyi düşünüyorum ama dediğim gibi benim girişmem yazı bulabilir.


Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 187
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #16 : 03 Nisan 2025, 23:48:26 »
Bu arada ben de bu paylaşımı gördüm ama biraz yoğun olduğum için henüz repoyu inceleyemedim. Henüz detaylı inceleyememiş olsam da şu ana kadarki çalışman için tebrik ederim, eline sağlık. Manual da çok güzel olmuş, el altında dijital formatta bulunması çok iyi.

Ben arada Gökhan San'a ulaşmaya çalıştım ama kontağını henüz bulamadım. Gökhan zamanında PC versiyonunda 3d gezinme efektini, yani 90 derece smooth dönüş efektini yazan kişidir. O yüzden bu içinde gezinilebilen haritayı görmek eminim çok hoşuna gider. Gökhan ile hala kontağı olan varsa, foruma ve bu başlığa davet ederse sevinirim.

Projeyle ilgili gelişmeleri takip ediyorum.

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 22
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #17 : 04 Nisan 2025, 02:47:58 »
@Ref senin gönderdiğin txt'i biraz temizleyip sadece sayı olan şu formata getirdim, öyle kullanıyorum:

0 0 0 0 10 10 0 0 2 3 9 3 2 13 13 13 13 13 13 13 13 1 1 1 1 0 5 0 0 0 0 0 0
0 0 0 0 2 1 0 0 3 2 2 1 2 4 0 0 0 0 0
0 0 0 0 2 1 0 0 0 0 0 0 2 4 0 0 0 0 0
0 0 0 0 2 1 2 1 3 2 0 0 2 4 0 1 1 1 1
0 0 0 0 2 1 0 0 0 0 2 1 2 4 0 0 0 0 0
0 0 0 0 2 1 4 1 0 0 0 0 2 4 0 0 0 0 0
0 0 0 0 2 1 0 0 0 0 4 2 2 3 0 0 0 0 0
0 0 0 0 2 1 2 1 0 0 0 0 2 3 0 0 0 0 0

...

evet, senaryo dosyalarında da biraz metadata var. Bir şekilde oyun state'inde belli field'ların olup olmadığını da kontrol ediyor—örneğin ilk ekranda köpekle savaşmadan önce "dışarıdan hırıltılar geliyor" yazıyor, sonrasında yazmıyor. Köpeği öldürdükten sonra "burada ölü bir köpek yatıyor" yazıyor. Burada biraz reverse engineering gerekiyor, evet :)

Ambk olan dosyalarin hepsini export ettim, savaş sesleri ve resimler var. Bir de yine bitmap seklinde bir seyler var ama ne oldugunu cozemedim. Siyah çıkan resimleri de başka bir formatta export edebildim, siyah beyaz/mask gibi resimler var. Örneğin battle/tab şu ekran:


battle/vec şu ekran:


Bunun dışında ikonlarda da karakter / yaratık ikonları var yine böyle siyah beyaz şekilde export edebildiğim. Bunların belki palet datası dediğin gibi binary'nin içinde olabilir...

Binary'ye gelince, olduğu haliyle ghidra'ya yükledim ama bir şey çıkmıyor tabii. O yüzden ben de memory dump aldım oyun esnasında. Onu yükleyince bir sürü şey çıkıyor :) Karakterlerin / ırkların isimleri, aktif senaryo filan hep içerisinde mevcut.

Onu da şöyle ekleyeyim: 

Eğer sen kodun hunk'ını paylaşabilirsen onu analiz etmeye çalışırım.

@Skate Gökhan San'ın izini ararken bak neye denk geldim :))) https://eksisozluk.com/entry/9409508 neredeyse 20 sene önce yazmışım...

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3005
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #18 : 04 Nisan 2025, 05:11:47 »
Lale hunk'larını ekliyorum, bir tane 250k'lık hunk var, compile edilmiş ana program o. son hunklar ses müzik falan. 10kb civarında olanlar genelde grafik oluyor. Ama küçükler de var. neyse bir göz atın bakalım ne çıkacak.

Lale map dosyalarını *umarım* senin formatta olacak şekilde çıktı aldım. 18 adet, onlar da ekte. Dediğim gibi senaryo eşleşmesine başlamıştım ama onun daha yolu var.

Hunk viewer'i de ekliyorum ama listeleme işlemleri biraz bug'lı. ama extract ettiği parçalar sorunsuz. düzgün extract alınca üzerinde çalışmayı bıraktım. Belki birine ya da gelecekteki bana lazım olur. Kodları da paylaşabilirim lazım olursa, üşendiğim için uğraşmadım.
 



siyahbeyaz resimler aslında siyah beyaz değiller, onlar palet indeksleri. Oralara doğru renkleri koyunca görünür hale geliyorlardır. tabii indeks numarasına göre renklendirince siyahbeyaz görünüyor. O paletleri dosyalar içinde orda burda gördüm. Amosta bir paleti alıp başka yere kopyalıyorsunuz, yani paletler ve imajlar ayrı kaydedilebiliyor, yani neden öyle yapmışlar bilemiyorum, kazanacakları yer miktarı 32 byte işte. edit: şöyle bir ihtimal geldi aklıma, bunlar o pencereleri siyahtan fade in yapıyorlarsa ve picture hide/show olayını bilmiyorlarsa tüm paleti sıfırlayıp kaydetmişlerdir ki başta siyah olarak yüklensin, sonra onlar açsınlar palet renklerini diye. Aslında gerek yok buna ama bir sebepten öyle aternatif bir çözüm bulmuş olabilirler.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3005
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #19 : 04 Nisan 2025, 16:49:02 »
@Skate Gökhan San'ın izini ararken bak neye denk geldim :))) https://eksisozluk.com/entry/9409508 neredeyse 20 sene önce yazmışım...

"orjinal kutusuna, parşömen haritalarına sahip olduğum için de kendimi şanslı addediyorum." demişsin ve yakalanmışsın:

@dashersw belki biliyorsundur, ben dijital miras çalışmaları yapıyorum uzun yıllardır (20-25 sene oldu, bir yere vardığımı söyleyemem TYVT). Malesef türk oyunları konusunda 100% sınıfta kalmış durumdayız, durumun vehametini göstermek adına listeleyeyim:

keloğlan: sadece oyunun c64 prg dosyası var, kasedi, kitabı, kabı vs yok. orjinal spectrum versionu toptan kayıp.
umut tarlaları: berbat bir kılavuz ocr'ı ve cracked adf imajları dışında hiçbir şey yok. kutusu, disket resimleri, orjinal kılavuz fotoları vb. hiçbirşey yok
lale savaşçıları: berbat ötesi bir scan, cracked adf imajları ve cd imajı dışında hiçbirşey yok.
para ve güç: çalışır durumda bir imaj yok, kutu ve disket fotografı var.
hançer: 3 disketin sadece 2'sinin adf imajı var. kılavuzun 90'larda taranmış rezil bir scan'i var. kutu imajları, disket fotoları vb. kayıp.
okey: sadece disk imajı var.
5-10 oyun daha var, hepsi böyle.

Bu mesajı okuyan tüm koleksiyoncu arkadaşlara tekrar hatırlatıyorum. Elinde bu disketler ve kutuları olanların bunları adam gibi dökümante etmek, en azından dijital ortamda korumak ve yaşatmak için birer kopyasını oluşturmak gibi vatandaşlık görevleri var. En azından Lale Savaşçıları gibi birkaç kanaldan pazarlanmış bir oyunun kaybolup tamamen yitirilmesini engellemek gerekiyor.

Yıllardır türk retro forumlarında geziyorum, bu oyunlara sahip olduğunu söyleyen kişilere denk geldim, ama türlü sebepten bu işleri yapmaktan geri durdular hep. Fakat kritik aşamaya geldik, disketler bozuldu, küflendi, çatladı, renkleri attı. şu anda herkes her ne yapıyorsa bırakıp bu oyunların arşivlenmesini sağlaması gerekiyor. Bunları paylaştığınızda elinizdeki materyaller değer kaybetmeyecek, aksine değerlenecek. Çünkü haberi olup arayan insan sayısı artacak.

Neyse sonuç olarak, vakit bulduğunda elindeki tüm materyalleri fotograflayıp internetlere yayarsan (benden başka umursayan yok galiba) kişisel olarak sevinirim. Gelecek nesiller de sevinir eminim.

Çevrimdışı ZeroSkillProdigy

  • Ön Kayıt
  • *****
  • İleti: 2
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #20 : 04 Nisan 2025, 20:31:11 »
Vallahi bu iki dosyayı da bu thread'i görmeden önce geçtiğimiz aylarda bir takım GenAI araçlarıyla oynarken yaptım. Yapıldıkları tool'larda, köşede duruyordu, eğer bir gün bir yerde paylaşılacaklarsa muhtemelen buradan daha iyi bir yer denk gelmez.

Çevrimdışı unay

  • Retro Meraklısı
  • ***
  • İleti: 241
  • CPC6128 / CPC464 / GTM640
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #21 : 04 Nisan 2025, 22:26:47 »
Vallahi bu iki dosyayı da bu thread'i görmeden önce geçtiğimiz aylarda bir takım GenAI araçlarıyla oynarken yaptım. Yapıldıkları tool'larda, köşede duruyordu, eğer bir gün bir yerde paylaşılacaklarsa muhtemelen buradan daha iyi bir yer denk gelmez.

Grafik fenaymış, elinize sağlık.
Amstrad CPC az anlar, çok sever.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3005
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #22 : 05 Nisan 2025, 04:07:20 »
Vallahi bu iki dosyayı da bu thread'i görmeden önce geçtiğimiz aylarda bir takım GenAI araçlarıyla oynarken yaptım. Yapıldıkları tool'larda, köşede duruyordu, eğer bir gün bir yerde paylaşılacaklarsa muhtemelen buradan daha iyi bir yer denk gelmez.

hahah şahane olmuş elinize sağlık :D  Gen AI işi başka bir boyut aldı artık orası kesin. Bu da benden olsun:


Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 22
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #23 : 05 Nisan 2025, 17:10:21 »
@Ref şu anda kutu oyunu yanımda değil (o İstanbul'da ben Berlin'deyim), ama bir aya kadar gideceğim. İçindekileri paylaşırım tabii ki, arşivcilik ftw :)

@ZeroSkillProdigy efffsane olmuş! Müziğe bayıldım, tam hayalimdeki şey! Oyun kapağı da efsane, eline sağlık. Ben şimdi kart oyununu geliştiriyorum... eğer vaktin varsa karakter görselleri için yardım edersen muhteşem olur :)

Ben de senden esinlenip yeni 4o image generator'la şunu yaptım:

 



Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3005
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #24 : 05 Nisan 2025, 20:54:02 »
şimdi oyunu bilmeyenler bu ejderhalar ne arıyor bu afişlerde diyecek :D

spoiler alert!
Oyunun sonunda Şeyh Cehalet'in aslında şekil değiştirmiş bir ejderha olduğu ortaya çıkıyor!

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 22
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #25 : 06 Nisan 2025, 14:29:46 »
Random artwork deniyorum:

 
 

Çevrimdışı ZeroSkillProdigy

  • Ön Kayıt
  • *****
  • İleti: 2
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #26 : 06 Nisan 2025, 18:59:35 »
@Ref :)) Öyle

@dashersw çok daha iyi olmuş, orijinale yakın içerik. Memnuniyetle destek olurum, yalnız kart oyunu dünyasından çok uzağım baştan söyleyeyim :)

Aslında oyunun senaryosunu çıkarma eforları bir sonuç üretirse Unity'de oyunun tekrar yapılması konusunda daha çok desteğim olur, hatta işi game development olan çok yakın bir arkadaşımın da konuya memnuniyetle müdahil olacağını düşünüyorum.

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 22
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #27 : 11 Nisan 2025, 13:04:14 »
Senaryo dosyalarıyla biraz daha zaman geçirdim... bir takım bulgular var, pek faydalı olmasa da.

Daha önce senaryodaki metinlerin caesar encoding ile kodlandığını söylemiştim. Text byte'larına binary değeri olarak 0x0a ekleyince gerçek değeri buluyoruz. Yani 5d 57 68 5f 66 aslında 67 61 72 69 70 olarak decode edilmeli, ki bu da ASCII tablosuna göre "garip" kelimesi oluyor.

Senaryo dosyalarında metinlerden önceki byte okunacak metnin uzunluğunu belirtiyor. Örneğin birinci bölümde Bu herif hala ayIlmamIS mI ? diye bir mesaj var, sonundaki line terminator'la beraber 29 karakter, dolayısıyla bu metinden önceki byte'ın değeri 0x1d. Bu arada satırları bitirmek/ayırmak için 0xac kullanılıyor. Yani her metinden sonra bir de 0xac var.

Bu arada ASCII'de türkçe karakterler olmadığı için ekip aşırı zeki bir şey yapmış, Türkçe karakterler büyük harfle tanımlanmış. Yani s normal ama S aslında ş. Büyük ihtimalle bu yüzden oyunda büyük harf yok hiç... çok merak ediyordum nedenini çocukken :)

0x05 ile başlayan sekanslar soru sekansları, sonraki iki byte seçeneklerin kelime uzunluklarını veriyor. Örneğin evet/hayır soruları için sekans 05 04 05—evet 4 harf, hayır 5 harf. Her sorudan sonra 01 02 01 01 geliyor... bu bir çeşit branching olmalı, birinci seçenek seçilirse şu, ikincisi seçilirse şu gibi. Yani evet seçilirse 1. değişkeni 2 yap, hayır seçilirse 1. değişkeni 1 yap gibi... ama kesin çözümünü bilmiyorum.

0x08 ile başlayan sekanslar savaş durumları. İlk bölümde köpekle savaşıyoruz. Senaryolar bütün kodu ve state'i içinde barındırıyor olmalı, dolayısıyla kiminle ve kaç kişiyle savaşılacağı da senaryonun içine gömülü olmalı. Köpek savaşı sekansı 08 00 0d 01 00 00 00 00 gibi bir şey. Her byte'ın anlamını bilmiyorum, fakat 0d, yani 13, savaşılacak canavarın ID'si olmalı. Memory dump'ından baktığımda canavarlar şu sırada: irospa ipna lavuk maganda hIrgIz bahCIvan lale savaSCIsI dadaS meycik yuzIr faytIr kIlerik ayI kOpek ... ve evet, köpek 13. canavar. Sonrasında gelen 01 de olan köpek adedi. Dosyanın bu kısmını değiştirip 01 yerine 03 yazdım, 3 köpek çıktı :)))

Bunun dışında, senaryo dosyaları içinde header'da filan bir değişken haritası tanımlandığını, senaryodaki her bir mesajın bu değişkenleri bir şekilde kullandığını ya da değiştirdiğini düşünüyorum.

Haritada biz 13. odada başlıyoruz, 3. odaya çıkmaya çalışırken senaryonun ilk mesajı dISarIdan garip hIrIltIlar geliyor... çıkıyor. Bu da şu demek, mesajlar odalara girerken tetikleniyor ve duruma bağlıysa odaya girişini engelleyebiliyor.

Haritalardan decode ettiğimiz metadataları senaryoyla örtüştürmeye çalıştım fakat çok başarılı olamadım. Sadece 3 nolu oda için senaryodaki ilk mesajın oncesinde 01 01 01 01 byte'ları var. Burada beklediğim şu olurdu, haritadaki metadatanın birebir eşleniğinin senaryo dosyalarında olması, oyun motorunun da buna göre araması. Fakat görünen o ki bu biraz daha kompleks bir yapı. Örneğin 23. odada sürekli burasI amma pis kokuyo bee! mesajı çıkıyor, conditional değil, ama önceki byte'larında bunu 23. odayla eşleyen bir byte yok.

Bununla birlikte emin olduğum başka bir yapı her senaryo item'ı öncesinde ve sonrasında senaryo değişkenlerini değiştiren bir takım kontrol byte'ları olduğu. Örneğin baygın adamın üzerini aramak için evet'i seçersek inventory ekranı açılıyor ve bir takım paralar vs bulunuyor (buradaki byte'ları açılan inventory ile karşılaştırmadım ama hangi item'dan kaç adet bulacağımız burada yazıyor olmalı). Fakat sonrasında hemen bir anahtar bulma mesajı çıkıyor. Bundan sonra biraz daha karışık bir seri byte var—eminim burada oyun değişkenlerine anahtarın bulunduğu yazılıyor, çünkü 55. odada anahtarın olma ve olmama durumuna göre "bu kapı kilitli" mesajı gösteriliyor ya da gösterilmiyor.

Şimdilik önbulgularım bu şekilde :)

Senaryo dosyalarını daha rahat gözlemleyebilmek için ekteki gibi bir uygulama yazdım. Kodunu da ekliyorum. Oyunun herhangi bir senaryo dosyasını açıp örüntü arayabilirsiniz :)

 

 

Çevrimdışı dashersw

  • Retromanik
  • *****
  • İleti: 22
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #28 : 11 Nisan 2025, 14:28:22 »
Biraz progress daha yaptım! Diğer senaryo dosyalarıyla tam örtüştüremedim henüz ama 1. senaryoda metin sonrası kontrol byte'ı olmayan 5 tane 0x0d00 var. Bunlar haritadaki odaların mesajlarıyla örtüşüyor! Yani örneğin koku olan 23. odanın metadatası 1 1 1 4, 4. 0x0d00'dan sonra "burası amma pis kokuyo bee !" mesajı var. Baygın adamın olduğu 49. odanın metadatası 1 1 1 2. Yani 2. 0x0d00'dan sonra bu senaryo başlıyor. Çok ilginç bir durum var, aslında buraya ilk girdiğimizde üstünü arayalım mı mesajı çıkıyor. Ama senaryo dosyasında önce "bu herif hala ayılmamış mı" mesajı yazılmış. Ama sonuçta bu da örtüşüyor.

Yani oyunun en azından ilk bölüm için senaryo item'larını 0x0d00 ile ayırdığını ve sayarak nereye tekabül ettiğini bulduğunu söyleyebiliriz.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3005
  • Advanced User Simulator
    • ae unutmadan
Ynt: Lale Savaşçıları'nı yeniden yazalım
« Yanıtla #29 : 11 Nisan 2025, 20:13:29 »
Biraz progress daha yaptım! Diğer senaryo dosyalarıyla tam örtüştüremedim henüz ama 1. senaryoda metin sonrası kontrol byte'ı olmayan 5 tane 0x0d00 var. Bunlar haritadaki odaların mesajlarıyla örtüşüyor! Yani örneğin koku olan 23. odanın metadatası 1 1 1 4, 4. 0x0d00'dan sonra "burası amma pis kokuyo bee !" mesajı var. Baygın adamın olduğu 49. odanın metadatası 1 1 1 2. Yani 2. 0x0d00'dan sonra bu senaryo başlıyor. Çok ilginç bir durum var, aslında buraya ilk girdiğimizde üstünü arayalım mı mesajı çıkıyor. Ama senaryo dosyasında önce "bu herif hala ayılmamış mı" mesajı yazılmış. Ama sonuçta bu da örtüşüyor.

Yani oyunun en azından ilk bölüm için senaryo item'larını 0x0d00 ile ayırdığını ve sayarak nereye tekabül ettiğini bulduğunu söyleyebiliriz.

ben de farkettim bunları fakat şu 0x0d00 çok tutarlı değil, birkaç yerde vardı yanlış hatırlamıyorsam, benim tahminim o belirteci amos koyuyor.

yani normalde bunlar birer array'de tutuluyordur. DIM Events(32,5) gibi birşeydir, amos bu girdileri 00 ile ayırıyor olabilir. diğer taraftan 0x0D = Carrier Return (13=Enter) olduğundan böyle satır satır alt alta yazılan şeylerde de kullanılıyor o sebeple çok da emin olamadım, amosta bir array üretip compile edip üretilen sonuca bakmak lazım. Çünkü tutarlı da değildi. Neyse şimdilik buraları sana bırakıyorum, hazır ilerleme göstermişken hızını kesme :D Ben soruları (08) farketmemiştim mesela. İyi yakalamışsın orayı. Eline sağlık.