Trivia Drop

Fast trivia duels where the floor decides the loser.

Trivia Drop is a Minecraft Java Fabric party game where players race to the correct colored zone for each question before the wrong floor collapses. It is designed for 2–16 players, with short matches, highly readable UI, and a content pipeline that keeps every question objective, source-backed, and easy to expand. The v2 product focus is a scalable multi-category question system, reliable server-authoritative game logic, and cinematic presentation for streams and short-form video.

Business Goals

  • Reach a stable v1.0 release with at least 650 validated questions across 12 categories within 10 weeks.
  • Achieve 70%+ of playtest sessions reaching match completion without a crash or manual admin intervention.
  • Increase repeat-session rate to 50%+ within 30 days of first play for test servers.
  • Maintain question validation pass rate above 95% at build time and reload time.
  • Support 16-player lobbies with less than 200 ms round-state sync delay on a typical hosted Fabric server.

User Goals

  • Let hosts start a match in under 60 seconds with one command and minimal setup.
  • Help players understand each round instantly through color-coded zones, clear timers, and simple question text.
  • Make every match feel fair by guaranteeing one verifiable correct answer and consistent elimination rules.
  • Keep matches short, exciting, and easy to stream with visible climactic drop moments.
  • Allow server owners to refresh question packs without restarting the server.

Non-Goals

  • No free-text or opinion-based trivia questions in the core release.
  • No client-side answer reveal before the drop cam or any other anti-cheat bypass.
  • No full custom launcher or standalone game outside Minecraft Java Edition.
  • No marketplace, economy, or long-term progression system in v1.0.

Server Host Raka, 27 - Raka runs a small Minecraft community server and wants a party mini-game that can be launched quickly for events. He needs something stable, easy to configure, and fun for mixed-skill players.

Server Host Raka, 27

  • As a server host, I want to start a match with one command, so that I can run events without building a complex lobby system.
  • As a server host, I want to reload question packs without restarting, so that I can fix content quickly during testing.
  • As a server host, I want clear logs and stats, so that I can diagnose broken questions or balancing issues.

Streamer Naya, 23 - Naya creates Minecraft content and needs games that produce obvious, funny moments on camera. She cares about fast pacing, readable visuals, and clear tension before the drop.

Streamer Naya, 23

  • As a streamer, I want cinematic camera transitions and big on-screen UI, so that viewers can follow the action instantly.
  • As a streamer, I want rounds to finish in 4 to 8 minutes, so that I can fit multiple matches into one video.
  • As a streamer, I want answer explanations after the drop, so that the audience understands why a player fell.

Casual Player Dimas, 15 - Dimas joins with friends and may not know every trivia topic. He needs the rules to be obvious, the UI to be readable, and the game to stay fair even if he is not a trivia expert.

Casual Player Dimas, 15

  • As a casual player, I want questions with one clear correct answer, so that I never lose because of ambiguity.
  • As a casual player, I want the correct zone to be easy to identify, so that I can react quickly under pressure.
  • As a casual player, I want to spectate if I join late, so that I do not break the current match.

Match Flow and Game State · High priority

  • The server must control the entire match lifecycle from lobby to winner screen with deterministic phases and cleanup.
  • Support the full phase sequence: idle, lobby, intro cam, category reveal, question, thinking, drop cam, reset, winner cam.
  • Prevent players from moving outside intended behavior during locked cutscenes and restore controls after stop or match end.
  • Handle disconnects, late joins, and arena resets without corrupting the active match.
  • End the match when one player remains or when the configured sudden death rule resolves the final tie.

Question Bank and Validation · High priority

  • The product needs a data-driven question system with strict validation so every round is fair and maintainable.
  • Load questions from per-category JSON files with unique IDs and source-backed explanations.
  • Validate question length, option count, difficulty, type, and correct answer bounds at load and reload time.
  • Reject duplicate or malformed content and log warnings for skewed answer-position distribution.
  • Support multiple modes including mixed, single-category, voting, meme-only, and future marathon rules.

Round Execution and Elimination Logic · High priority

  • Each round must present one question, allow players to choose zones, and collapse incorrect zones at the right time.
  • Randomize option order at runtime while preserving the correct answer mapping.
  • Treat players on the center line or outside zones as incorrect when time expires.
  • Support TRUE_FALSE rounds with two active zones and hidden unused zones.
  • Allow push-stick interactions with cooldown without enabling grief that breaks the match state.

Client UI, Camera, and Audio · Medium priority

  • The client should render a highly legible, console-style presentation that feels polished and stream-friendly.
  • Render custom HUD assets for banners, option cards, countdown, category badge, and result panel.
  • Play synchronized sounds for intro, category reveal, thinking, countdown, correct answer, drop, and winner moments.
  • Use smooth camera transitions for intro and drop scenes with an accessibility option to reduce motion.
  • Keep the HUD readable at GUI scales 1 through 4 and across common resolutions.

Administration and Telemetry · Medium priority

  • Server owners need basic control, diagnostics, and analytics to keep the experience healthy over time.
  • Provide commands for start, stop, setspawn, reload, and stats.
  • Track match counts, category usage, question misses, and elimination outcomes.
  • Expose simple configuration for player limits, thinking duration, cooldowns, and language.
  • Support logs that help identify bad content, missing assets, or sync failures.

