# Monster Hills Prototype 02

**The Cyclops Cave — Arena Combat · v0.2.0 · 30 Ekim 2026**

Bu prototip, ROOK’u iki boyutlu zemin üzerinde serbestçe hareket ettiren, 50° yukarıdan açılı görünüşe sahip bir PvE aksiyon oyunudur. Üç bağlı mağara odası ve Dev Tepegöz karşılaşması bulunur. Sürekli dikey zıplama ve düşman üstünde yükselme ana oynanıştan kaldırılmıştır.

Ana referanslar: Monster Hills Game Bible v1.0 ve ROOK Character Bible v1.0. Kullanıcının Prototype 02 briefi, bu belgelerdeki eski hareket hipotezlerinin yerine geçer. Tepegözlerin görsel ayrımları, Monster Hills Tepegöz Ailesi v1.6 Final Katalog görseli incelenerek uygulanmıştır. Aşağıdaki sayısal değerler, oda düzenleri ve yetenek davranışları prototip hipotezidir; nihai tasarım kararı değildir.

## Hızlı çalıştırma

Python 3 ile, proje klasöründe:

```sh
python3 -m http.server 8080 --directory dist
```

Tarayıcıda http://localhost:8080 adresini açın. Windows’ta gerekirse `python3` yerine `py` kullanın. Telefon ve bilgisayar aynı ağdaysa telefon tarayıcısında bilgisayarın yerel IP adresini ve 8080 portunu kullanabilirsiniz. Modüller HTTP üzerinden yüklenir; index.html dosyasına çift tıklayarak file:// üzerinden çalıştırmayın.

Bağımlılık kurulumu, API anahtarı, sunucu hesabı veya derleme gerekmez. `dist/` klasörü herhangi bir statik HTTPS sunucusuna konabilir. Yayımlanan Sites bağlantısı mevcut özel erişimini korur; bunun ChatGPT oturum kapısı, oyunun kendi hesap sistemi değildir. Yerel sürümde giriş yoktur.

Node.js 20 veya üzeri ile testler:

```sh
npm test
node --test tests/arena*.test.js
node tests/arena-playthrough.mjs
```

## Telefon kontrolleri

| Kontrol | Kullanım |
| --- | --- |
| Sol hareket çubuğu | Basıp herhangi bir yöne sürükleyin. Merkeze yakın sürükleme daha yavaş hareket eder. |
| Sağ Echo çubuğu | Sürükleyerek 360° nişan alın; basılı tutarken ateş eder. Bırakınca ateş kesilir. |
| Echo merkezine dokunma | Yakındaki görünür düşmana hedef desteğiyle atış yapar. Merkezde basılı tutmak destekli atışı sürdürür. |
| DASH | Hareket yönüne kısa bir saldırılı atılma. Hareket etmiyorsanız nişan yönüne gider. Bekleme süresi üç saniye. |
| SPIN | İsabetler ve yenilen düşmanlarla enerji %100’e ulaşınca kullanılır. Beş saniye boyunca yakındaki düşmanlara hasar verir ve onları iter. |
| Duraklat | Sağ üstteki düğme. Işık = Yem karşılaştırma anahtarı da bu paneldedir. |

İki çubuk ayrı pointer kimliklerini izler: hareket ederken farklı yöne nişan alınabilir. Parmağı kaldırma, pointercancel, pencere odağı kaybı ve sekme gizlenmesi için temizleme/duraklatma vardır. Kontroller ekran kaydırmasını tetiklemez. Dash ve Spin’e erişmek için sağ başparmağın Echo çubuğundan ayrılması gerekir; bu ergonomi gerçek cihaz testinde değerlendirilmelidir.

## Masaüstü kontrolleri

WASD veya yön okları hareket; fare konumu nişan; sol fare tuşunu basılı tutmak ateş; boşluk Bounce Dash; K JetSpin; J hedef destekli atış; Escape duraklatma. J, fareyle daha önce nişan alınmış olsa bile hedef desteğini kullanır. Ses ilk kullanıcı etkileşiminde başlatılır; nota düğmesiyle kapatılır.

