# JUJUR JUNGLE Main: https://jujur-jungle-petualangan-2026.glossysong11.chatgpt.site Game sudah diterbitkan melalui Sites dan akses publik sudah diizinkan oleh pemilik. Tautan ini adalah situs produksi, bukan localhost. Pemeriksaan permainan produksi dari lingkungan pengembangan dibatasi kebijakan jaringan, sehingga pengujian multiplayer yang disebutkan di bawah dilakukan pada server lokal. ## Main bersama empat teman 1. Buka situs, pilih **Buat Ruang**, dan isi nama. 2. Bagikan tautan situs dan kode enam karakter kepada empat teman. 3. Setiap teman membuka situs di perangkat masing-masing, memilih **Gabung Ruang**, lalu memasukkan nama dan kode. 4. Pembuat menekan **Mulai Petualangan** setelah lima slot terisi. 5. Saat giliranmu, tekan **Lempar Dadu**, lalu pilih melangkah atau lempar ulang. Ikuti pilihan pembayaran/mundur jika bertemu pemain lain. Untuk mencoba sendiri, pilih **Main di Satu Perangkat**. Masukkan 2–5 nama dan bergantian memakai layar yang sama. Mode ini tidak membutuhkan teman online. Di HP, tekan **Perbesar Peta**, lalu geser papan untuk membaca petak. ## Salinan offline dan kode sumber Unduh versi offline dari tautan pada bagian bawah situs, lalu buka file HTML dengan browser. Tombol online dinonaktifkan di salinan ini; pilih **Main di Satu Perangkat**. Tidak perlu memasang aplikasi atau paket tambahan. Untuk menjalankan seluruh kode sumber: 1. Pasang Node.js versi 22 atau lebih baru. 2. Ekstrak ZIP kode sumber, buka terminal di folder `jujur-jungle`. 3. Jalankan `npm start`, lalu buka `http://localhost:3000`. 4. Pada Wi-Fi yang sama, perangkat lain dapat membuka `http://IP-KOMPUTER:3000`. Firewall mungkin perlu mengizinkan port 3000. Localhost hanya menunjuk perangkat sendiri; alamat Wi-Fi bukan tautan internet publik. Server menyimpan ruang pada folder `data/`; pertahankan folder ini agar restart server tidak menghilangkan progres. Tidak ada dependensi npm tambahan yang perlu dipasang. `npm run build` menghasilkan Worker mandiri di `dist/server/index.js`. Untuk pengujian, jalankan build lalu `node test/game.test.mjs`. ## Aturan versi pertama - 50 petak, START sebelum 1, dan FINISH pada 50. Giliran mengikuti urutan masuk. - Bekal awal **5 token** sesuai permintaan, menggantikan 10 pada PDF. - Pion belum bergerak setelah dadu pertama. Pemain boleh membayar **2 token** untuk lempar ulang sekali. Hasil kedua wajib langsung digunakan. - Tangga **4→13, 18→29, 33→45**; goa **16→7, 31→22, 47→36**. - Jebakan babi hutan di **11, 26, 42** menghilangkan tepat satu giliran. Tekan **Lewati Giliran** untuk menyelesaikannya. - Efek tangga/goa diselesaikan sebelum pertemuan di tujuan. - Pada petak terisi, bayar **1 token** kepada penghuni yang lebih dahulu tiba, atau mundur. Sesuai permintaan, bekal kurang dari **2 token wajib mundur**, meskipun biaya bertahan hanya 1. - Penghuni pertama memilih jarak mundur **1–3 petak**, terendah START. Mundur tidak memicu efek atau pembayaran baru. START dan FINISH bebas pembayaran. Token tidak negatif. - Permintaan memuat aturan finis yang bertentangan. Versi ini memilih ketentuan terakhir: **harus tepat mencapai 50; kelebihan langkah memantul ke belakang**. Pemain pertama menjadi juara, sementara permainan berlanjut sampai **semua pemain finis**. - Online menunggu **5 pemain** sesuai ketentuan lobi; satu perangkat mendukung **2–5 pemain**. Konfigurasi aturan terdapat pada `CONFIG` di `engine.mjs`. ## Identitas dan koneksi Identitas online disimpan di browser, sedangkan posisi, token, giliran, dadu, dan keputusan diproses serta disimpan di server. Situs produksi menggunakan bucket R2 dengan pemeriksaan versi/ETag untuk menolak aksi ganda. Server tidak menerima posisi atau hasil dadu buatan klien. Muat ulang atau buka kembali situs di browser yang sama untuk menyambung kembali. Jangan menghapus data situs jika ingin mempertahankan identitas. Sinkronisasi sekitar setiap 2,5 detik; status terputus dikenali setelah sekitar 15 detik. Aksi dijeda bila pemain yang harus bertindak terputus, termasuk penghuni yang harus memilih jarak mundur. Tombol **Ulangi Permainan** dan **Kembali ke Beranda** berada di bagian bawah kolom permainan, setelah catatan perjalanan. Hanya pembuat ruang bisa reset online, dengan konfirmasi. Reset kembali ke lobi dengan nama dan identitas yang sama. Versi pertama belum mendukung penggantian pemain yang keluar, pemindahan pembuat ruang, atau pembersihan ruang otomatis. Jika pemain tidak kembali, buat ruang baru. ## Visual dan batasan Teks, moodboard, dan sketsa PDF telah dibaca. Latar papan memakai ilustrasi hutan orisinal bergaya permainan papan vintage: warna kertas hangat, garis tinta, sungai, jembatan, bebatuan, dan hewan buas. Gambar referensi digunakan sebagai arah gaya; gambar dan jalur bernomornya tidak disalin. Aset gambar ditanam secara lokal, sementara petak, tangga, goa, jebakan, dan pion tetap berupa SVG/CSS. Goa memakai ilustrasi mulut gua batu berukuran besar; jebakan memakai ilustrasi rahang besi bergigi. Angka berada di pojok kiri atas petak. Petak saling bersentuhan dengan garis pembatas bersama, termasuk pada bagian jalur yang melengkung. Pepohonan membingkai tepi papan; ruang tengah diisi bentang alam dan hewan, dengan petak tetap terbaca. Dadu berupa kubus 3D enam sisi yang dilempar di tengah papan; pion melangkah sekitar 0,48 detik per petak. Pion diperbesar dan memiliki label nama pemain di atasnya. Setelah berputar, sisi hasil dadu menghadap lurus ke layar. Judul memakai font kustom **Jujur Adventure** dengan bentuk huruf bersudut, ekor J, gradasi emas-merah, tekstur, dan bayangan timbul mengikuti gambar referensi judul. Berkas font orisinal dan skrip pembuatnya disertakan di kode sumber; font ditanam dalam CSS agar tetap tersedia saat offline. ## Pengujian **13 pengujian otomatis lulus**: giliran 2–5 pemain, dadu/lempar ulang, pengurangan dan batas token, seluruh tangga/goa, tepat satu giliran hilang, pembayaran ke penghuni pertama, beberapa penghuni, mundur tanpa rangkaian efek, START, finis memantul, peringkat sampai semua finis, lima identitas online, pemulihan identitas, disconnect/reconnect, reset khusus pembuat, penolakan aksi di luar giliran, aksi ganda/versi lama, serta aset Worker. Pengujian API Worker memakai simulasi penyimpanan dengan kontrak ETag R2. **Lulus pengujian Chromium pada server lokal**: lima konteks browser independen membuat/gabung ruang; dadu sama; perpindahan tersinkron; pemain lain tidak bisa bertindak; refresh mempertahankan identitas. Mode satu perangkat dapat dimainkan dan dipulihkan setelah refresh. Tidak ditemukan kesalahan JavaScript. Tampilan laptop 1440 piksel dan HP 390 piksel diperiksa tanpa luapan halaman mendatar. Publikasi Worker dan akses publik telah dikonfirmasi oleh layanan Sites. Pengujian permainan nyata pada bucket R2 produksi dan koneksi teman melalui internet belum diverifikasi karena domain produksi diblokir oleh kebijakan jaringan lingkungan pengembangan. Tidak ada klaim bahwa pengujian lokal tersebut membuktikan seluruh jalur produksi. Belum diuji untuk semua browser/HP, pembaca layar, atau beban pengguna besar. ## Struktur kode - `engine.mjs`: konfigurasi dan mesin aturan. - `api.mjs`: ruang, identitas, validasi, giliran, dan aksi server. - `server.mjs`: server Node.js dengan penyimpanan disk untuk lokal/LAN. - `public/`: HTML, CSS, papan SVG, dan animasi. - `build.mjs`: bundel Worker dan aset unduhan. - `.openai/hosting.json`: identitas Site dan binding R2 `BUCKET`. - `test/game.test.mjs`: pengujian mesin dan API Worker. Worker membutuhkan bucket R2 pada binding `BUCKET`; tidak memakai memori Worker untuk menyimpan ruang. Binding ini sudah dideklarasikan pada situs yang diterbitkan.