First Match Setup

  • Install the Fabric mod on a Minecraft Java server and restart once.
  • Place or confirm the arena spawn point with the admin command.
  • Load or refresh the question bank and validate all category files.
  • Invite 2 to 16 players into the lobby and start a match with one command.
  • Time to value target: first playable match in under 10 minutes after install.

1. Lobby and Match Start

  • The host starts the game and the server prepares the arena, players, and state machine.
  • If the player count is below the minimum, the match stays in lobby state and shows a friendly warning.
  • If the arena is misconfigured, the command fails safely and logs the missing setup point.
  • All players are synced to the same server-authoritative match state before the cutscene begins.

2. Intro and Category Reveal

  • A short cinematic sequence introduces the round and reveals the current category.
  • Controls are locked only during the intro sequence and restored automatically afterward.
  • The category badge, title, and sound cue must appear at the same time on all clients.
  • If motion reduction is enabled, use a shorter camera movement and reduced zoom.

3. Question Display and Movement

  • The question appears, options render on the four zones, and players move to the answer they believe is correct.
  • If the round is TRUE_FALSE, show only two active choices and hide the other two zones visually.
  • Shuffle option positions every round so the correct answer cannot be predicted by color.
  • Show a visible countdown and subtle danger cues when time is running low.

4. Drop and Elimination

  • When the timer ends, the wrong floor disappears and the correct answer is revealed.
  • Players standing in wrong zones or on the boundary are eliminated for that round.
  • Play the correct-answer explanation panel after the drop so viewers understand the outcome.
  • If all remaining players are wrong or all are correct, apply the special round-resolution rules without soft-locking.

5. Reset and Winner Screen

  • The arena resets between rounds or crowns the final winner at match end.
  • Restore glass or floor blocks quickly enough to avoid server lag spikes.
  • If only one player remains, trigger winner camera, fireworks, and summary stats.
  • If the host stops the match mid-round, restore inventory, camera, and movement cleanly.

Advanced and Future-Ready Features

  • Voting-based category selection before a round starts.
  • Single-category and meme-only match modes for themed events.
  • Question de-duplication across a match and recent-match history to reduce repetition.
  • Per-category balancing controls and future support for estimate-style question types.
  • Streamer-friendly presentation settings including reduced motion and faster cutscenes.

Visual and Accessibility Principles

  • Use bold, high-contrast colored zones that remain readable at a glance.
  • Keep all critical text within short, card-friendly character limits.
  • Design for 2x source assets rendered at half scale for crisp edges in-game.
  • Preserve consistent color mapping across the match so players learn the interface quickly.
  • Use safe motion timing and optional reduced-motion behavior for accessibility.
  • Ensure HUD elements do not overlap the vanilla hotbar, crosshair, or chat in common resolutions.

Raka wants a minigame for his community server that can be launched quickly, works for mixed-skill players, and produces funny moments on stream. He used to rely on ad hoc party games, but players would get bored, matches would drag, and unclear questions caused arguments.

With Trivia Drop, Raka loads a validated question pack, sets the arena once, and starts a match with a single command. The server handles the whole flow: category reveal, question display, timer, drop, elimination, and winner camera, so he can focus on hosting instead of babysitting the game.

After a few rounds, players understand the rules instantly and viewers can follow the action because the UI is clear and the outcomes are dramatic. Raka gets a repeatable event format that is easy to update with new questions, keeps the match fair, and turns his server into a place people want to return to.

User-Centric Metrics

  • Average time from match start to first round under 90 seconds.
  • At least 85% of test players report the rules are understandable after one round.
  • Round UI readability score of 4.5 out of 5 or higher in playtests.
  • Less than 5% of rounds end with players confused by question wording or zone mapping.
  • Average match completion rate above 70% in sessions with 4 or more players.

Business Metrics

  • 30-day repeat play rate above 50% on test servers.
  • At least 3 community servers actively running the mod within the first month of release.
  • Question reload usage in at least 40% of admin sessions, showing real content iteration.
  • Reduce host setup/support time by 60% compared with manual mini-game administration.

Technical Metrics

  • Server uptime of 99.5% or higher during live play sessions.
  • Question and phase sync latency under 200 ms for typical hosted servers.
  • No critical validation failures on release builds with the approved question bank.
  • Crash-free match completion rate above 98% in internal QA.

Tracking Plan

  • match_started
  • category_revealed
  • question_rendered
  • player_zone_selected
  • countdown_started
  • round_resolved
  • player_eliminated
  • match_winner_declared
  • questions_validation_failed
  • question_reload_completed

Technical Needs

  • Minecraft Java Edition mod built on Fabric API with a server-authoritative state machine.
  • Java 17 or newer runtime and a clean modular package structure for commands, game logic, networking, and client rendering.
  • JSON-based content loading for questions, categories, and game configuration.
  • Custom packet handling for phase sync, question sync, zone sync, and cutscene control.
  • Client-side HUD rendering with custom textures, fonts, and animation timing.
  • Automated validation on startup and on reload to catch malformed content before it reaches gameplay.
  • Logging and stats storage suitable for lightweight server administration, such as flat files or SQLite for small deployments.