## Oyun akışı

Her odada mevcut düşmanları yenin. Oda temizlenince kuzeydeki amber geçit açılır. Geçitten yürüyerek sonraki odaya gidin. Oda bitiminde en fazla 22 can yenilenir. Son odadaki Dev Tepegöz ve iki minik yenilince tur tamamlanır.

| Alan | Karşılaşma | Sınanan tercih |
| --- | --- | --- |
| Uyanan Mağara | 3 minik | Hareket ederken nişan alma; sıçrama uyarısından uzaklaşma |
| Taş Kalkan | 4 minik + 1 muhafız | Kalkanın yanına/arkasına dolanma, Dash ile konum değiştirme |
| Aç Gözler | 5 minik + 2 muhafız | Çevrelenmeyi engelleme, JetSpin zamanı, gölgede baskı azaltma |
| Dev Tepegöz | 1 dev + 2 minik | Kilitlenen ışından ve alan saldırısından kaçarken ateşe devam etme |

Toplam 18 düşman başlangıçta tanımlıdır. Sonraki odalar içine girilene kadar saldırmaz. Işık yeni düşman üretmez. Aynı anda üç düşmana kadar saldırı hazırlığı/aktif saldırı olabilir; diğer düşmanlar hareket etmeyi sürdürür. Bu sınır ilk prototipte okunabilirlik için konmuş deney ayarıdır.

**90 saniye bir süre sınırı değildir.** Ekranda geçen süre gösterilir. Amaç yaklaşık 90 saniyelik bir insan oyuncu turudur; bu hedef henüz kullanıcı testiyle doğrulanmadı. Çok iyi oynayan kişi daha erken bitirebilir, öğrenen kişi daha uzun sürebilir.

## Çatışma ve hasar adaleti

- Düşmana değmek veya gövdesiyle örtüşmek otomatik hasar vermez.
- Minik Tepegöz çevreleme konumu arar; 0,78 saniyelik sabit hedef uyarısından sonra 0,30 saniyelik sıçrama yapar. Hasar yalnızca iniş anında, işaretli bölgede uygulanır. Sıçrama bir kayada takılırsa hasar farklı bir konuma taşınmaz.
- Muhafızın önündeki kalkan Echo ve Dash hasarını engeller. Arka/yan yaklaşım, sersemleme veya saldırı sonrası toparlanma penceresi korumayı aşar. Yerdeki koni, kalkan vuruşunun alanını gösterir.
- Dev, 1,35 saniyelik göz ışını uyarısı ile 1,05 saniyelik alan patlamasını dönüşümlü kullanır. Işın yalnızca hazırlığın erken bölümünde takip eder; son 0,45 saniyede yön kilitlenir. Alan patlamasının merkezi başlangıçta sabittir.
- Dash boyunca gelen açık saldırılar hasar vermez. Dash tek düşmana aynı atılmada bir kez vurur. Duvar ve kayalar geçilemez.
- JetSpin kalabalığa yakın alan hasarı verir ve muhafız kalkanının çevresine yayılır; oyuncuya genel dokunulmazlık vermez. Işın/alan uyarısından kaçınmak yine gereklidir.
- Saldırı sonrası kısa hasar koruması 0,65 saniyedir. Düşmanların hareket, saldırı ve hasar alma durumları ayrı alanlarda tutulur. Echo hasar görseli mevcut saldırı uyarısını kendiliğinden iptal etmez; Dash sersemletmesi iptal eder ve sonraki saldırı yeniden uyarı verir.
- Kayalar atışları ve ışını keser. Çarpışma geometrisi ve görsel ışın menzili aynı yürünebilir dünya geometrisinden hesaplanır.

## Light = Bait

Echo ve Dash parıltıyı artırır; JetSpin boyunca parıltı tamdır. Açık alanda düşman algısı ışığa göre 230–640 dünya birimi arasında değişir. Gölgede parıltı hızlı azalır ve algı mesafesi 110’a iner. Gölge, hâlihazırda başlayan saldırıyı sihirli biçimde iptal etmez; dikkat ve takip zamanla azalır. Hasar alan düşman tepki verir. Dev, mini-boss karşılaşması boyunca aktif kalır; gölge onun saldırı döngüsünü durdurmaz.

