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