Integration Points

  • Fabric API and Minecraft server commands/events.
  • Minecraft resource and data packs for language, textures, sounds, and question JSON.
  • Optional Discord webhook or bot integration for announcing match starts and winners.
  • Optional analytics sink such as PostHog, Mixpanel, or a simple self-hosted event collector.
  • YouTube/TikTok-friendly audio asset pipeline using royalty-free or original sound effects.

Data Storage & Privacy

  • Store player identifiers only as needed for match stats and admin visibility, and minimize retained personal data.
  • Do not send question answers to the client before the round resolution to avoid cheating.
  • Document any telemetry collection and provide a way to disable non-essential analytics on private servers.
  • Follow GDPR and CCPA principles for configurable data retention, deletion requests, and transparent logging.
  • Treat question sources and explanations as content metadata; keep sensitive server logs local by default.

Scalability & Performance

  • Keep round-state broadcasts compact so 16-player lobbies remain responsive on low-to-mid-tier hosts.
  • Avoid expensive world edits by precomputing arena block restoration and using batch updates where possible.
  • Cache question pools in memory after validation to reduce file access during live play.
  • Throttle particle and sound spam during drop moments to prevent client frame drops on weaker machines.

Potential Challenges

  • Question ambiguity could trigger player disputes; mitigate by enforcing single-answer validation and human review before release.
  • Mixins may conflict with other mods; mitigate by using minimal injection points and testing against common HUD and camera mods.
  • Cutscenes may cause motion discomfort; mitigate by adding reduced-motion configuration and shorter camera paths.
  • Repeated content could reduce replay value; mitigate by enforcing anti-repeat rotation and a larger question bank.
  • Server lag during arena resets could interrupt pacing; mitigate by batching block updates and benchmarking on smaller hosts.

Team & resourcing - Small team - 2 engineers, 1 designer, part-time PM, and optional content writer/QA support

Phase 1: Core Match Loop · Weeks 1-3

  • Command system for start, stop, setspawn, reload, and stats
  • Server-authoritative match state machine
  • Question loader and validator for all category JSON files
  • Basic elimination logic and arena reset without custom UI
  • Playable chat-mode prototype with at least one full match flow

Phase 2: Content and Balance · Weeks 3-6

  • Validated question bank across all 12 categories
  • Question picker with anti-repeat logic and difficulty filtering
  • Mode support for mixed, single category, voting, and meme-only
  • Basic admin stats and validation logs
  • Internal playtest pass with balance fixes and edge-case handling

Phase 3: Client Presentation · Weeks 5-8

  • Custom HUD assets for banner, cards, timer, countdown, badge, and result panel
  • Camera transitions for intro and drop scenes
  • Sound events for category reveal, countdown, correct answer, drop, and win
  • Accessibility option for reduced motion
  • Multi-resolution UI pass and performance tuning

Phase 4: Release Hardening · Weeks 8-10

  • Crash fixes, latency testing, and compatibility pass
  • README, install guide, and server admin documentation
  • Final content review and source checks for the question bank
  • Release build as a stable .jar with config defaults and language files

Paste this into Cursor, Bolt, Lovable, or v0 to start building.

Build a Minecraft Java Fabric mod called Trivia Drop, a server-authoritative party trivia mini-game for 2-16 players.

Core gameplay:
- Players start in a lobby, then enter a match loop with phases: lobby, intro cutscene, category reveal, question, thinking, drop resolution, reset, winner cam.
- Each round shows one trivia question with 4 colored answer zones: Red=A, Blue=B, Green=X, Yellow=Y.
- Players run to the correct zone before the timer ends; wrong zones collapse to air and eliminate players.
- Support TRUE_FALSE rounds with only 2 active zones, plus mixed-category and single-category modes.
- The server is authoritative: do not send the correct answer to clients until the drop resolution phase.

Primary screens/UI:
- Custom question banner at top center with round number and category badge.
- Four large option cards at the bottom replacing the hotbar area.
- Timer bomb icon top right with urgent countdown in the last 3 seconds.
- Zone indicator above the hotbar showing the currently active answer zone.
- Drop cam result panel showing the correct answer, explanation, and source after the floor collapses.
- Winner screen with fireworks and summary stats.

Data model:
- Question JSON files stored at data/triviadrop/questions/<category>.json.
- Question fields: id, type, difficulty, question, options, correct, explanation, source, tags, deprecated optional.
- Categories include umum, geografi, sains, matematika, sejarah, bahasa, teknologi, minecraft, olahraga, budaya, hiburan, meme62.
- Add a QuestionManager, QuestionValidator, and QuestionPicker that loads, validates, randomizes, and avoids repeats across the current match and recent matches.

Required systems:
- Commands: /trivia start [mode] [category], /trivia stop, /trivia setspawn, /trivia reload, /trivia stats.
- Networking packets for phase sync, question sync, zone sync, cutscene sync, and round result sync.
- Client-side camera controller, HUD renderer, and simple animations.
- Config file for player limits, thinking duration, cooldowns, language, and reduced-motion option.
- Basic stats logging for matches, categories, eliminations, and validation failures.

Tech stack:
- Java 17, Fabric API, Fabric Loader, Minecraft client/server mixins, Gson for JSON parsing, and standard Minecraft resource/data pack assets.
- Use clean package structure: command, config, question, game, network, client, mixin.
- Keep implementation lightweight and performant for small hosted servers.