Işık = Yem kapalıyken algı mesafesi sabit 380 birimdir. Aynı dünya açık ve kapalı ayarda karşılaştırılabilir. Oyun içi parıltı ve “Gölgede / Parlıyorsun” durumu geri bildirim sağlar.

## Teknik yapı

Modern JavaScript ES modülleri ve Canvas 2D; 120 Hz sabit simülasyon adımı, requestAnimationFrame çizimi, cihaz piksel oranı en çok 2, görsel parçacık sınırı 180. Harici font, resim, oyun çatısı, analiz SDK’sı veya ağ isteği gerektirmez. 50° eğim, ortografik zemin izdüşümüdür; bu sürüm gerçek 3D model/rig içermez.

| Modül | Sorumluluk |
| --- | --- |
| arena/config.js | Deney değerleri, vektörler ve geometrik yardımcılar |
| arena/world.js | Üç oda, koridorlar, boss odası, kayalar, gölgeler, düşman başlangıçları |
| arena/physics.js | Dünya sınırları, kapılar, kayalar, hareket, görüş hattı ve ışın bitişi |
| arena/input.js | Ayrı pointer kimlikli hareket/nişan çubukları, klavye ve fare |
| arena/ai.js | Çevreleme, takip, uyarı, hedef kilidi, aktif saldırı, toparlanma |
| arena/combat.js | Echo, kalkan yönü, Dash, JetSpin, hasar uygulaması |
| arena/game.js | Oda akışı, can/enerji, tur yönetimi ve ölçümler |
| arena/camera.js | 50° izdüşüm, ters izdüşüm, akıcı takip |
| arena/render.js | Kodla çizilen geçici karakterler, zemin, uyarılar ve efektler |
| arena/audio.js | Kısa Web Audio eylem sesleri |
| arena/main.js | Oyun döngüsü, arayüz, duraklatma, JSON indirme |

ROOK: asimetrik tek uçlu kapüşon, fildişi maske, iki amber göz, petrol/lacivert gövde ve kiremit atkı. Tepegözlerin hepsi tek gözlüdür: minik sarı ve kısa dikenli; muhafız mavi, düz konik boynuzlu ve taş kalkanlı; dev kırmızı, büyük kıvrık boynuzlu ve mor kristal vurgulu. Görsellerin renk/silüet ayrımları referansla uyumludur, ayrıntılı üretim varlıkları değildir.

## Deney değerleri

Oyuncu canı 100, hareket hızı 245 birim/s. Echo 18 hasar, 0,32 saniye atış aralığı ve 610 birim menzil. Dash 0,23 saniye, 850 birim/s, 36 hasar, üç saniye bekleme. JetSpin 100 enerji tüketir, beş saniye sürer, 112 birim yarıçapında saniyede 48 hasar verir. Echo isabeti +4, Dash isabeti +10, yenilen düşman +7 enerji. Spin çalışırken enerji birikmez. İlk oda minik canı 54, sonraki odalarda 72; muhafız 144, dev 720. Bunların tümü ayarlanabilir prototip değerleridir.

## Kısa test raporu

30 Ekim 2026 tarihinde **Prototype 02 için 26/26 otomatik test geçti.** `tests/arena.test.js` ve `tests/arena-input.test.js` dosyaları kaynak pakette bulunur. Prototype 01’in 20 regresyon testi ayrı olarak korunur.

Kapsam: eksen/çapraz hız eşitliği; temasın hasarsızlığı; uyarı, hedef kilidi ve tek hasar; kalkanın yönü; manuel/hedef destekli atış; mermi çarpışması; kaya/kapı sınırları; Dash kaçınması ve bekleme; JetSpin süresi ve dokunulmaz olmaması; ışık/gölge algısı; sabit düşman sayısı; eşzamanlı saldırılar; ayrı AI durumları; boss koni/ışın/alan davranışları; duraklatma; 90 saniyede zorunlu bitiş olmaması; kamera dönüşümü; dört alanın tamamlanması; yeniden başlatma. Giriş testleri, iki parmağın bağımsızlığını, iptal/odak kaybı temizliğini, kısa dokunuşun kaybolmamasını ve J hedef desteğini kapsar.

