Retrojen Forum
Dijital Sanat => Kodlama => Konuyu başlatan: dashersw - 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:
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ı:
[ You are not allowed to view attachments ]
Oyundaki item'ların ikonları (el kitapçığıyla aynı sırada):
[ You are not allowed to view attachments ]
Oyunun ilk bölümünün haritası (16x büyütülmüş):
[ You are not allowed to view attachments ]
Ş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
-
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...
-
İ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. :)
-
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.
-
:))) 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:
[ You are not allowed to view attachments ]
Şöyle encode edilmiş:
[ You are not allowed to view attachments ]
Ş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.
-
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.
-
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.
-
tamam biraz beyin cimnastiği ile map tipini çözdüm. tam da senin tarif ettiğin şekildeymiş.
[ You are not allowed to view attachments ]
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:
[ You are not allowed to view attachments ]
ikinci bölüm umutları ve başka bir dosyada krobb yine vardı, son çağ yine özgür özol'un hikayelerinden biri galiba...
-
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 :))
-
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.
-
Eveeet bu müthiş buluş sayesinde oyunun ilk bölümünün haritasını 3D bir ortama aktarabildim.
[ You are not allowed to view attachments ]
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...
-
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.
-
Ellerinize sağlık. Yazdıklarınızı pek anlayamıyorum ama bu süreci takip edebilmek son derece keyifli.
-
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.
-
Efendim sonunda oyunun kodunu insan okuyabilir hale getirdim ve Github'da yayınladım. https://github.com/dashersw/lale
Ayrıca PC versiyonunun el kitapçığını da AI ile okutup github'a koydum (https://github.com/dashersw/lale/blob/main/manual.md), oyun için gerçekten çok iyi bir kaynak. Bu kitapçığı LLM'lere vererek yeni oyunlar üretmek mümkün :) Ben Heartstone vari bir trading card game için ürün gerekleri dosyası (product requirements document) yazdırıyorum. Keyifli bir oyun olabilir diye düşünüyorum :)
Oyunun remake'inde ihtiyaçların başında senaryoların decode edilmesi geliyor. Amiga versiyonunda 18 harita ve 18 senaryo var, bunlar da haritalar gibi önce hangi tile'da hangi koşulda o metnin çıkacağını belirten byte'lardan sonra ROT10 ile metnin kendisini içeriyor. Bunun da logic'ini çözersek aslında ilk bölümü komple inşa edebiliriz :)
Bunun dışında oyundaki yaratıkları (Amiga versiyonunda 36 tane var) hem özellik hem artwork olarak çıkartabiliriz. Ne yazık ki el kitapçığında savaşabileceğimiz yaratıklar detaylandırılmamış.
Kod ile, reverse engineering ile, ya da kart oyunu mekanikleriyle ya da artwork'üyle ilgili denemeler yapmak isteyenleri beklerim :)
-
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.
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.
-
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.
-
@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: [ You are not allowed to view attachments ]
battle/vec şu ekran: [ You are not allowed to view attachments ]
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: [ You are not allowed to view attachments ]
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...
-
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.
[ You are not allowed to view attachments ]
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.
-
@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 (https://arda.kisafilm.org/blog/?page_id=317&lang=en)). 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.
-
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.
-
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.
-
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:
-
@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:
[ You are not allowed to view attachments ]
-
ş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!
-
Random artwork deniyorum:
[ You are not allowed to view attachments ] [ You are not allowed to view attachments ]
-
@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.
-
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 :)
[ You are not allowed to view attachments ]
[ You are not allowed to view attachments ]
-
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.
-
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.
-
Ufak bir update: senaryo dosyalarında event'ler de length byte'la birlikte sadece sıralı olarak tutuluyorlar.
Senaryo dosyalari AmBk formatında demiştik, 20 byte header'ı var. Sonrasında 12 byte metadata var, asıl data 33. byte'tan başlıyor. Metadatanın ilk word'ü (2 byte'ı) senaryodaki event sayısını gösteriyor (haritadaki metadata olan odalarla örtüşüyor). Sonraki word'ü ilk event'in uzunluğunu gösteriyor (ama garip bir şekilde uzunluklar ikişer kere kaydedilmiş.). Neyse, arada birkaç ne idüğü belirsiz byte var, sonra ilk event'in uzunluğu 32. byte'ta. Dediğim gibi, 33. byte'tan itibaren bu uzunluk kadarını okuyunca ilk event'in bütün trigger ve metinlerine ulaşıyoruz. Sonra bir word atlıyoruz (bu duplike—ama 2 fazla—length byte'ı). Bir sonraki word yine uzunluk, sonra sıradaki event var.
Böyle böyle bütün event'leri düzgün parse edip görebiliyorum. Conditional event'lerin state machine'ini hala çözemedim, fakat 0x05'in soru, 0x08'in savaş olduğunu söylemiştim. Inventory'yi unutmuşum, 0x0409 da inventory'yi açıyor.
Örneğin üzerini aradığımız adamın üzerinden kısa zopa çıkıyor. Byte sekansı şöyle: 04 09 05 00 01 00 03 00 00 00 00. Biz bu ekranda 5 dolar, 1 kıvrık, bir de kısa zopa buluyoruz. Demek ki 3. byte dolar sayısı, 5. byte (belki word'dür) kıvrık sayısı, 03 de item olsa gerek. Memory'de kısa zopa 3. item'a denk geliyor, dolayısıyla hesap tutuyor gibi.
Bu arada 0xac de aslında caesar cipher'la encode edilmiş, aslında 0xb6, yani paragraf karakteri :))
Bunun için bir visualizer yazdım, elini yüzünü toplayıp atacağım. Fakat branching logic'i çözememek beni deli ediyor :)
-
belki şöyle random bir bilgi belki faydalı olur. Yanlış hatırlamıyorsam Amiganın veri yolu 16bit, adres yolu24bit. 68k registerlerı 32 bit ama veri yolu 16 olduğundan tek fetch'de 16'sı doluyor. Diğer taraftan adres yolu ise 24 bit, Bir adres depolanması gerektiğinde zaten 2 fetch gerekeceği için %95 ihtimalle adresi ya da offseti 32bit olarak saklıyorlar, fazladan görünen 00'lar ya da random byte'lar oradan gelebiliyor.
68K big endian olduğu için genelde sıfırlar başta oluyor, yani hex 00 00 00 0A görürsen büyük olasılıkla indeks 0A 'nın olduğu adreste değil de, ondan üç ya da 1 önceki adrestedir. en baştaki xx 00 00 0A xx olanda da çok nadiren random data bulunabilir çünkü eğer bu değer bir adres ise ilk byte çöpe gidiyor. registerin önceki değerinden kalma bir artifact olabilir.
-
Biraz daha dig ettim. 04 bir şey gösterme demiştik, 0403 resimli bir şey gösterme. bundan sonra gelen 0d resim ID’si. İlk senaryoda 0403 iki kere geçiyor, birinde köpek, birinde baygın adam resmi var.
Daha sonra dedim ki bunları manipüle etmenin daha kolay bir yolu olmalı, böyle dosyayı değiştir diskete yaz yeniden başla falan çok uzun iş…
Neden daha önce denemedim bilmiyorum ama, Mac'te vAmiga kullanıyordum FS-UAE ile birlikte... vAmiga çok kullanışlı geldi... ama memory visualizer'ı biraz sıkıntılıydı. Konsolu da vardı ama pek önem vermemiştim. Bugün biraz daha baktım, konsolda direkt memory'ye erişip değiştirebiliyoruz... Önce daha önce bahsettiğim "inventory ekranı açma" sekansıyla oynadım, o dolarla kıvrık arasındaki byte mark'mış :))) 5 dolar, 10 mark, 30 kıvrık falan verilebiliyor. 03 de item gerçekten, başka bir item'la değiştirilebiliyor. Yanındaki word’e yeni bir item da eklenebiliyor. vAmiga makinenin anlık snapshot'ını alıp yüklemeyi de sağladığı için memory'deki byte'ları değiştirerek ne olduklarını görmek çok daha kolay hale geldi. Bu şekilde bu resim gösterme opcode’unu test ettim, gerçekten de tahminim doğruymuş, başka başka değerler vererek başka resimler göstertebiliyoruz :)
Fantastik gelişmeler gerçekten. State machine’i çözmeye çok az kaldı, bu haftasonu bunu bitirmek istiyorum. Tabii bu daha ilk bölüm. Event’leri uzunluklarına göre bölme işi her bölümde çalışıyor ama ilk bölümün haritasındaki 1111 1112 şeklinde giden metadatalar ileriki bölümlerde daha farklı. Orada belki başka opcode’lar da olacaktır.
orijinal baygın adam:
[ You are not allowed to view attachments ]
silikonbaba:
[ You are not allowed to view attachments ]
--------
Bu arada resimleri küçük göstermenin bir yolu yok mu ya? Bulamadım forumda :(
-
Mükemmel!
bittiğinde bize de tam bir dökümantasyon sağlayabilirsen sevinirim.
Resim konusunda, forum yazılımımız biraz eski, işletim sistemimiz de epey eski ondan güncelleyemiyoruz. işte muhabbet biraz yavaş gitse yeni sunucuya taşınacağım, ama henüz mümkün olmadı. Yani sonuç olarak telefon ekranlarında bit kadar görünmesin diye bir responsive tema kullanıyoruz. O tema resimleri böyle büyütüyor bazen, bilen birinin uğraşması lazım ama sıkıcı işler olduğundan ben bakmadım :D
Yeni versionda bu sorunların olmadığını umarak katlanıyrouz. Yani aslında imaj büyüklüğünü ayarlamak mümkün ama çok çetrefilli, önce normal şekilde imajları yükleyip gönderiyi yazıp gönderiyorsun, sonra edit diyorsun, üretilen imaj url'lerini copy ediyorsun bir yere sonra attachment olarak değil de IMG olarak geri ekliyorsun falan IMG tag'inde width propertisi var istediğin büyüklüğe getiriyorsun ama uğraşmaya değer mi bence değmez :D
Bir alternatif de göndermeden önce resimleri küçültmek.
-
Sizlere bir sürpriz yapayım dedim ama beceremedim. :) İstanbul Efsaneleri'nin 1995 yılında çıkan mavi kutu kapağı/posterini yapan kişi arkadaşımdır. Kendisinden duruyorsa orijinal çalışmasını isteyecektim ki daha İstanbul Efsa... demeye kalmadan epey bir tepki aldım. :) Detaylara girmeyeceğim ama anlaşılan geliştiren ekiple iyi ayrılmamışlar. Paylaşmak istemedi. Preservation konusundan Unesco'ya varıncaya kadar bahsettim, "gidin yeni oyun yapın, uğraşmayın böyle şeylerle" gibi laflar etti, ben de daha çok üzerine gitmedim. :D
-
Sizlere bir sürpriz yapayım dedim ama beceremedim. :) İstanbul Efsaneleri'nin 1995 yılında çıkan mavi kutu kapağı/posterini yapan kişi arkadaşımdır. Kendisinden duruyorsa orijinal çalışmasını isteyecektim ki daha İstanbul Efsa... demeye kalmadan epey bir tepki aldım. :) Detaylara girmeyeceğim ama anlaşılan geliştiren ekiple iyi ayrılmamışlar. Paylaşmak istemedi. Preservation konusundan Unesco'ya varıncaya kadar bahsettim, "gidin yeni oyun yapın, uğraşmayın böyle şeylerle" gibi laflar etti, ben de daha çok üzerine gitmedim. :D
aah bu büyük şanssızlık, normalde gençler birlikte iş yapınca para konusu ikinci planda kalır diye düşünür insan. biraz gençlik aç gözlülüğü biraz da baştan anlaşmayı ciddi şekilde yapmayınca yani sonuçta bir "business" bu, fakat kabul etmek lazım, oyun yapıyorken pek ilerisini düşünmüyor insan. belli ki arkadaşın hakkı yenmiş, ama sözleşme (muhemelen sadece bir el sıkışmadan ibarettir) ileride yürünecek yolu kapsamadığından yapacak birşey de yok, kırık kalp ya da söylenmiş kötü sözlerle bitmiştir.
Olur öyle şeyler diyoruz (shit happens baabında) ne diyelim.
-
Bakın ne buldum :))
https://gitlab.com/amigasourcecodepreservation/ultimate-amos/-/raw/master/pdf/ultimate-amos-1994-holborn.pdf
[ You are not allowed to view attachments ] [ You are not allowed to view attachments ] [ You are not allowed to view attachments ]
Bizimkiler bu kitaptan etkilenmişler midir acaba? :)) sadece iki sayfa ayırmış kitap ama...
-
Evet... haftasonumun çoğunu buna verdim ama sonunda sanıyorum bütün opcode'ları çıkardım, state machine'in nasıl çalıştığını çözdüm...
Detaylı analizi daha sonra paylaşacağım yazdığım tool'larla beraber. Bir sürü şey (doğal olarak) sandığım gibi değilmiş.
Şimdilik sizinle ilk bölümün ilk event'i olan köpek dövüşünün senaryosunu paylaşıyorum:
[
{
instruction: 'triggerBeforeEnter', // 0x01
condition: {
variable: 0x01,
equals: 0x01,
jumpOverIfTrue: 0x01
}
},
{ instruction: 'enter' }, // 0x04
{ instruction: 'displayText', text: 'disaridan garip hiriltilar geliyor... gercekten disari cikacak miyiz?' }, // 0x02
{
instruction: 'askQuestion', // 0x05
question: ['Evet', 'Hayır']
},
{
instruction: 'conditionalJump', // 0x01
condition: {
variable: 0x02,
equals: 0x01,
jumpOverIfTrue: 0x01
}
},
{ instruction: 'break' }, // no condition 0x10
{ instruction: 'enter' }, // yes condition (with jump) 0x04
{ instruction: 'finalState' }, // 0x0e00
{
instruction: 'conditionalJump', // 0x01
condition: {
variable: 0x01,
equals: 0x01,
jumpOverIfTrue: 0x02
}
},
{ instruction: 'displayText', text: 'burada olu bir kopek yatiyor...' }, // false condition 0x02
{ instruction: 'enter' }, // 0x04
{ instruction: 'displayImage', image: 0x0d }, // 0x03
{ instruction: 'displayText', text: 'hiriltilar bundan geliyormus !!!' }, // 0x02
{ instruction: 'startFight', enemies: [{ id: 0x0d, count: 1 }] }, // 0x08
{ instruction: 'displayTextWithFace', face: null, text: 'ne dellenmis ki bu hayvan yahu?' }, // 0x11
{ instruction: 'setVariable', variable: 0x01, value: 4 } // 0x07
]
Bununla senaryoların büyük bir çoğunluğu çözülebiliyor. vAmiga ile memory'deki her byte'ı anlık olarak değiştirip ne yaptığını inceledim, jump komutlarıyla senaryoların rastgele yerlerine gitmek çok keyifliydi :) Daha sonra 2. 3. bölüm senaryolarıyla çakıştırdım.
Şimdilik bu işimizi görüyor gibi. Engine tarafında her şey deterministik. Sadece içime sinmeyen tek heuristic, o da aslında doğal, bir event'te tek bir 0x04 yani "tile'a girildi" opcode'unun işlenmesi. Bir de eğer tile'a girme trigger'ı yoksa, girildi opcode'unu bulana kadar devam ediyor.
Aşağıya 1. senaryonun raw hex halini paylaşıyorum, yukarıdaki tanımlarla takip edebilirsiniz diye umuyorum. Dosyada 32 byte header var.
41 6d 42 6b 00 64 00 01 80 00 02 eb 44 61 74 61
20 20 20 20 00 05 00 e8 00 13 00 6a 00 e4 00 e6
0d 00 01 01 01 01 04 02 47 5a 3f 49 57 68 3f 5a
57 64 16 5d 57 68 5f 66 16 5e 3f 68 3f 62 6a 3f
62 57 68 16 5d 5b 62 5f 6f 65 68 24 24 24 ac 5d
5b 68 39 5b 61 6a 5b 64 16 5a 3f 49 57 68 3f 16
39 3f 61 57 59 57 61 16 43 3f 4f 3f 50 16 35 ac
05 04 05 5b 6c 5b 6a 5e 57 6f 3f 68 01 02 01 01
10 04 0e 00 01 01 01 02 02 1e 58 6b 68 57 5a 57
16 45 62 4b 16 58 5f 68 16 61 45 66 5b 61 16 4f
57 6a 3f 6f 65 68 24 ac 04 03 0d 02 21 5e 3f 68
3f 62 6a 3f 62 57 68 16 38 6b 64 5a 57 64 16 5d
5b 62 5f 6f 65 68 63 6b 49 16 17 17 17 ac 08 00
0d 01 00 00 00 00 11 00 20 64 5b 16 5a 5b 62 62
5b 64 63 5f 49 16 61 5f 16 58 6b 16 5e 57 6f 6c
57 64 16 6f 57 5e 6b 35 ac 07 01 04 0f 00 04 00
00 b9 00 13 00 0b 00 b5 00 b7 0d 00 04 0e 00 01
01 02 03 03 20 11 00 1d 38 6b 16 5e 5b 68 5f 5c
16 5e 57 62 57 16 57 6f 3f 62 63 57 63 3f 49 16
63 3f 16 35 ac 04 03 20 02 36 58 6b 68 57 5a 57
16 58 57 6f 5d 3f 64 16 58 5f 68 16 57 5a 57 63
16 6f 57 6a 3f 6f 65 68 24 24 24 ac 4b 69 6a 4b
64 4b 16 57 68 57 6f 57 62 3f 63 16 63 3f 35 ac
05 04 05 5b 6c 5b 6a 5e 57 6f 3f 68 01 02 01 01
04 09 05 00 01 00 03 00 00 00 00 01 01 02 01 04
11 00 21 38 3b 6f 62 5b 68 16 58 6b 68 57 5a 57
16 58 5f 68 16 57 64 57 5e 6a 57 68 16 58 6b 62
5a 6b 63 ac 07 02 04 0f 00 04 00 00 84 00 0d 00
7c 00 7f 00 82 0d 00 01 01 02 05 02 29 65 6a 65
66 57 68 61 6a 57 64 16 39 3f 61 63 57 61 16 5f
69 6a 5b 5a 5f 3d 5f 64 5b ac 5b 63 5f 64 16 63
5f 69 5f 64 35 ac 05 04 05 5b 6c 5b 6a 5e 57 6f
3f 68 01 02 01 01 10 0b 02 02 98 03 11 01 29 58
6b 16 41 57 66 3f 16 41 5f 62 5f 6a 62 5f 24 ac
57 64 57 5e 6a 57 68 16 5d 45 68 5b 64 16 65 62
5a 6b 16 63 6b 16 35 ac 10 0e 00 04 0f 00 04 04
00 00 32 00 06 00 0b 00 2e 00 30 0d 00 04 0e 00
11 03 1d 58 6b 68 57 69 3f 16 57 63 63 57 16 66
5f 69 16 61 65 61 6b 6f 65 16 58 5b 5b 16 17 ac
04 0f 00 04 00 00 80 00 10 00 5a 00 7c 00 7e 0d
00 01 01 51 01 04 02 21 39 3f 61 63 57 61 16 5f
69 6a 5b 5a 5f 3d 5f 64 5a 5b 64 16 5b 63 5f 64
16 63 5f 69 5f 64 16 35 ac 05 06 07 5b 63 5f 64
5f 63 5a 5b 3d 5f 62 5f 63 01 02 01 01 10 02 10
5f 6f 5f 16 45 6f 62 5b 16 65 62 69 6b 64 24 ac
04 0e 00 01 01 51 01 04 02 16 39 3f 61 6a 3f 61
16 5f 49 6a 5b 16 64 1d 65 62 59 5b 61 16 35 ac
07 51 04 0f 00 04 00
Bu arada en sevdiğim şey "display face with text" oldu. Konuşma sekanslarını gruptan birine yaptırmak için karakter parametresi alıyor, null verilirse random bir karaktere söyletiyor :))
-
Tabii sürekli "bu adamlar bu formatı kendileri mi icat ettiler" diye düşünüp durdum. Bir iki mesaj önce gönderdiğim kitaba da öyle denk geldim, yani belki bir tool vardır filan common sense kullanılan diye. Bir ara yanılmıyorsam @Ref bunlar AMOS Pro ile okunur gibi bir şey demişti... Şöyle bir kaynak var: https://amospromanual.dev/14-appendix-e-memory-bank-structures.html#05-work-banks-and-data-banks-stored-on-disc, belki biliyorsunuzdur.
Belki bu kısımda @Ref yardımcı olmak ister :) ben AMOS Pro 2.0 diskini açtım ama bir DIM yazıp save ettirip dosya neye benziyor diye bakana kadar akla karayı seçtim ;D
Neyse, çok keyifli bir serüvendi... şimdi artık iş ciddiye binebilir. Elimizde teoride bütün haritalar ve bütün senaryolar programlanabilir bir şekilde var. Ben arkada kart oyunu için bir combat engine zaten yazdım, aparılabilir. Inventory management, art work, biraz güzel savaş mekaniği... karakter yaratma vs... elimizdeki işler bunlar :)
2. level'ı da yapıp Özgür'ün kapısında dayanalım diyorum :)
-
Bakın ne buldum :))
https://gitlab.com/amigasourcecodepreservation/ultimate-amos/-/raw/master/pdf/ultimate-amos-1994-holborn.pdf
Bizimkiler bu kitaptan etkilenmişler midir acaba? :)) sadece iki sayfa ayırmış kitap ama...
AAa süpermiş :D
Bu hiç zor birşey değil, çocukların buna ihtiyacı olduğunu sanmıyorum. Ben ortaokuldayken yapmıştım bunu kendim çocuk aklımla.
konumuzla alakalı değil ama bundan ben de yapayım diyen varsa, şu videodaki adamı izledim geçen, bence bu sistemi en güzel anlatan bu arkadaş. Hem de bu videoda biraz daha akıllı bir sistemi geliştiriyor, görünmeyen blokları basmaya gerek kalmıyor, çizim hızlanıyor tabi. https://youtu.be/7L3hlafPcAU?t=327
Evet... haftasonumun çoğunu buna verdim ama sonunda sanıyorum bütün opcode'ları çıkardım, state machine'in nasıl çalıştığını çözdüm...
Detaylı analizi daha sonra paylaşacağım yazdığım tool'larla beraber. Bir sürü şey (doğal olarak) sandığım gibi değilmiş.
Armağan hocam, bakın bu türk retro aleminde nadir görülen anlardan biri. Şu forumun kurucularından biriysem tek sebebi bu andır :D 10 senedir forumun açık kalmasının sebebi bu küçük anlar. Tamam o da gerekli ama sadece onu aldım bunu sattımın domine ettiği bir retro kültürü beni çok darlıyor. Bu gibi projelerin meyve vermesi nefes aldırıyor işte.
Tabii sürekli "bu adamlar bu formatı kendileri mi icat ettiler" diye düşünüp durdum.
yok hayır, zaten exe dosyadaki gömülü bankar data bank olarak kullanılmış. Fakat databank kesintisiz bir bellek alanı aslında. 1D bir array'den farkı yok. Veri formatı kendi icatları büyük ihtimal, yani zaten kompleks structlar değil bunlar, kağıt üzerinde hardcoded şekilde de halledilebiliyorlar. Yani oyun haritasını iff imajda saklamayı tercih eden adamlar neler yapmaz :D Benim tahminim oyun anında array'e yüklüyorlardır, ham şekilleri databankta duruyordur. Bu sebeple databanktaki dizilim array'i yansıtıyordur. Bu bir tahmin. Bu arada aslında Amos'da @doMiNO benden daha iyidir, şu ara aklı başka yerde, uzaktan izliyor :)
neyse sonuç olarak akşam databanklı, farklı dim'lere sahip compile edilmiş bir amos denemesi yapar koyarım buraya.
-
bugün biraz boş vaktim vardı, biraz senaryoları inceledim. burada yazdığın bilgileri alıp biraz daha öteye taşımaya çalıştım, hala birçok eksik var bu konuda:
bu senaryo 1 dökümü. %95 tamam ama hala benim kafamda bazı eksikler var.
edit: burası değişti. bir sonraki mesajda yenisi var
Her bir event 8 byte header ile başlıyor, 1 byte 0x00 terminator ile bitiyor.. burada 16bitlik 4 değer var. bunu amos array'inin belirteçleri olabilir, henüz onu denemeye fırsatım olmadı.
2 senaryoda haritada işaretli event sayısı ile senaryodaki event sırası birbirini tutmuyor. Örneğin, senaryo dosyasında 3.sırada olan silikon baba eventi, haritada 8 numarası ile işaretli. Aynı şekilde başlangıç noktasından geri girememe olayı haritada 6.event, senaryoda 1.event. Hmm şimdi farkettim, 1.senaryoda 5 event var, ordan devam ediyor numaralar belli ki. Bu durumda pixel palet datası 0-31 arası olmak zorunda olduğuna göre, önceki pixellerle çarparak daha büyük rakamları ifade ediyorlardır. son iki byte 1 1 olunca aslında 32 oluyor bu durumda?
[startFight: enemyId=13, count=1] aslında devamı var, her zaman devamında 4 byte daha oluyor. Bu startfight'e mi ait emin değilim ama öyle görünüyor.
yani startfight(enemy,count,var1,var2,var3,var4) şeklinde sanki ama emin de değilim.
0x0E Bu end/finish işlemi parametre alıyor gibi görünüyor. 2.senaryoda bazı bozukluklara sebep oluyor.
ileriki levellarda daha yeni komutlar ve parametreler ekleniyor. Yani biraz daha kafa yormamız lazım.
Halen haritanın entrypoint'ini bulabilmiş değiliz mesela. yani bir haritaya girildiğinde oyuncu nereden başlayacak ve ne yöne bakıyor olacak, bu bilgi nerede?
+--------------------------+-----------------------------------------------+----------------------------------------------------------------------------------------------------------+
| Hex Kodu | Komut | Açıklama |
+--------------------------+-----------------------------------------------+----------------------------------------------------------------------------------------------------------+
| `01` | IF? `conditionalJump` veya `triggerBeforeEnter| Ardından: var, equals, jumpOver |
| `02` (1 byte) uzunluk | Print `displayText` | Ardından özel karakter setiyle metin DechiperRot(byte[] data) ile açılacak.
metin içindeki 0xAC karakteri carrier return oluyor. |
| `03` | Show `displayImage` | Ardından 1 byte image id |
| `04` | `enter room` veya "Update View" | |
| `05` | `askQuestion` | Ardından 2 byte: seçenek uzunlukları; Ardından özel karakter setiyle 2 farklı
| `06` ?? seçenek metni, her biri DechiperRot(byte[] data) ile açılacak. |
| `07` | `setVariable` | Ardından var, value |
| `08` | `startFight` | Ardından: 00, enemy id, count |
| `09` + 9byte | `inventory/yerde para` | yerde esya var dolar, mark, kivrik ... |
| `0a`+1 uzu | `print random, 0xAC ile ayrılmış metinlerden rastgele biri yazılır
| 0b-0c`??
| `0d` | `seperator` | Blok başı veya özel gösterim (takip eden byte 00 değil ise başlangıç image olabilir) |
| `0e 00` | `finalState` | |
| `0f` ??
| `10` | `break` | |
| `11` | `displayTextWithFace` | Ardından: yüz kodu, uzunluk, metin |
+--------------------------+-----------------------------------------------+----------------------------------------------------------------------------------------------------------+
dediğim gibi hala soru işaretleri var, bir lamba yanarsa buraya eklerim.
Edit: Kullanma kılavuzu sayfa 57'de bu senaryo editörü hikayesini anlatıyor. Görünüşe göre kendi formatlarını yazmışlar ve bu doğru ise 30'dan fazla komut varmış, bu durumda biz henüz yarısını çözebilmişiz.
(https://retrojen.org/lib/mag/pages/onthefly/Lale-Savascilari-Maceracinin-El-Kitabi-Amiga_00_p_61.jpg)
-
bugün akşam biraz daha ilerlettim senaryo okuyucuyu. otopark bölümünde tanınmayan komut yok ama belirsiz parametreler sürüyor. @dashersw kusura bakma senin seçtiğin isimleri zaman içinde keyfime göre değiştirdim, sen de benimkileri değiştirirsin ilerletirsen ödeşiriz :D
örnek: next map (0x0B) kodu 4 parametre alıyor, 2 2 tamam bunlar senaryo ve map dosya isimleridir (doğru ise bu parametre ile kendi dosyalarımızı oyuna ekleyip genişletebiliriz). 152 ve 3 nedir bilemiyorum. (edit çözüldü githubda var)
===== Event #3 =====
Header: 00 0D 00 7C 00 7F 00 82
0.Room Begin: (0)
1.IF isNotSet(2) Then SKIP 5 (7)
2.Print "otoparktan CIkmak istediGine emin misin? "
3.Input? evet / hayIr
4.IF AnswerWas(1) Then SKIP 1 (6)
5.[break]
6.******* Next Map: 2, 2, 152, 3
7.Talk with face 1,"bu KapI Kilitli. anahtar gOren oldu mu ? "
8.[break]
9.End 0.
10.End.
11.Begin
12.Room End (4-0)
Gece 2 olmuş... Kaynak kodları bugün yarın github'a koyarım.
Şu anda fena gitmiyoruz, benim editör işliyor, sadece eksik komutları çözmek kaldı. gerçekten de bir OpenLale geliyor gibi...
[ You are not allowed to view attachments ]
Kaynak kodları github'da. Eventleri parse eden fonksiyon ViewEvent şurada:
https://github.com/ref-xx/LaleMap/blob/main/Form1.cs#L1349
bu arada overlay icon grafikler tamamdır. Sıralama executable içindeki array sıralamasına uyuyor, bir kısmını ordan almıştım ama sanırım 80 tane hepsini almam gerekecek. https://github.com/ref-xx/LaleMap/blob/main/Form1.cs#L81
[ You are not allowed to view attachments ]
extract ettiğim tüm imajlar github'da extracted klasöründe.
-
Ahhhh müthişsin! Ben bu iki hafta çok yoğun bir takvime girdiğim için hiçbir şeye bakamadım...
Eline sağlık :) Sanırım tek unify etmemiz gereken şey C# değil JS kullanmak :P
Resimleri extract etmen çok iyi olmuş. Bunların dosya içinde siyah beyaz tutulduğunu, paletin kodun içinde olduğunu konuşmuştuk. Nasıl aldın?
Bu arada kitapçıkta yazdığını görmemiştim, efsaneymiş yahu... o zaman asıl OpenFRPOS yapmak lazım :)))
Ben bu arada oyun motorunu düşünüyorum. First-person yerine izometrik bir şey mi olsa, voxel tabanlı bir şey mi olsa, tilt shift efektli miniaturized bir şey mi olsa... bir yandan da bunları kodlamaya çalışıyorum. Henüz tatmin edici bir şey yakalayamadım ama.
-
Ahhhh müthişsin! Ben bu iki hafta çok yoğun bir takvime girdiğim için hiçbir şeye bakamadım...
Eline sağlık :) Sanırım tek unify etmemiz gereken şey C# değil JS kullanmak :P
Resimleri extract etmen çok iyi olmuş. Bunların dosya içinde siyah beyaz tutulduğunu, paletin kodun içinde olduğunu konuşmuştuk. Nasıl aldın?
Onu ben de düşündüm ama visual studio gibi bir editörü bırakabileceğimi sanmıyorum :D Eminim chatgpt C#->JS dönüşümünü gözü kapalı yapıyordur. Hatta benim yazdığım berbat koddan daha temiz bir çıktı verir :)
Renkleri, iconlar için, aslında debugger kurcalarken tesadüfen buldum denebilir :D e komutu tüm hardware registerlerini dump ediyormuş. eh renkler de registerde tutulduğu için, ekranda görüntü varken debugger'den çektim, o biraz çetrefilli oluyor. diğerleri, bazı imajların paleti vardı zaten, o imajı paletli olarak yükleyip kilitleyip, diğer imajları sanki o paleti kullanıyor gibi denedim, onlar da oldu. Yani emülatör olunca bir şekilde kolay. Paletlere ihtiyaç duyarsan form1.cs kodları içinde bulabilirsin.
Bu arada kitapçıkta yazdığını görmemiştim, efsaneymiş yahu... o zaman asıl OpenFRPOS yapmak lazım :)))
Ben bu arada oyun motorunu düşünüyorum. First-person yerine izometrik bir şey mi olsa, voxel tabanlı bir şey mi olsa, tilt shift efektli miniaturized bir şey mi olsa... bir yandan da bunları kodlamaya çalışıyorum. Henüz tatmin edici bir şey yakalayamadım ama.
OpenFRPOS gidilecek en mantıklı yol gerçekten. Hem copyright etiğine de uygun.
Oyun motoru işini sana bırakıyorum :D Ben LaleMap diye başladığım için level çözümlemeye doğru kendi kendimi itmiş oldum biraz :D Bulmaca çözer gibi boş vakitlerde bir komut bir komut derken baktım büyüdü iş.
Orjinal oyun haritaları çok küçük. Oyunun "battle" görünümü yine oyun haritasından bir arena yaratıyor, savaşın gerçekleştiği hücre merkezde oluyor ve çevre hücreleri de katarak 3x3'lük bölümden bir harita yapılıyor. Her hücre aynı şekilde küçük dilimlere bölünmüş bu şekilde harita büyütülmüş ama haritalarda detay olmuyor tabi. Bomboş zemin ve duvar, arada çukur falan random spawn olabiliyor monotolluğu kırmak amaçlı. Yani hangi tarzı seçersen seç, ana haritayı biraz daha detaylandırmak gerekecek gibi.
Ben yine baldurs gate görünümünü seviyorum, grimrock'da bunu mükemmel halletmişlerdi, 3D first person ama 2d gibi 90 derecelere kilitli. onu tercih ederim.
(https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/207170/ss_9510879170afd2f82fd04048f44811b16fad5d2e.1920x1080.jpg?t=1447355394)
Ben de bir taraftan Level editöre başladım, o sırada kalan bilinmeyen frpOS komutlarını da çözerim gibi geliyor 7-8 tane kaldı zaten.
-
Arkadaşlar, şu sıralar bu projeye destek verecek vakit bulamamışken arada lafa girip gereksiz yer işgal etmek istemiyorum ama @Ref'in son yorumu üzerine iki noktanın altını çizmek isterim.
1) Visual Studio ve Visual Studio Code, her ikisinin de yeterli derecede JavaScript / TypeScript destekleri var. C# elbette ki Visual Studio'nun öz evladı. Ama ben bir çok farklı dili Visual Studio ile sorunsuz kullanıyorum. Hatta Unity'de JavaScript desteği varken (UnityScript diye geçiyordu) Visual Studio ile kullanıldığını hatırlıyorum. Tabii Unity yıllar önce çöpe attı JavaScript desteğini ama o zamana kadar yanlış hatırlamıyorsam yine Visual Studio ile kullanılıyordu. Özetle Visual Studio'yu C#/C++/VB.Net vs ile sınırlı olarak düşünmeyin. Çok daha fazla dile destek veriyor. Verdiği destekler her zaman kusursuz olmuyor. Örneğin 2010-2012 yılı civarınlarında C++ ve C++/CLI desteği yerlerde sürünüyordu, intellisense çalışmıyordu ki official olarak durum böyleydi, bug değildi yani. MS forumlarında MS çalışanları third party plugin öneriyorlardı. Kısacası evet, C# öz evlat, diğerleri üvey evlat. Ama Visual Studio JavaScript desteklemiyor gibi bir algı yanlış.
https://visualstudio.microsoft.com/tr/vs/features/javascript/
2) Eğer bir şey yalnızca tool ise farklı dilden olması bence "bir yere kadar" sorun değil. Örneğin @Ref C#'dan bir data exporter yazar, ana proje JavaScript olur, kardeş kardeş çalışır her ikisi yan yana. Ama şu noktada sıkıntı çıkıyor. Örneğin @Ref bir structure/class oluşturuyor ve datayı tam o formatta serialize edip kaydediyor, @dashersw aynı datayı yükleteceği noktada eğer aynı dil kullanılmış olsa iki source code ortak library bile kullanabiliyor. Yani üç proje oluyor;
* OpenFRPOSCore
* OpenFRPOSEditor
* OpenFRPOSEngine
gibi. OpenFRPOSCore her iki proje tarafından da kullanılıyor. O zaman dil ya da en azından reflection seviyesinde ortak bir interface kullanımı çok ideal oluyor. Ben geçmişte bir çok projemde bu yapıyı kullandım. Export / import edilen, serialized data yapısı değiştikçe ona göre Core library'i değiştiriyordum, hem toollar, hem engine ikisi de Core üzerinden güncel yapıyı kullanıyordu.
Ancak dil ortak olmadığı durumda da çözümler yok değil. Protobuf gibi kütüphaneler var. Tabii kendiniz de benzerini geliştirebilirsiniz ama bu işinizi epey kolaylaştırabilir.
https://protobuf.dev/
Böyle bir şey kullandığınız durumda çok fazla dil desteği olduğu için farklı iki dil kullanmanız sorun olmuyor. Her ikiniz de farklı iki dilden protobuf kullanıyorsunuz. İki farklı dilden aynı ortak structure üzerinden serialization yapabiliyorsunuz.
Fiilen bir fayda sağlayamadığım noktada bu konudaki yorumlarımı yapıp, hızla uzaklaşıyorum. :)
-
Lale Savaşçılarının ilk crack denemesini biliyorsunuz kod metinlerini sıfırlayarak yapmıştım. Bu pek iyi sonuç vermiyor, özellikle önümüzdeki dönemde belki senaryo modlamaya başlayacağız ve executable kısmın sağlıklı çalışmasını istiyorum. Elimizde yepyeni bilgiler var, oyunu da çok iyi tanır hale geldik bu süreçte. Bu sebeple başka bir yöntemle yeni bir crack daha yaptım. Bu da baştan sona test edilmedi elbette ama bu reverse-engineer sürecince test edilecektir.
Bu çok daha temiz bir crack oldu, bu sebeple oyunu denemek isteyenler varsa bunu tercih etmeliler.
Istanbul Efsaneleri - Lale Savascilari (1995)(SiliconWorx)(Tr)(cr REF)[!].zip (https://arda.kisafilm.org/fish/get/serve.php?b=IstanbulEfsaneleri-LaleSavascilari_REF_2025.zip&d=47&s=forums)
-
proje unutulmuş gibi duruyor ama hayır, bu akşam shax'ın bir gazı ile başlayıp disketlerdeki tüm imajları ve spriteları extract ettim.
yüzlerce sprite, duvar setleri, canavarlar, bloklar...
[ You are not allowed to view attachments ]
Ayrıca artık odaları çizebiliyorum...
[ You are not allowed to view attachments ]
-
Eline sağlık @Ref.
Bence bundan sonrası için ortak bir ToDo list oluşturmanız güzel olabilir. Remake'i tamamlamak için tam olarak neler gerekli, eksikler neler netleşirse iş bölümü yapmak da daha kolay olacaktır.
-
Burada boş bir teşekkür mesajı ile yer kaplamak istemiyordum ama dayanamadım, yıllardır birileri belki yapar diye umut ettiğim remake projesine sonunda başlanmış olması müthiş. Herkesin eline sağlık ve umarım sıkılıp yarıda bırakmazsınız.
Bu arada merak ettiğim; içerik olarak sadece Amiga versiyonunu mu temel alıyorsunuz? PC port'u CD için geliştirildiğinden ek içerikler vardı, örneğin o port'taki ara videoların AI upscaler ile kullanılabilir hale getirilip dahil edilmesi oldukça hoş olurdu.
https://web.archive.org/web/20110823073420/http://www.stillpsycho.net/Lale_Sava%C5%9F%C3%A7%C4%B1lar%C4%B1_Da%C4%9F%C4%B1t%C4%B1m%C4%B1 (https://web.archive.org/web/20110823073420/http://www.stillpsycho.net/Lale_Sava%C5%9F%C3%A7%C4%B1lar%C4%B1_Da%C4%9F%C4%B1t%C4%B1m%C4%B1)
-
Burada boş bir teşekkür mesajı ile yer kaplamak istemiyordum ama dayanamadım, yıllardır birileri belki yapar diye umut ettiğim remake projesine sonunda başlanmış olması müthiş. Herkesin eline sağlık ve umarım sıkılıp yarıda bırakmazsınız.
Bu arada merak ettiğim; içerik olarak sadece Amiga versiyonunu mu temel alıyorsunuz? PC port'u CD için geliştirildiğinden ek içerikler vardı, örneğin o port'taki ara videoların AI upscaler ile kullanılabilir hale getirilip dahil edilmesi oldukça hoş olurdu.
https://web.archive.org/web/20110823073420/http://www.stillpsycho.net/Lale_Sava%C5%9F%C3%A7%C4%B1lar%C4%B1_Da%C4%9F%C4%B1t%C4%B1m%C4%B1 (https://web.archive.org/web/20110823073420/http://www.stillpsycho.net/Lale_Sava%C5%9F%C3%A7%C4%B1lar%C4%B1_Da%C4%9F%C4%B1t%C4%B1m%C4%B1)
Ben şu anda amiga sürümüne level editor yapma planıyla ilerliyorum ama bu da ne işe yarayacak bilmiyorum. Editörü yaparken oyunun da yarısını kodlamış kadar olabilirim elbette. dashersw ile bu başlıkta gördüğünüzün dışında bir kontağımız yok.
Amiga tarafında oyun kötü yaşlanmış. Özgür Özol ve arkadaşlarının yaklaşımları çok özgün ve metinler de son derece eğlenceli. Ama o dönem katlanabildiğimiz pek çok şeye günümüzün bolluğunda kötü tasarım diyoruz. Oyun kodu baştan yazılmadan bunların aşılabilmesi mümkün değil. Editörü yazdıktan sonrasını henüz düşünmüyorum.
-
İşten güçten bir türlü vakit bulup bu işe geri dalamadım, ta ki bu geceye kadar. Yeni bir motor yazdım ben de. Oyunun senaryo işleyişini daha kolay implement edebilmek için ilk yaptığım motordaki free movement yerine orijinal oyundaki gibi adım adım ilerleme/sağa sola dönme ekledim. Böylelikle onEnter, onExit gibi trigger'lar kolayca çalışacak :)
Önümüzdeki günlerde önce haritayı, sonra da senaryoları implement edeceğim.
-
@Ref bu arada yaptıklarını inceledim tabii ki... inanılmaz işler yapmışsın... Bana Visual Studio kurdurdun :)))
Yeni motoru https://lale-r3f.vercel.app/ adresine deploy ettim.
-
İşten güçten bir türlü vakit bulup bu işe geri dalamadım, ta ki bu geceye kadar. Yeni bir motor yazdım ben de. Oyunun senaryo işleyişini daha kolay implement edebilmek için ilk yaptığım motordaki free movement yerine orijinal oyundaki gibi adım adım ilerleme/sağa sola dönme ekledim. Böylelikle onEnter, onExit gibi trigger'lar kolayca çalışacak :)
Önümüzdeki günlerde önce haritayı, sonra da senaryoları implement edeceğim.
Hobi bu, işler güçlerden kalan (ya da depresyonda olduğumuz) zamanda yapılan gönüllü aktivite :D
@Ref bu arada yaptıklarını inceledim tabii ki... inanılmaz işler yapmışsın... Bana Visual Studio kurdurdun :)))
Aah, ben zaten temiz kod yazan biri değilim, heme bu kod keşfettikçe ekleye ekleye yamalı bohçaya döndü, sana bol zihin sağlığı, b12 falan tavsiye ediyorum.
Yeni motor tam benim sevdiğim şekilde olmuş :D
-
Eveeet iki guzel haberim var:
1) https://lale-r3f.vercel.app/ uygulamasini guncelledim. Artik 1. harita tamamen dogru ciziliyor, merdivenler, kapilar vs duzgun calisiyor. Senaryo implement edilebilir hale geldi.
2) Unity ve Blender ogretmeni olan bir arkadasim da Lale Savascilari'ni bilmemesine ragmen destek vermek istedi. Isometrik tilt-shift bir motor uzerine denemeler yapiyor o da. Eger iyi bir sonuc cikarsa mecburen C# yazacagiz galiba :)
Artik sirada senaryoyu implement etme var. Cok heyecanli :)
-
Eveeet iki guzel haberim var:
1) https://lale-r3f.vercel.app/ uygulamasini guncelledim. Artik 1. harita tamamen dogru ciziliyor, merdivenler, kapilar vs duzgun calisiyor. Senaryo implement edilebilir hale geldi.
2) Unity ve Blender ogretmeni olan bir arkadasim da Lale Savascilari'ni bilmemesine ragmen destek vermek istedi. Isometrik tilt-shift bir motor uzerine denemeler yapiyor o da. Eger iyi bir sonuc cikarsa mecburen C# yazacagiz galiba :)
haha, uygulamayı kurcalarken ben de 1.level'i iyice öğrendiğimi fark ettim. bu arada bu görüntü pc versiondaki kısa filmlerdeki atmosfere çok uymuş, karanlık izbe tüneller. :D
Artik sirada senaryoyu implement etme var. Cok heyecanli :)
0x06 ve 0x13 dışında tüm senaryo komutları büyük ölçüde çözülmüş durumda. Büyük ölçüde diyorum çünkü bazı komutların ne yaptığını çözsem de bazı parametrelerinin ne işe yaradığını bilmiyorum. Örnek ilk levellarda belirli yüz seçerek yazı yazdıran komutu 3.leveldan sonra hiç kullanmamışlar. Yenisini yazmışlar, bu durumda komut 2'ye bölünmüş, "yüzü ayarla" ve sonra "x numaralı yüzle yazdır" komutunu 5.numara ile çalıştırmak. Ama yüzü ayarla komutu garip parametreler alıyor, 1,11 ya da 0,21 falan gibi. belki yüz ayarlamaktan başka bir iş yapıyordur. Belki belli cinsiyette bir yüz göster, ya da öğretmen varsa onu göster falan gibi birşey olabilir. Komutların yarısında böyle bilinmeyen parametreler var. Ancak oyunu açıp bellekte datayı değiştirip deneyerek öğrenilebilir, zaman ayırmak lazım...
-
İşte o büyük gün...
[ You are not allowed to view attachments ]
[ You are not allowed to view attachments ]
[ You are not allowed to view attachments ]
https://lale-r3f.vercel.app/
-
oooo en azından bu proje başarsız oldu demeyeceğiz, "birşeyler yapıldı" kategorisine geldik bence.
fakat müzik? o nereden geldi?
[ You are not allowed to view attachments ]
şu haritayı da 3 boyutlu kat kat görmüş olduk :D
-
Eline sağlık, senaryonun işlemeye başlaması süper bir gelişme. Non-playable proof of concept'den playable proof of concept'e geçiş yapmışsın, çok önemli bir aşama.
Acaba arada bazı fixler mi yaptın diye düşündüm. Çünkü bugün erken saatlerde denediğimde çok fazla hata ile karşılaştım. Bahsettiğim hatalar yeri geldiğinde fazladan adım atıp belli bir karede durmamaktan çıkan popupların yerli yersiz çıkması gibi şeylerdi. O anda mesaj yazacak vaktim yoktu. Şimdi akşama denediğimde çok daha az problemle karşılaştım. O yüzden karşılaştığım problemleri rapor etmiyorum. Senden "artık 1. level tamamen oynanabilir durumda" gibi bir update geldiğinde detaylı test edip bug report yaparız, daha mantıklı olur diye düşünüyorum.
Tekrar eline sağlık.
-
Muzigi @ZeroSkillProdigy paylasmisti daha once (2. sayfada var) :) Efsane degil mi? It's coming together...
Bir arkadasim Unity'de baska bir motor yaziyor. Isometric 3rd person, o eger bir asama kaydederse ona da implement etmek istiyorum oyun mekanigini. Ozgur'e de gonderdim bu arada, bakalim ne diyecek :)
@Skate arada bir iki ufak sey yaptim ama hareketlerle ilgili bir degisiklik oldugunu sanmiyorum... Sondaki senaryo event'i filan da dogru calismiyor... oyun motorunu biraz toparlamam lazim, event'leri giydirmek epey zorlu oldu.
bu arada...
[ You are not allowed to view attachments ]
Yuksek cozunurluklu scan'lerini de alip paylasacagim :)
-
Bir arkadasim Unity'de baska bir motor yaziyor.
Valla en çetrefilli kısım battle ekranı zaten. orayı halletmek demek oyunun çoğunu halletmek demek. harita, voxeller, büyüler zarlar inventory vb. bir sürü kıvır zıvır.
bu arada...
Yuksek cozunurluklu scan'lerini de alip paylasacagim :)
of of! internet 2025 senesinde bunları da mı görecektiiii!!! :)
Mecidiyeköy haritası şimdi daha anlamlı oldu.
Mecidiyeköy deyince, tam haritanın göbeğinde duraklar var. duraklar var ama sanki otobüs gibi üç kapılı uzun ince şeyler çizmişler. bunların içine exit koyabilirlermiş. Otobüse biniyorsun, hop fatihtesin, yok beşiktaştasın :D Sanki script unutulmuş gibi.. Tabi diğer tarafa da durak yapmak lazım. :D bir de otobüs texture'u. hepsi mümkün, zaten oyun şeffaf cam çizimini destekliyor, otobüs yapılabilir. Senaryo editörü tamamlansın ilk müdahaleyi oraya yapacağım :D
şurası:
[ You are not allowed to view attachments ]
-
Bu arada kullanma kılavuzunda verilen siliconworx adresi halen olduğu gibi duruyor (engin apartmanı daire 2):
https://retrojen.org/lib/mag/reforizer.php?mag=Lale-Savascilari-Maceracinin-El-Kitabi-Amiga&issue=00&pageno=64 (https://retrojen.org/lib/mag/reforizer.php?mag=Lale-Savascilari-Maceracinin-El-Kitabi-Amiga&issue=00&pageno=64)
https://www.google.com/maps/@41.0642931,28.9978796,3a,90y,241.76h,103.3t/data=!3m7!1e1!3m5!1sGtX8_3R4JXoMMX31yYvnJA!2e0!6shttps:%2F%2Fstreetviewpixels-pa.googleapis.com%2Fv1%2Fthumbnail%3Fcb_client%3Dmaps_sv.tactile%26w%3D900%26h%3D600%26pitch%3D-13.29602561490367%26panoid%3DGtX8_3R4JXoMMX31yYvnJA%26yaw%3D241.7641322128164!7i16384!8i8192?entry=ttu&g_ep=EgoyMDI1MDUwNy4wIKXMDSoASAFQAw%3D%3D
yine kılavuzda şu sayfada arada harddiskin düştüğünü ve kullandıkları editöründe o diskte olduğunu söylüyorlar.
https://retrojen.org/lib/mag/reforizer.php?mag=Lale-Savascilari-Maceracinin-El-Kitabi-Amiga&issue=00&pageno=62
bu da oyunun içerisinde bölümler arasındaki senaryo formatı değişikliğini açıklıyor. Örneğin mecidiyeköyde set edilmiş birçok değişken diğer bölümlerde hiç kullanılmıyor. Ayrıca bir türlü anlam veremediğim "x kafa ile konuş" komutu yine sadece bazı 2-3 bölümde var, ileriki bölümlerde "kafa ayarla" ve "ayarlı kafa ile konuş" şeklinde iki ayrı komut var. Bu disk bozulması ve re-tooling olayı ile açıklanabilir. Bu arada son bahsettiğim komut çiftinin parametrelerini halen tam olarak çözebilmiş değilim, değerleri random değiştirerek sonuçlara baktım, acaba konuşma hızını falan mı etkiliyor diye, hiç fark etmedi. Yani FrpOS senaryo formatında hala çözülmemiş bulmacalar var :D