Deliver a working MVP first with a simple arena reset and match loop, then add polished HUD, cutscenes, audio hooks, and validation-friendly content loading.

Business Idea

# Trivia Death Drop — Master Plan v2 *Game Design, Bank Soal Multi-Kategori & Technical Blueprint • Fabric Mod • Versi 2.0 • 24 Oktober 2026* --- ## 0. Ringkasan Eksekutif | Item | Isi | | --- | --- | | Nama | Trivia Death Drop | | Platform | Minecraft Java • Fabric API (arsitektur Client–Server) | | Genre | Party game / battle royale trivia (ala Mario Party, WarioWare) | | Premis | Soal muncul → pemain berlari ke kuadran warna jawaban → lantai kuadran yang salah runtuh → pemain terakhir menang | | Pemain | 2–16 (ideal 4–10 untuk konten video) | | Durasi 1 match | ±4–8 menit | | Perubahan utama v2 | Bank soal tidak lagi hanya meme +62, tetapi 11 kategori dengan jawaban objektif, tingkat kesulitan, mode permainan, dan pipeline kualitas soal | ### Pilar Desain 1. **Adil** — setiap soal punya tepat satu jawaban benar yang bisa diverifikasi. 2. **Chaos terkontrol** — dorong-dorongan seru, tapi hasil akhir ditentukan pengetahuan. 3. **Juicy** — UI, kamera, dan suara terasa seperti game konsol. 4. **Mudah dikonten-kan** — momen jatuh selalu terlihat jelas dari kamera sinematik. 5. **Mudah diperluas** — soal dan kategori berbasis data (JSON/datapack), bukan hardcode. --- ## 1. Sistem Kategori & Bank Soal (Fitur Baru) ### 1.1 Daftar Kategori | ID | Kategori | Cakupan | Target soal awal | | --- | --- | --- | --- | | `umum` | Pengetahuan Umum | Fakta dunia, rekor, benda sehari-hari | 60 | | `geografi` | Geografi | Ibu kota, gunung, sungai, selat, benua | 60 | | `sains` | Sains & Alam | Fisika, kimia, biologi, astronomi | 60 | | `matematika` | Matematika & Logika | Hitungan cepat, pola bilangan, persen | 60 | | `sejarah` | Sejarah | Sejarah Indonesia & dunia | 60 | | `bahasa` | Bahasa Indonesia | Ejaan baku, sinonim, antonim, peribahasa | 50 | | `teknologi` | Teknologi & Internet | Singkatan, perangkat, pemrograman dasar | 50 | | `minecraft` | Minecraft & Gaming | Mob, blok, crafting, dimensi, sejarah game | 60 | | `olahraga` | Olahraga | Aturan, turnamen, atlet, rekor | 50 | | `budaya` | Budaya & Kuliner Nusantara | Makanan, tarian, alat musik, rumah adat | 60 | | `hiburan` | Seni & Hiburan | Film, musik, tokoh seni (fakta tetap) | 40 | | `meme62` | Meme & Internet +62 | Slang dan istilah viral dengan kunci jawaban jelas | 40 | **Total target rilis: ±650 soal** (cukup untuk puluhan match tanpa pengulangan). Target akhir: 1.000+. ### 1.2 Aturan Soal Objektif (WAJIB lolos semua) - Hanya **satu** jawaban benar yang bisa dibuktikan dengan sumber (KBBI, buku pelajaran, situs resmi, dokumentasi). - **Bukan opini** (“makanan terenak”, “lagu terbaik”). - **Bukan data yang cepat basi** (“presiden sekarang”, “harga terbaru”). Jika harus, beri `validUntil` atau hindari. - Teks soal **maksimal ±90 karakter**, jawaban **maksimal ±22 karakter** agar muat di kartu. - Tiga pilihan salah harus **masuk akal** (distraktor yang meyakinkan), bukan jawaban konyol. - Posisi jawaban benar **diacak saat runtime**, dan bank soal dijaga seimbang (±25% per warna). - Wajib ada kolom `explanation` singkat (untuk ditampilkan di layar sesudah lantai runtuh). - Soal meme +62 wajib punya sumber/asal viral yang bisa dicek, supaya tetap objektif. ### 1.3 Tipe Soal | Tipe | Cara main | Zona aktif | | --- | --- | --- | | `MCQ4` | Pilihan ganda A/B/X/Y (standar) | 4 kuadran | | `TRUE_FALSE` | Benar atau Salah | 2 kuadran (Biru = Benar, Merah = Salah); 2 sisanya dihilangkan dari awal | | `ESTIMASI` *(fase lanjut)* | Pilih rentang angka terdekat | 4 kuadran berisi rentang | ### 1.4 Kurva Kesulitan & Waktu per Ronde | Ronde | Kesulitan | Waktu berpikir | Catatan | | --- | --- | --- | --- | | 1–3 | Mudah | 10 detik | Pemanasan, sedikit yang gugur | | 4–6 | Sedang | 9 detik | Mulai ada eliminasi | | 7–9 | Sulit | 8 detik | Soal lintas kategori | | 10+ | Sudden Death | 6–7 detik | Soal tersulit + Tongkat Senggol cooldown lebih pendek | Distribusi bank: **40% mudah • 40% sedang • 20% sulit**. ### 1.5 Contoh Soal per Kategori **Geografi** - Ibu kota Australia? → Canberra (distraktor: Sydney, Melbourne, Perth) - Gunung tertinggi di Indonesia? → Puncak Jaya - Sungai terpanjang di Indonesia? → Kapuas **Sains & Alam** - Planet terbesar di tata surya? → Jupiter - Gas terbanyak di atmosfer Bumi? → Nitrogen - Organel “pembangkit tenaga” sel? → Mitokondria **Matematika & Logika** - 15% dari 200 = ? → 30 - Pola 2, 4, 8, 16, … angka berikutnya? → 32 - Akar kuadrat dari 169? → 13 **Sejarah** - Proklamasi kemerdekaan Indonesia dibacakan tahun? → 1945 - Penjahit Bendera Pusaka? → Fatmawati - Sumpah Pemuda diikrarkan tahun? → 1928 **Bahasa Indonesia** - Bentuk baku yang benar? → apotek (bukan apotik) - Antonim kata “rajin”? → malas **Teknologi** - CPU adalah singkatan dari? → Central Processing Unit - Bahasa pemrograman utama Minecraft Java Edition? → Java **Minecraft & Gaming** - Bahan utama membuat portal Nether? → Obsidian - Boss utama dimensi The End? → Ender Dragon - Nyawa maksimal pemain secara default? → 20 HP (10 hati) **Olahraga** - Jumlah pemain sepak bola per tim di lapangan? → 11 - Juara Piala Dunia FIFA 2022? → Argentina - Olimpiade diselenggarakan setiap berapa tahun? → 4 tahun **Budaya & Kuliner** - Rendang berasal dari? → Sumatera Barat (Minangkabau) - Tari Kecak berasal dari? → Bali - Angklung berasal dari? → Jawa Barat **Seni & Hiburan** - Band pelantun “Bohemian Rhapsody”? → Queen **Meme & Internet +62** - “Mager” singkatan dari? → Malas gerak - “Gaskeun” kurang lebih berarti? → Ayo lakukan / ayo berangkat > Semua contoh di atas wajib tetap diverifikasi ulang saat dimasukkan ke bank resmi (lihat pipeline di Bagian 8). ### 1.6 Mode Permainan | Mode | Deskripsi | Command | | --- | --- | --- | | Campuran *(default)* | Kategori diacak tiap ronde | `/trivia start` | | Satu Kategori | Semua soal dari satu kategori | `/trivia start kategori geografi` | | Voting Kategori | Sebelum ronde, pemain voting kategori lewat zona | `/trivia start voting` | | Meme Only | Hanya `meme62` (edisi +62 klasik) | `/trivia start meme62` | | Marathon | Tanpa eliminasi, skor tertinggi menang *(opsional, fase lanjut)* | `/trivia start marathon` | ### 1.7 Format Data (`data/triviadrop/questions/<kategori>.json`) ```json { "category": "geografi", "questions": [ { "id": "geo_001", "type": "MCQ4", "difficulty": "EASY", "question": "Ibu kota Australia?", "options": ["Canberra", "Sydney", "Melbourne", "Perth"], "correct": 0, "explanation": "Canberra adalah ibu kota; Sydney hanya kota terbesar.", "source": "https://...", "tags": ["ibu-kota", "benua-australia"] } ] } ``` Saat dimuat, `correct` diacak ke posisi warna lewat `QuestionPicker` — indeks 0 di file **tidak** berarti Merah. ### 1.8 Logika Pemilihan Soal (`QuestionPicker`) 1. Filter berdasarkan mode, kategori, dan tingkat kesulitan ronde. 2. Buang soal yang sudah keluar di match ini (dan 3 match terakhir bila memungkinkan). 3. Hindari 2 ronde berturut-turut dari kategori yang sama (mode Campuran). 4. Acak urutan opsi; catat posisi warna benar. 5. Jika bank habis → reset riwayat dan kirim peringatan di log server. --- ## 2. Struktur Direktori (Diperbarui) ```text trivia-death-drop/ ├── src/main/java/com/myvlex/triviadrop/ │ ├── TriviaDropMod.java # Init server: command, tick event, packet registry │ ├── TriviaDropClient.java # Init client: HUD, sound, packet receiver │ ├── command/ │ │ └── TriviaCommand.java # start [mode] [kategori], stop, setspawn, reload, stats │ ├── config/ │ │ ├── ArenaBounds.java # Koordinat kuadran & kamera cutscene │ │ ├── GameSettings.java # Durasi, jumlah ronde, pemain min/max (dari config.json) │ │ └── QuestionManager.java # Loader semua file kategori │ ├── question/ # BARU │ │ ├── Question.java # Record data soal │ │ ├── Category.java # Enum + warna badge + ikon │ │ ├── Difficulty.java # EASY, MEDIUM, HARD │ │ ├── QuestionType.java # MCQ4, TRUE_FALSE, ESTIMASI │ │ ├── QuestionPicker.java # Logika pemilihan & anti-ulang │ │ └── QuestionValidator.java # Validasi saat load (lihat Bagian 8) │ ├── game/ │ │ ├── GameLoop.java # State machine per tick │ │ ├── GamePhase.java # IDLE, LOBBY, INTRO_CAM, CATEGORY_REVEAL, QUESTION, │ │ │ # THINKING, DROP_CAM, RESET, WINNER_CAM │ │ ├── GameMode.java # MIXED, SINGLE, VOTING, MEME, MARATHON │ │ ├── PlayerTracker.java # Hidup/mati, zona saat ini, skor, disconnect │ │ └── ArenaManipulator.java # Set/hapus blok kaca, partikel, petir │ ├── network/ │ │ └── ModPackets.java # SyncPhaseS2C, SyncQuestionS2C, SyncZoneS2C, CutsceneS2C, ResultS2C │ ├── client/ │ │ ├── CameraController.java # Bezier/Lerp kamera │ │ ├── HudAnimator.java # Slide, bounce, shake, scale │ │ └── NintendoHudRenderer.java # Gambar tekstur & font │ └── mixin/ │ ├── CameraMixin.java │ ├── InGameHudMixin.java │ └── KeyboardInputMixin.java │ └── src/main/resources/ ├── fabric.mod.json ├── triviadrop.mixins.json ├── data/triviadrop/ │ ├── config.json # Pengaturan default game │ └── questions/ │ ├── umum.json geografi.json sains.json matematika.json │ ├── sejarah.json bahasa.json teknologi.json minecraft.json │ └── olahraga.json budaya.json hiburan.json meme62.json └── assets/triviadrop/ ├── lang/id_id.json en_us.json # Teks UI (siap multi-bahasa) ├── sounds.json ├── font/ (nintendo_bold.json, FredokaOne-Bold.ttf) ├── sounds/ (lihat Bagian 4) └── textures/gui/ (lihat Bagian 3) ``` --- ## 3. Aset UI & Texture (Spesifikasi Figma) Buat aset di Figma **2x** dari ukuran tampil, lalu render dengan `MatrixStack.scale(0.5f, 0.5f, 1.0f)`. Gaya: sudut sangat membulat, stroke putih/hitam 4–6 px, warna vibrant. | File | Canvas (px) | Deskripsi | Posisi render | | --- | --- | --- | --- | | `question_banner.png` | 512 × 128 | Kotak krem, border kuning tebal, header pill “RONDE X”, drop shadow keras | Tengah atas (Y: 15), meluncur dari Y: -150 | | `option_cards.png` | 512 × 256 (sprite 2×2) | 4 kartu 256×128: Merah, Biru, Hijau, Kuning, ikon lingkaran A/B/X/Y | Bawah layar, berjejer 4 menggantikan hotbar | | `timer_bomb.png` | 256 × 128 (sprite) | Bom kartun + percikan sumbu | Kanan atas (X: W-80, Y: 20), berdenyut | | `countdown_numbers.png` | 512 × 512 (sprite) | Angka 3, 2, 1 raksasa + badge “JATUH!” | Tengah layar, zoom-out 3.0 → 1.0 | | `zone_indicator.png` | 256 × 64 | Pill gelap + ikon sepatu, border diwarnai dinamis | Di atas hotbar (Y: H-45) | | `transition_star.png` | 512 × 512 | Layar hitam dengan lubang bintang/Creeper | Fullscreen, scale 0 → 10 | | `category_badge.png` **(BARU)** | 1024 × 128 (sprite 12 ikon 128×128 ) | Ikon per kategori (globe, atom, buku, dll.) dengan warna khas | Di dalam banner soal, kiri atas | | `result_panel.png` **(BARU)** | 512 × 192 | Panel kecil penjelasan jawaban benar + sumber singkat | Tengah bawah saat Drop Cam | | `tf_cards.png` **(BARU)** | 512 × 128 | Versi 2 kartu besar “BENAR” (biru) dan “SALAH” (merah) | Bawah layar saat soal TRUE\_FALSE | Warna kartu tetap konsisten: **Merah = A, Biru = B, Hijau = X, Kuning = Y**. --- ## 4. Audio & Sound Effects | Event | Suara | | --- | --- | | Intro | `bgm_intro` — musik pembuka ceria 4 detik | | Kategori diumumkan **(BARU)** | `sfx_category_reveal` — stinger pendek + suara “ting” | | Banner & kartu masuk | `sfx_card_slide` (Whoosh-Pop) + `sfx_ui_pop` per kartu | | Berpikir | `bgm_thinking` — loop tegang, makin cepat di akhir | | Pindah zona | `sfx_zone_step` — Blip bernada tinggi | | 3–2–1 | `sfx_countdown` / `sfx_tick_urgent` | | Jawaban benar terungkap **(BARU)** | `sfx_correct_ding` | | Lantai runtuh | `sfx_drop_meme` — kaca pecah + meme sound (Vine Boom, dll.) | | Pemain tersenggol **(BARU)** | `sfx_bonk` | | Pemenang | `sfx_fanfare_win` | > Catatan lisensi: pakai SFX bebas hak cipta atau buat sendiri agar aman diunggah ke YouTube/TikTok. --- ## 5. Alur Permainan Detik demi Detik | Fase | Durasi | Kontrol pemain | Kejadian utama | | --- | --- | --- | --- | | 1. Intro Cutscene | 4 d (80 tick) | WASD terkunci, HUD vanilla hilang | Transisi bintang → teleport ke tengah arena → kamera fly-over (20, Y+15, 20) → (-20, Y+8, 20) → judul bounce-in | | 2. Category Reveal **(BARU)** | 1 d (20 tick) | Kamera ke first-person | Ikon + nama kategori muncul di banner, `sfx_category_reveal` | | 3. Question Pop-Up | 2 d (40 tick) | Bebas bergerak, dapat Tongkat Senggol (cooldown 5 d) | Banner turun (easeOutBack), 4 kartu muncul bergantian jeda 0.1 d | | 4. Thinking / Chaos | 6–10 d sesuai ronde | Lari, dorong, sabotase | Kartu zona yang diinjak membesar 1.15× dan bergoyang; zone indicator update; 3 detik terakhir panic mode (bom merah + countdown 3-2-1) | | 5. Drop Cam | 4.5 d (90 tick) | Kamera di pojok (16, Y+12, 16) | Detik 0–1 tegang: kartu benar berkedip hijau, lainnya abu-abu; detik 1 lantai salah jadi AIR + partikel + petir; detik 3 tampil `result_panel` berisi penjelasan | | 6. Evaluasi | 2 d (40 tick) | — | >1 pemain: lantai pulih (poof putih) → ulang ke fase 2/3; 1 pemain: Winner Podium; 0 pemain: lihat Edge Cases | | 7. Winner Cam | 8 d | Kamera zoom-in 3 blok di depan pemenang | Kembang api, banner “PEMENANG: \[Nama\]”, ringkasan statistik, lalu kembali ke lobi | ### Rumus Animasi (siap pakai) ```text easeOutBack(t) = 1 + 2.70158 * (t-1)^3 + 1.70158 * (t-1)^2 easeInOut(t) = t < 0.5 ? 4*t^3 : 1 - ((-2*t + 2)^3) / 2 pulseScale = 1.0 + sin((worldTime + tickDelta) * 0.35) * 0.08 ``` Gunakan `easeOutBack` untuk pop-up UI, `easeInOut` untuk kamera cutscene, dan `pulseScale` untuk kartu yang diinjak serta detak bom. ### Edge Cases & Aturan Khusus (BARU) | Situasi | Aturan | | --- | --- | | Pemain berdiri di garis tengah / tidak di zona mana pun saat waktu habis | Dianggap **salah** (jatuh) | | Semua pemain yang tersisa salah | Tidak ada yang tereliminasi, ronde diulang dengan soal baru (maksimal 2 kali, setelahnya yang paling lama di zona benar menang / sudden death) | | Semua tersisa benar | Tidak ada yang jatuh, lanjut ronde berikutnya dengan waktu dipercepat | | Pemain disconnect | Dianggap tereliminasi di ronde itu; tidak membatalkan match | | Pemain join di tengah match | Otomatis Spectator | | Server restart / `/trivia stop` | Pulihkan arena, kembalikan inventori, kamera, dan kontrol semua pemain | | Tongkat Senggol | Knockback tetap, tidak merusak, cooldown 5 d (3 d di Sudden Death) | | Pemain terjatuh sebelum waktu habis (didorong keluar arena) | Tereliminasi langsung, jadi Spectator | --- ## 6. Rencana Pengerjaan (Roadmap) | Tahap | Fokus | Deliverable | Definition of Done | Estimasi | | --- | --- | --- | --- | --- | | 1 | Core arena & server loop (tanpa UI/kamera) | `/trivia start`, loader semua JSON kategori, `QuestionPicker`, penghancuran kaca, pesan chat | Match 2+ pemain berjalan sampai ada pemenang tanpa crash; semua kategori bisa dimuat | 1–2 minggu | | 2 | Networking & cutscene kamera | Packet `CutsceneS2C`, `CameraMixin`, `KeyboardInputMixin` | Kamera terbang A→B saat intro & drop cam, kontrol terkunci/lepas dengan benar | 1–2 minggu | | 3 | Desain Figma & custom HUD | 9 file texture, `NintendoHudRenderer`, `HudAnimator` | Banner, kartu, timer, countdown tampil benar di 3 resolusi layar | 2 minggu | | 4 | Audio, sabotase, mode | Semua `.ogg`, Tongkat Senggol, mode Satu Kategori & Voting | Playtest 4+ pemain tanpa bug blocker | 1 minggu | | 5 | Konten soal | ±650 soal lolos validator & review | Distribusi warna benar seimbang, semua soal punya sumber | Paralel dari tahap 1 | | 6 | Polish & rilis | Config, lang file, README, thumbnail, build `.jar` | Build rilis stabil, panduan install tersedia | 1 minggu | ### Checklist Milestone - [ ] Tahap 1 selesai: logika eliminasi 100% benar di chat-mode - [ ] Tahap 2 selesai: cutscene intro & drop berfungsi - [ ] Tahap 3 selesai: HUD lengkap dengan animasi - [ ] Tahap 4 selesai: audio & sabotase terpasang - [ ] Tahap 5 selesai: bank soal ≥ 650 tervalidasi - [ ] Tahap 6 selesai: rilis v1.0 --- ## 7. Sistem Teknis Tambahan ### Konfigurasi (`config.json`) | Key | Fungsi | Default | | --- | --- | --- | | `minPlayers` / `maxPlayers` | Batas pemain | 2 / 16 | | `thinkingSeconds` | Durasi dasar berpikir | 10 | | `minThinkingSeconds` | Batas terendah di sudden death | 6 | | `pushStickCooldown` | Cooldown tongkat (detik) | 5 | | `mixedModeCategories` | Kategori yang aktif di mode Campuran | semua | | `showExplanation` | Tampilkan penjelasan jawaban | true | | `language` | Bahasa UI | id\_id | ### Command - `/trivia start [mode] [kategori]` — mulai match - `/trivia stop` — hentikan dan pulihkan arena - `/trivia setspawn` — set titik spawn / pusat arena - `/trivia reload` — muat ulang bank soal tanpa restart server - `/trivia stats` — statistik pemain dan kategori ### Sinkronisasi Jaringan - Server menjadi sumber kebenaran: fase, soal, waktu, dan hasil. - Client hanya merender; **jawaban benar tidak dikirim ke client sebelum Drop Cam** (anti-cheat). - Paket `SyncZoneS2C` mengirim zona yang sedang diinjak tiap pemain (untuk indikator). --- ## 8. Pipeline Pembuatan & Kontrol Kualitas Soal ### Alur Kerja 1. **Draft** — tulis soal sesuai template JSON. 2. **Verifikasi sumber** — minimal 1 sumber tepercaya (2 untuk soal sulit atau soal angka/tahun). 3. **Review silang** — teman memeriksa ambiguitas, ejaan, dan distraktor. 4. **Validator otomatis** — dijalankan saat build dan saat `/trivia reload`. 5. **Playtest** — catat soal yang terlalu mudah, terlalu sulit, atau membingungkan. 6. **Revisi** — soal bermasalah ditandai `deprecated: true`, bukan dihapus. ### Aturan Validator (`QuestionValidator`) - ID unik di seluruh bank. - `options` berjumlah tepat 4 (atau 2 untuk TRUE\_FALSE) dan tidak ada duplikat. - `correct` berada dalam rentang indeks. - Panjang teks soal/jawaban tidak melebihi batas kartu. - `difficulty`, `type`, dan `category` valid. - Ada `explanation` dan `source`. - Peringatan jika distribusi jawaban benar per posisi menyimpang lebih dari 10% dari merata. ### Template Cepat Review Soal - [ ] Hanya satu jawaban benar? - [ ] Tidak bergantung pada opini atau waktu? - [ ] Distraktor masuk akal? - [ ] Muat di kartu? - [ ] Ejaan sesuai KBBI? - [ ] Ada sumber dan penjelasan? ### Target Konten | Tingkat | Jumlah per kategori (rata-rata) | | --- | --- | | Mudah | 20–24 | | Sedang | 20–24 | | Sulit | 10–12 | --- ## 9. Rencana Pengujian | Area | Uji | | --- | --- | | Logika game | Eliminasi benar, semua-salah, semua-benar, 1 pemain tersisa, disconnect | | Soal | Tidak ada soal ganda dalam 1 match, distribusi warna merata, validator lolos | | Kamera & kontrol | Kontrol terkunci hanya saat cutscene; pulih jika `/trivia stop` di tengah cutscene | | HUD | Skala di GUI scale 1–4, resolusi 720p/1080p/1440p, teks panjang tidak terpotong | | Jaringan | Latensi tinggi, pemain bergabung telat, 16 pemain bersamaan | | Performa | Rebuild lantai tidak memicu lag spike di server kecil | | Kompatibilitas | Fabric API versi target, mod HUD populer (opsional) | --- ## 10. Risiko & Mitigasi | Risiko | Dampak | Mitigasi | | --- | --- | --- | | Soal salah atau ambigu | Pemain kesal, konten tidak kredibel | Pipeline verifikasi sumber + review silang | | Bank soal habis cepat | Soal berulang | Target 1.000+ soal, riwayat anti-ulang antar match | | Mixin bentrok dengan mod lain | Crash atau kamera bug | Gunakan injection point minimal, uji dengan mod populer | | Cutscene membuat pusing | Pemain tidak nyaman | Opsi “kurangi gerakan kamera” di config | | Aset audio kena copyright | Video diklaim | Pakai SFX bebas lisensi/buat sendiri, catat daftar lisensi | | Scope terlalu besar | Proyek mandek | Kerjakan sesuai tahap; fitur Marathon/Estimasi masuk backlog | --- ## 11. Backlog Ide Lanjutan - Soal bergambar (gambar flag, siluet mob) dengan tipe `IMAGE_MCQ`. - Mode tim (merah vs biru) dan skor poin. - Power-up: Shield (kebal 1 ronde), 50:50 (hapus 1 zona salah), Freeze Stick. - Pack soal tambahan lewat datapack/resource pack komunitas. - Leaderboard dan statistik antar match. - Dukungan multi-bahasa (en\_us, id\_id). - Integrasi streamer: tampilkan skor di overlay OBS. --- ## 12. Langkah Berikutnya (Aksi Segera) 1. Buat folder `question/` dan record `Question.java`. 2. Siapkan 12 file JSON kosong dengan template, isi minimal 10 soal per kategori untuk uji awal. 3. Implementasikan `QuestionValidator` dan `QuestionPicker`. 4. Jalankan match versi chat-mode dengan mode Campuran. 5. Baru lanjut ke networking dan kamera.

Make My PRD

Design by The Resonance | Powered by GPC – The AI Transformation Company

    PRD: # Trivia Death Drop — Master Plan v2 *Game Design