- 1980'lerde IBM PC için yapılan BASIC oyunu temel alan, TI-82·83·83+ hesap makinelerinde TI-BASIC ile çalışan bir ticaret simülasyonu oyunu sürümü
- Oyuncu altı şehir arasında dolaşıp uyuşturucu alıp satar, borcunu öder ve bir ay boyunca en yüksek kârı hedefler; yapı içinde rastgele olaylar ve polis kovalamacası da bulunur
- Topluluk,
.8xp dosya paylaşımı, TI CONNECT aktarımı, TI-Coder dönüştürme gibi kurulum ve çalıştırma yöntemlerini aktif biçimde tartıştı ve çeşitli değiştirilmiş sürümler üretti
- Kod analiziyle değişkenlerin tekrar kullanımından kaynaklanan hatalar ve sonsuz kâr döngüsü gibi mantık hataları bulundu; birçok kullanıcı bunları düzeltti ve TI-84 CE uyumlu sürümler yayımladı
- Sonrasında C/SDL yeniden yapımı, Pico-8 ve C# portları, Z80 konsol uyarlaması gibi yönlerde gelişerek topluluk klasik hesap makinesi oyunlarını canlandırma projesi etrafında büyüdü
TI-82/83/83+ için Drugwars oyununun genel görünümü
- TI-82, TI-83 ve TI-83+ hesap makinelerinde çalışan Drugwars, 1980'lerde IBM PC için yapılan BASIC oyununu temel alan bir ticaret simülasyonu oyunudur
- Oyuncu uyuşturucu alıp satarak tefeciye olan borcunu ödemeye çalışır; amaç, bir ay boyunca mümkün olduğunca çok para kazanmaktır
- Oyun TI-BASIC dili ile yazılmıştır ve ağırlıklı olarak
Lbl, Goto, Menu, Disp komutları etrafında kuruludur
- Oyun başlarken başlangıç sermayesi, borç, envanter, trençkot kapasitesi gibi değişkenlerin ilk değerleri atanır
- Örneğin:
2000→Z (nakit), 5000→Y (borç), 100→K (kullanılabilir alan)
- “ORIGINAL GAME FOR IBM BY JOHN E. DELL” ifadesi gösterilerek özgün oyunun kaynağı belirtilir
-
Oyun akışı yapısı
- Oyuncu Bronx, Getto, Central Park, Manhattan, Coney Island ve Brooklyn gibi altı şehir arasında hareket ederek ticaret yapar
- Eylemler
Menu("DRUGWAR!", "SEE PRICES", "BUY", "SELL", "JET", "SEE LOAN SHARK", "VISIT BANK") menüsü üzerinden seçilir
- Her uyuşturucunun (kokain, eroin, LSD, marihuana, speed, ludes) fiyatı her gün rastgele değişir
-
Olay sistemi
- Rastgele olaylar
rand fonksiyonu kullanılarak üretilir
- Rakip satıcının fiyat kırması, polis baskını, fiyat patlaması, metro soygunu gibi olaylar
- Örnek: “YOU WERE MUGGED IN THE SUBWAY!” gerçekleşirse nakdin 1/3'ü kaybedilir
- Belirli koşullarda silah satın alma, trençkot yükseltmesi, banka işlemleri ve tefeciye ödeme yapılabilir
-
Çatışma ve polis kovalamacası
- Belirli miktarın üzerinde uyuşturucu taşırsanız polis (
OFFICER HARDASS) peşinize düşer
- Menüden RUN veya FIGHT seçilebilir
- Silah yoksa yalnızca kaçılabilir; sağlık (
J) 50 veya üzerindeyse ölüm işlenir
- Tüm polisler etkisiz hale getirilirse nakit ödül kazanılır
-
Oyun sonu ve puan hesaplama
- 31 gün geçince oyun biter
- Puan
(V+Z-Y) temel alınarak hesaplanır ve 1 ile 100 arasına dönüştürülür
- Sonuç “YOUR SCORE (ON A SCALE OF 1 TO 100)” mesajıyla gösterilir
Topluluk tartışmaları ve geliştirilmiş sürümlerin paylaşımı
- TI-82/83/83+ için Drugwars oyununun kurulumu ve çalıştırılması konusunda yoğun tartışmalar yapıldı
- Kod, hesap makinesinin içindeki BASIC yorumlayıcısına (PRGM → New) doğrudan girilebilir veya TI-Coder ile
.8xp dosyasına dönüştürülüp aktarılabilir
- Dönüştürme sırasında
≥ işaretinin >=, → işaretinin ->, θ karakterinin 0 olarak değiştirilmesi gibi düzenlemeler gerekir
- Dosyalar TI CONNECT veya TI-83 için USB adaptörü kullanılarak PC'den hesap makinesine aktarılabilir
-
gammalogic'in önerisi
- TI-83 için bir USB adaptörü alıp oyunu PC'den indirme ya da kaynak kodu doğrudan elle girme olmak üzere iki yöntem sundu
- Bazı adaptörlerin Windows XP sürücülerini kullandığını, bu yüzden güncel Windows sürümlerinde uyumluluk sorunu olabileceğini belirtti
- Linux veya Unix tabanlı sistemler için özgür yazılım sürücülerinin bulunabileceğini de ekledi
-
ileathan'ın .8xp dosyası paylaşımı
- TI-Coder ile oluşturduğu
.8xp dosyasını https://t7.vc/dl/DRUGWARS.8xp bağlantısı üzerinden paylaştı
- Dosya, TI CONNECT ve USB adaptörü ile hesap makinesine aktarılabiliyor
-
darth-crunchus'un düzeltmeleri ve iyileştirmeleri
- TI-Coder dönüştürmesinde eşitsizlik sembolü hatalarını ve değişken adlarında büyük/küçük harf sorununu işaret etti
- Lbl 3 ve Lbl 4 içindeki koşul ifadelerinin BASIC düzenleyicisinde düzeltilmesi gerektiğini söyledi
- Oyunu TI-84 Plus CE'de tamamen çalışır hale getirirken rastgele olayları (polis köpekleri, brownie vb.), silah fiyatlarını, trençkot yükseltmesini ve depolama alanı rastgeleleştirmesini geri getirdi
- Nihai kod boyutu 6310B oldu; sonraki güncellemelerde bu değer 11429B'ye kadar çıktı
- DOS'taki özgün oyuna daha yakın olması için rand( fonksiyonuna tohumlama (random seeding) işlevi ekledi
- En güncel sürümün kaynak kodu https://pastebin.com/4dUuw0BR adresinde yayımlandı
-
TI-BASIC metin girişiyle ilgili tartışma
- Alfasayısal giriş işleme tartışmasında, TI-BASIC'in dizeleri değişken uzunlukta işleyebildiği belirtildi
- Bir değişkene karakter girildiğinde, o karakterin değeri değişkene aktarılacak şekilde çalıştığı ifade edildi
-
Uyumluluk ve çalıştırma sorunları
- Oyun TI-84 Plus CE ve CE Python modellerinde de ek düzeltme olmadan çalışabiliyor
- Bazı kullanıcılar alım/satım sırasında giriş hatası nedeniyle MirageOS'a geri dönme sorununu bildirdi
-
Ek portlar ve fikirler
- Oyunun C# konsol uygulaması sürümü olarak yeniden yazılması planlandı
- Kendi Pico-8 sürümünü yazdığını söyleyen kullanıcılar çıktı
- Android veya PC için uyarlamaya yönelik ilginin de sürdüğü görüldü
Kod yapısı ve hata analizi
-
tibbon'un TI-83 BASIC değişken yeniden kullanımı analizi
- N değişkeni iki farklı amaç için tekrar kullanılıyor
- Eroin stok miktarı:
0→N, (N+G)→N, (N-G)→N
- Konum takibi:
2→N (Bronx), 1→N (diğer bölgeler)
- Bunun sonucunda şu mantıksal hatalar ortaya çıkıyor
- Hareket edildiğinde eroin miktarı değişiyor (Bronx'a gidince N=2 oluyor ve sistem bunu 2 eroin varmış gibi yorumluyor)
- Eroin ticareti yapıldığında konum bilgisi eziliyor ve Bronx denetimi yanlış sonuç veriyor
- N=0 durumunda Bronx / Bronx dışı kontrollerinin ikisi de başarısız oluyor ve banka ile tefeci erişim kısıtı kalkıyor
- Bronx'a gidince otomatik olarak 2 eroin oluştuğu için sonsuz kâr döngüsü mümkün hale geliyor
- Envanter hesabı
(T-M-N-O-P-Q-R)→K içinde konum değeri kullanıldığı için depolama alanı hesap hatası oluşuyor
-
Başlıca kötüye kullanım örnekleri
- Sınırsız banka/tefeci erişimi: N=0 durumunda bölge kısıtını atlama
- Sonsuz eroin üretimi: Bronx'a gidince otomatik oluşan 2 birimi tekrar tekrar satma
- Envanter tutarsızlığı: Konum değerinin ezilmesi nedeniyle trençkot kapasitesinin aşılabilmesi
Özgün kodun kaynağı ve tarihsel arka plan
- gammalogic, bunun IBM BASIC özgün koduna dayanıp dayanmadığını sordu; mattmanning ise “TI sürümü IBM oyununu temel alıyor, ancak başka platformlara derlenemez; oyun kuralları ve mantığını incelemek için uygundur” dedi
- Kodu internette bulduğunu ve yalnızca karakter biçimlendirmesini düzenlediğini açıkladı
- Özgün yapımcı John Dell, Drugwars'ı TRS-80 için yapılmış Taipan oyunundan esinlenerek geliştirdi
Topluluğun büyümesi ve sonraki çalışmalar
- Bazı kullanıcılar TI-84+ üzerinde çalıştırma hataları bildirse de, başka kullanıcılar oyunun TI-83+ ve TI-84+ emülatörlerinde sorunsuz çalıştığını doğruladı
- MirageOS tarafından tanınması için kodun ilk satırına
:: eklenmesi gerektiği yönünde ipucu paylaşıldı
- Kodun doğrudan hesap makinesinde
prgm -> new ile de girilebildiği belirtildi
- Kullanıcı DaSovietPotato, TI-84 uyumlu hata düzeltmelerini içeren bir sürümü ayrı bir depoda yayımladı
- gammalogic, oyunu C/SDL ile yeniden yapıp ardından Z80 tabanlı konsollara (Master System, NES vb.) port etme planını paylaştı
- İlk C/SDL demosunda NES çözünürlüğüne dayalı arayüz ile şehir ve uyuşturucu değiştirme özellikleri uygulanmıştı
- İleride bunu “Drugwars 2.0” sürümüne genişletme niyetini de belirtti
- Bazı kullanıcılar lisede oynadıkları döneme dair nostaljilerini anlatarak, TI-83 kablosu kullanıp oyunu yeniden kurma denemelerini paylaştı
- Topluluk, kod analizi ve BASIC öğrenimi yoluyla doğrudan port yapmayı teşvik ediyor; TI-83 kılavuzuna bakılması öneriliyor
- 2024'ten 2026'ya kadar yorumlar eklenmeye devam etti ve TI-84 CE, Pico-8, C# portları gibi çeşitli platform genişletme denemeleri sürdü
- Bazı kullanıcılar
.8xp dosyalarını e-posta üzerinden isteyip paylaştı
- Topluluk içinde bu çalışma, klasik hesap makinesi oyunlarını canlandırma ve iyileştirme projesine dönüşmüş durumda
1 yorum
Hacker News görüşleri
TI-83 Basic, kendimi ilk kez tam anlamıyla öğrendim diye hissettiğim programlama diliydi
Üniversitenin ilk yılında kodu TI-Basic ile yazıp sonra C++'a çevirirdim. O zamanlar Drugwars ve Bowling gerçekten çok etkileyici oyunlardı
Sonra z80 assembly ile karşılaşınca büyü gibi gelmişti. Babamın üniversitedeki laboratuvarına gidip (orada iki adet T1 internet hattı vardı) yeni çıkan assembly oyunlarını indirdiğimi hatırlıyorum. Bill Nagel'in Turbo Breakout'u, Snake, AShell, Penguins ve gri tonlamalı Mario çok sarsıcıydı. Ama bence en tamamlanmış ve tekrar oynanabilirliği en yüksek olanlar TI-86 için Sqrxz ve ZTetris'ti.
Bir keresinde bir oyunun z80 assembly kaynak kodunu çıktısını alıp, bir karış kalınlığında bir deste halinde yanımda taşıyarak anlamaya çalışmıştım.
Bir de rastgele hex kodları girip çalıştırmak tuhaf biçimde eğlenceliydi. Bazen hesap makinesi tuğlaya dönüyordu ama pili çıkarınca geri geliyordu
TI web sitesi savaşlarını hatırlayan var mı? TI Files (sonradan TI Philes) “ticalc.org'dan çok daha havalı” diyordu ama sonunda bugüne kalan ticalc.org oldu
Bu oyunun benim için gerçekten büyük anlamı var. Lisede buna tamamen bağımlı hale gelmiştim ve o deneyim hayatımda iz bıraktı.
Drugwars, tutku projem Farmhand için doğrudan ilham kaynağı oldu
Bunu yeniden görmek gerçekten çok güzel
Şimdi yapay zeka çağının gelip herkesin küçük bilgisayarlar olmadan hiçbir şey yapamaz hale geldiğini görünce insan tuhaf bir haklı çıkma hissi yaşıyor
Benim “eğlenceli bilgi”m, programlamaya TI-83+ kılavuzunu okuyarak başlamış olmam
9. sınıf boyunca TI-BASIC ve grafik fonksiyonlarını kullanarak Street Fighter'ın çöp adam versiyonunu yapmıştım.
Ekranda sadece 8 satır göründüğü için sonradan kodu kâğıda yazmaya başlamıştım.
İki kişinin aynı hesap makinesinde oynayabilmesini GOTO ve LABEL ile kurmuş olmamı şimdi düşününce ben de şaşırtıcı buluyorum.
En sevdiğim optimizasyon, kafayı daire yerine altıgen yapmak olmuştu — çünkü sadece 6 çizgi çizmek gerekiyordu, bu da çok daha hızlıydı
9. sınıfta cebir problemlerini adım adım çözen bir program yapmıştım ama sınav sırasında P1 seviyesinde bir bug keşfettim.
Ödevlerde kusursuz çalışıyordu ama sınav sorularında bozuluyordu. Sonuç olarak sınavdan çok debug etmeye zaman harcadım.
Dönüp bakınca o ders matematikten çok edge case öğrenme dersiymiş
Şimdi mobil geliştirme yapıyorum. Kendi yaptığım şeyi cebimde taşıyabiliyor olmak hep hoşuma gitmiştir
İlgili video
Tüm 2.4KB alanı ve bütün değişken yuvalarını tüketmiştim
Bu oyunun kökeni 1984'te DOS'ta başlamıştı
Drug Wars (video game) - Wikipedia
İlgili arşiv
1900'lerin sonlarında 9. sınıftayken bir arkadaşım vardı; TI-82 ile piksel art porno yapabilecek kadar yetenekli bir sanatçıydı
Her sahneyi iki karelik döngülerle oynatarak şaşırtıcı derecede gerçekçi hareket veriyordu
Bu oyun HP 48 serisinde de çalışıyor
HP 48 için Drugwars
Yaşasın RPN
İlk programlama deneyimim TI-83 üzerindeydi.
Derste arkadaşlarıma seçmeli macera oyunu oynattığımı hâlâ çok net hatırlıyorum
TI-83+'ta bu oyunu gerçekten çok oynadım.
O hesap makinesi sayesinde programlamayı öğrendim ve TI-BASIC ile matematik/fen hesaplama programları ve basit oyunlar yaptım.
Şimdi sözdizimini pek hatırlamıyorum ama o zamanlar epey iyiydim
Koddaki “If Zù500” gibi ifadeleri görünce neden ù karakterinin kullanıldığını merak etmiştim
ChatGPT'ye göre TI-BASIC'teki ≤ işaretinin bayt değeri ANSI/Windows-1252'de ù(0xF9) ile aynıymış. Yani mesele bir encoding problemiydi
Vay, tam bir nostalji patlaması
9. sınıfta fen öğretmeni hesap makinesiyle ne yaptığımı sorduğunda, uzaklaştırma alırım diye korkup oyunu hızla sildiğimi hatırlıyorum
Onun yerine Wing Commander Privateer gibi bir oyun yaptığımı gösterince paçayı kurtarmıştım