**Uçtan uca simülasyon:** `tests/arena-playthrough.mjs`, oyuncuya ek can, hasar veya dokunulmazlık vermeden normal hareket/nişan/atış/yetenek girdileri gönderir. İki farklı dolaşım yönüyle bütün 18 düşman yenildi ve dört alan tamamlandı: 46,43 ve 50,56 saniye. Her iki turda da Echo, Dash, JetSpin ve aynı anda üç saldırı görüldü. Bu bot doğrudan oyun durumunu okuyarak isabetli karar verir; süreleri insan oyuncu sonucu veya 90 saniye hedefinin doğrulaması değildir.

**Tarayıcı kontrolü:** Masaüstü Chrome’da sahne, hareket ve Echo çalıştırıldı. 390×844 ve 320×568 iframe telefon görünümlerinde giriş, Echo ve Dash kontrolleri denendi. Her iki görünümde belge boyutları ekran boyutlarıyla eşit; yatay/dikey taşma yok. Oda ve can göstergeleri, nişan çizgisi, saldırı işaretleri ve duraklatma paneli görüntülendi. İki pointer’ın birlikte çalışması birim testinde doğrulandı; fiziksel telefonda iki başparmak testi yapılmadı.

## Bilinen sınırlar ve sonraki test

1. Gerçek iOS Safari / Android, düşük donanım, ekran çentiği, ses gecikmesi ve uzun oturum FPS ölçümü henüz yapılmadı. Tarayıcı görünümü fiziksel telefon testinin yerine geçmez.
2. Yaklaşık 90 saniyelik tipik tur, eğlence, öğrenilebilirlik ve yetenek tercihleri kullanıcı testi bekliyor. İlk 5–8 oyuncuda bitirme süresi, boş atış oranı, Dash/Spin kullanımı ve alınan hasar birlikte ölçülmeli.
3. Miniklerde yerel yön değiştirme/kaya kaçınması kullanılır; genel yol bulma ağı yoktur. Karmaşık engel düzenlerinde takılma riski vardır. Bu sürümde iki basit kaya/oda ile sınırlıdır.
4. JetSpin, kalkanlı kalabalıkta güçlüdür. Hasar ve enerji dolumu, manuel nişan ile hedef desteğinin karşılaştırıldığı turlarda dengelenmelidir.
5. Kısa telefonlarda görünür arena alanı azalır. Kontroller sığsa da saldırı ön izleme mesafesi ve küçük göz/boynuz okunabilirliği gerçek cihazda ayrıca sınanmalıdır.
6. Gölge mekaniği mevcut düşmanların dikkatini etkiler; oyuncunun bunu isteyerek kullanıp kullanmadığı henüz gözlemlenmedi. Açık/kapalı koşulları farklı sırayla test edin.

Tur raporu JSON olarak indirilebilir: süre, odalar, Echo/manual atışlar, isabet, kalkan blokları, Dash, Spin, kaçınmalar, hasar, hareket mesafesi, gölge süresi, eşzamanlı saldırı zirvesi ve zaman damgalı olaylar. Veriler yalnızca bellekte tutulur, sunucuya gönderilmez. Yenilemede silinir. Kullanıcı hesabı, reklam, mağaza, XP, günlük görev veya kalıcı ilerleme eklenmedi.

## Prototype 01 arşivi

Önceki sürüm `dist/prototype-01/index.html` altında oynanabilir. Önceki kaynak ZIP’i korunur. `dist/src/` eski fizik testleri için tutulmuştur; aktif oyun `dist/arena/` modüllerini kullanır. Git geçmişindeki v0.1.1 commit’i de korunur. Game/Character Bible belgeleri değiştirilmedi.
