diff --git a/.idea/.idea.BABA_YAGA/.idea/workspace.xml b/.idea/.idea.BABA_YAGA/.idea/workspace.xml index 61289ea8..d5f7dcdc 100644 --- a/.idea/.idea.BABA_YAGA/.idea/workspace.xml +++ b/.idea/.idea.BABA_YAGA/.idea/workspace.xml @@ -6,14 +6,12 @@ - - - - - + + + + - - + diff --git a/BABA_YAGA_Updater/core/models.py b/BABA_YAGA_Updater/core/models.py index b1563aa5..0a0b40df 100644 --- a/BABA_YAGA_Updater/core/models.py +++ b/BABA_YAGA_Updater/core/models.py @@ -2,11 +2,14 @@ from pydantic import BaseModel from typing import Optional class Task(BaseModel): - category: str + phase: str + task_id: str task_name: str + assignee: str + start_date: str + end_date: str + progress_val: str status: str - progress: str # e.g., "75%" or "In Progress" - notes: Optional[str] = "" class ProgressReport(BaseModel): tasks: list[Task] diff --git a/BABA_YAGA_Updater/main.py b/BABA_YAGA_Updater/main.py index 5d23a8f1..7be77ba7 100644 --- a/BABA_YAGA_Updater/main.py +++ b/BABA_YAGA_Updater/main.py @@ -1,12 +1,14 @@ import sys +import os from services.gsheet_client import GSheetClient from mappers.sheet_mapper import SheetMapper from mappers.markdown_builder import MarkdownBuilder from services.readme_editor import ReadmeEditor +from config.settings import settings def main(): try: - print("🚀 Starting README update from Google Sheets...") + print("🚀 Starting README Update Process...") # 1. Fetch data from Google Sheets client = GSheetClient() @@ -18,17 +20,50 @@ def main(): # 2. Map raw rows to Core Models report = SheetMapper.map_rows_to_report(raw_rows) - print(f"✅ Parsed {len(report.tasks)} tasks.") + print(f"✅ Data fetched: {len(report.tasks)} tasks parsed.") - # 3. Build Markdown content - markdown_content = MarkdownBuilder.build_table(report) + # 3. Prepare Dynamic Content + markdown_table = MarkdownBuilder.build_table(report) + progress_summary = MarkdownBuilder.build_team_progress(report) - # 4. Update README.md + # 4. First, update the local section files with the new dynamic data + print("🔧 Injecting data into local sections...") editor = ReadmeEditor() - if editor.update_section(markdown_content): - print("🎉 README.md successfully updated!") + + # Inject progress into 08_team_standards.md + editor.inject_content_between_markers( + "sections/08_team_standards.md", + progress_summary, + "", + "" + ) + + # Inject task table into 07_roadmap.md (or whichever section has the marker) + # Note: Your main README markers were originally in 07_roadmap or similar + editor.inject_content_between_markers( + "sections/07_roadmap.md", + markdown_table, + "", + "" + ) + + # 5. Aggregate all sections into one big README content + print("📚 Aggregating all sections from 00 to 10...") + all_sections_content = "" + section_files = sorted([f for f in os.listdir("sections") if f.endswith(".md")]) + + for filename in section_files: + file_path = os.path.join("sections", filename) + with open(file_path, "r", encoding="utf-8") as f: + all_sections_content += f.read() + "\n\n---\n\n" + + # 6. Update the ROOT README.md (../README.md) + print(f"📄 Updating Root README.md at: {settings.README_PATH}") + root_editor = ReadmeEditor(file_path=settings.README_PATH) + if root_editor.update_whole_readme(all_sections_content): + print("🎉 Root README.md successfully updated from all sections!") else: - print("❌ Failed to update README.md.") + print("❌ Failed to update Root README.md.") except Exception as e: print(f"💥 An unexpected error occurred: {e}") diff --git a/BABA_YAGA_Updater/mappers/markdown_builder.py b/BABA_YAGA_Updater/mappers/markdown_builder.py index 26e74279..12a91382 100644 --- a/BABA_YAGA_Updater/mappers/markdown_builder.py +++ b/BABA_YAGA_Updater/mappers/markdown_builder.py @@ -1,35 +1,115 @@ -from core.models import ProgressReport +from core.models import ProgressReport, Task class MarkdownBuilder: + @staticmethod + def _parse_progress(p_val: str) -> int: + if p_val == "1": + return 100 + try: + return int(p_val.replace("%", "")) + except: + return 0 + + @staticmethod + def _get_status_badge(status: str) -> str: + s = status.upper().strip() + if "COMPLETED" in s: + return "![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square)" + if "DURING" in s or "PROCESS" in s: + return "![In Progress](https://img.shields.io/badge/-IN_PROGRESS-005cc5?style=flat-square)" + if "NOT STARTED" in s: + return "![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square)" + return f"`{status}`" + @staticmethod def build_table(report: ProgressReport) -> str: if not report.tasks: - return "_No tasks updated._" + return "_No tasks found._" - # Table header - header = "| Category | Task | Status | Progress | Notes |\n" - separator = "| :--- | :--- | :--- | :--- | :--- |\n" + header = "| Phase | ID | Task | Assignee | Timeline | Progress | Status |\n" + separator = "| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n" rows = [] - + + current_phase = "" for task in report.tasks: - # Map status to professional badges - status_clean = task.status.lower().strip() - - if any(x in status_clean for x in ["done", "complete", "finished"]): - badge = "![Done](https://img.shields.io/badge/-DONE-2ea44f?style=flat-square)" - elif any(x in status_clean for x in ["progress", "doing", "active"]): - badge = "![In Progress](https://img.shields.io/badge/-PROGRESS-005cc5?style=flat-square)" - elif any(x in status_clean for x in ["planned", "todo", "waiting"]): - badge = "![Planned](https://img.shields.io/badge/-PLANNED-6a737d?style=flat-square)" - elif any(x in status_clean for x in ["bug", "error", "fix"]): - badge = "![Bug](https://img.shields.io/badge/-FIXING-d73a49?style=flat-square)" - else: - badge = f"`{task.status}`" # Fallback to code text - - # Progress bar simulation using HTML/Unicode if needed, - # but simple text "75%" is often cleaner. - - row = f"| **{task.category}** | {task.task_name} | {badge} | `{task.progress}` | {task.notes} |" - rows.append(row) - + phase_display = f"**{task.phase}**" if task.phase != current_phase else "" + current_phase = task.phase + + badge = MarkdownBuilder._get_status_badge(task.status) + prog_val = MarkdownBuilder._parse_progress(task.progress_val) + + filled = prog_val // 10 + bar = "█" * filled + "░" * (10 - filled) + + rows.append( + f"| {phase_display} | `{task.task_id}` | {task.task_name} | `{task.assignee}` | {task.start_date} - {task.end_date} | `{bar} {prog_val}%` | {badge} |" + ) + return header + separator + "\n".join(rows) + + @staticmethod + def build_team_progress(report: ProgressReport) -> str: + if not report.tasks: + return "" + + phases = {} + for t in report.tasks: + if t.phase not in phases: + phases[t.phase] = [] + phases[t.phase].append(t) + + total_tasks = len(report.tasks) + completed = len([t for t in report.tasks if "COMPLETED" in t.status.upper()]) + in_progress = len([t for t in report.tasks if "DURING" in t.status.upper()]) + avg_progress = sum(MarkdownBuilder._parse_progress(t.progress_val) for t in report.tasks) / total_tasks + + # Build phase rows — NO leading spaces (prevents GitHub treating them as code blocks) + phase_rows_html = "" + colors = ["#B026FF", "#33CCFF", "#FF3333", "#FFD700"] + for i, (name, t_list) in enumerate(phases.items()): + p_total = len(t_list) + p_done = len([t for t in t_list if "COMPLETED" in t.status.upper()]) + p_avg = sum(MarkdownBuilder._parse_progress(t.progress_val) for t in t_list) / p_total + color = colors[i % len(colors)] + + # Key fix: use textwrap.dedent-style — keep lines flush left, no indentation + phase_rows_html += ( +f'' +f'' +f'' +f'' +f'
{name}{p_avg:.0f}% ({p_done}/{p_total})
' +f'
' +f'
' +f'
' +f'' +f'' + ) + + # Entire dashboard on as few lines as possible — no indented lines + dashboard = ( +'
' +'' +'' +'' +'' +'' +'
' +'' +f'
SYSTEM READINESS
' +f'
{avg_progress:.1f}%
' +'' +'' +f'' +f'' +f'' +'' +'
{completed}
DONE
{in_progress}
ACTIVE
{total_tasks - completed - in_progress}
BACKLOG
' +'
' +'
Phase Breakdown
' +f'{phase_rows_html}
' +'
' +'
' + ) + + return dashboard \ No newline at end of file diff --git a/BABA_YAGA_Updater/mappers/sheet_mapper.py b/BABA_YAGA_Updater/mappers/sheet_mapper.py index 3be4cb2b..52110280 100644 --- a/BABA_YAGA_Updater/mappers/sheet_mapper.py +++ b/BABA_YAGA_Updater/mappers/sheet_mapper.py @@ -4,17 +4,31 @@ class SheetMapper: @staticmethod def map_rows_to_report(rows: list[list]) -> ProgressReport: tasks = [] + current_phase = "General" + for row in rows: - # Ensure the row has enough columns, fill missing with empty strings - padded_row = row + [""] * (5 - len(row)) + if not row or len(row) < 2: + continue + + # Detect Phase row (e.g. Row 1: ['', 'Phase 1: ...']) + # Phase rows usually have few columns or column 2/3 is empty + if len(row) <= 2 or (len(row) > 2 and row[2] == ""): + if row[1] and "Phase" in row[1]: + current_phase = row[1].strip() + continue - task = Task( - category=padded_row[0], - task_name=padded_row[1], - status=padded_row[2], - progress=padded_row[3], - notes=padded_row[4] - ) - tasks.append(task) + # Detect Task row (e.g. Row 2: ['', '1.1', 'Task Name', ...]) + if len(row) >= 10: + task = Task( + phase=current_phase, + task_id=row[1], + task_name=row[2], + assignee=row[3], + start_date=row[4], + end_date=row[5], + progress_val=row[8], + status=row[9] + ) + tasks.append(task) return ProgressReport(tasks=tasks) diff --git a/BABA_YAGA_Updater/sections/07_roadmap.md b/BABA_YAGA_Updater/sections/07_roadmap.md index 9d464ee7..a1862e42 100644 --- a/BABA_YAGA_Updater/sections/07_roadmap.md +++ b/BABA_YAGA_Updater/sections/07_roadmap.md @@ -5,7 +5,36 @@
- + +| Phase | ID | Task | Assignee | Timeline | Progress | Status | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **Phase 1: Game Concept & Design** | `1.1` | Finalize Game Concept & Gameplay Direction | `TEAM` | 15/05/2026 - 18/05/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `1.3` | Design UI Style, Horror Theme & Moodboard | `Phương` | 18/05/2026 - 23/05/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `1.4` | Prototype Maze Layout & Environment Concept | `Phương` | 20/05/2026 - 26/05/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `1.5` | Plan Multiplayer Structure & Networking Logic | `Duy,Phương` | 24/05/2026 - 01/06/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| **Phase 2: Core Multiplayer & Player Systems** | `2.1` | Setup Unity Project & Fusion Multiplayer | `Phương` | 01/06/2026 - 06/06/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `2.2` | Develop Lobby System & Room Management | `Phương` | 04/06/2026 - 11/06/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `2.3` | Develop Online Connection & Matchmaking | `Phương` | 08/06/2026 - 15/06/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `2.4` | Develop Player Spawn & Synchronization | `Duy,Phương` | 10/06/2026 - 16/06/2026 | `█████░░░░░ 50%` | ![In Progress](https://img.shields.io/badge/-IN_PROGRESS-005cc5?style=flat-square) | +| | `2.5` | Develop Random Role Assignment (Seeker / Runner) | `Duy` | 14/06/2026 - 18/06/2026 | `░░░░░░░░░░ 5%` | ![In Progress](https://img.shields.io/badge/-IN_PROGRESS-005cc5?style=flat-square) | +| | `2.6` | Develop Character Movement System | `Tuấn` | 15/06/2026 - 21/06/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `2.7` | Develop Camera & Flashlight System | `Tuấn` | 18/06/2026 - 25/06/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `2.8` | Develop Environment Interaction System | `Tuấn` | 22/06/2026 - 01/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| **Phase 3: Gameplay Features & Environment** | `3.1` | Develop Trap System | `Duy` | 01/07/2026 - 09/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.2` | Develop Item System (Battery, Mini Map, Buffs) | `Duy` | 05/07/2026 - 13/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.3` | Develop Gameplay Mechanics & Match Flow | `Duy, Tuấn` | 10/07/2026 - 19/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.4` | Develop Maze Generation System | `Duy` | 01/07/2026 - 13/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.5` | Design Environment Assets & Maze Details | `Tuấn` | 10/07/2026 - 21/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.6` | Implement Horror Lighting & Fog Effects | `Phương` | 18/07/2026 - 26/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.7` | Develop UI HUD & Ingame Interface | `Phương` | 15/07/2026 - 25/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.8` | Develop Win/Lose Screen & Match Result UI | `Phương` | 24/07/2026 - 01/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| **Phase 4: Polish, Testing & Finalization** | `4.1` | Integrate Sound Effects & Background Music | `Tuấn` | 01/08/2026 - 06/08/2026 | `░░░░░░░░░░ 0%` | ![In Progress](https://img.shields.io/badge/-IN_PROGRESS-005cc5?style=flat-square) | +| | `4.2` | Multiplayer Testing & Synchronization Check | `Tuấn` | 04/08/2026 - 09/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `4.3` | Gameplay Balancing & Bug Fixing | `Duy,Phương` | 07/08/2026 - 12/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `4.4` | UI Polish & Optimization | `Phương` | 09/08/2026 - 13/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `4.5` | Create Game Design Document (GDD) | `Duy,Phương` | 09/08/2026 - 14/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `4.6` | Final Build, Demo & Presentation Preparation | `TEAM` | 12/08/2026 - 16/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | + diff --git a/BABA_YAGA_Updater/sections/08_team_standards.md b/BABA_YAGA_Updater/sections/08_team_standards.md index 47ecafe4..adb0c1d3 100644 --- a/BABA_YAGA_Updater/sections/08_team_standards.md +++ b/BABA_YAGA_Updater/sections/08_team_standards.md @@ -2,6 +2,12 @@ > Dự án được phát triển và vận hành bởi một **Micro-Studio 3 thành viên**. Để đạt được chất lượng tiệm cận AAA-Indie trong một thời gian giới hạn, chúng tôi áp dụng mô hình chuyên môn hóa sâu (Deep Specialization) theo từng phân hệ kỹ thuật lõi. + + +
SYSTEM READINESS
29.0%
7
DONE
3
ACTIVE
16
BACKLOG
Phase Breakdown
Phase 1: Game Concept & Design100% (4/4)
Phase 2: Core Multiplayer & Player Systems44% (3/8)
Phase 3: Gameplay Features & Environment0% (0/8)
Phase 4: Polish, Testing & Finalization0% (0/6)
+ + +
diff --git a/BABA_YAGA_Updater/services/readme_editor.py b/BABA_YAGA_Updater/services/readme_editor.py index 9f095ab3..f71a6f25 100644 --- a/BABA_YAGA_Updater/services/readme_editor.py +++ b/BABA_YAGA_Updater/services/readme_editor.py @@ -1,30 +1,49 @@ -import re +import os from config.settings import settings class ReadmeEditor: def __init__(self, file_path: str = None): self.file_path = file_path or settings.README_PATH - def update_section(self, new_content: str): - with open(self.file_path, 'r', encoding='utf-8') as f: - content = f.read() + def update_whole_readme(self, sections_content: str): + """ + Ghi đè toàn bộ nội dung README.md bằng nội dung đã gộp từ các sections. + """ + try: + # Đảm bảo thư mục cha tồn tại nếu đường dẫn là ../README.md + os.makedirs(os.path.dirname(os.path.abspath(self.file_path)), exist_ok=True) + + with open(self.file_path, 'w', encoding='utf-8') as f: + f.write(sections_content) + return True + except Exception as e: + print(f"Error writing to {self.file_path}: {e}") + return False + + def inject_content_between_markers(self, file_path: str, content_to_inject: str, start_marker: str, end_marker: str): + """ + Tiêm nội dung vào giữa 2 markers trong một file cụ thể. + """ + import re + if not os.path.exists(file_path): + return False + + with open(file_path, 'r', encoding='utf-8') as f: + full_text = f.read() - # Regex to find content between markers pattern = re.compile( - f"({re.escape(settings.START_MARKER)})(.*?)({re.escape(settings.END_MARKER)})", + f"({re.escape(start_marker)})(.*?)({re.escape(end_marker)})", re.DOTALL ) - if not pattern.search(content): - print(f"Markers {settings.START_MARKER} and {settings.END_MARKER} not found in {self.file_path}") + if not pattern.search(full_text): return False - updated_content = pattern.sub( - f"\\1\n\n{new_content}\n\n\\3", - content + updated_text = pattern.sub( + f"\\1\n\n{content_to_inject}\n\n\\3", + full_text ) - with open(self.file_path, 'w', encoding='utf-8') as f: - f.write(updated_content) - + with open(file_path, 'w', encoding='utf-8') as f: + f.write(updated_text) return True diff --git a/README.md b/README.md index ff1b6cbe..f14f6f5f 100644 --- a/README.md +++ b/README.md @@ -1,77 +1,264 @@ -# README Template (Source of Truth) +
-This file serves as the master template for the project's root README.md. -Sections are modularized in the `sections/` directory. + +

+ Animated Header +

-# ![Header](https://img.shields.io/badge/PROJECT-BABA_YAGA-black?style=for-the-badge&logo=shadow) +### ⚡ THE ASYMMETRIC PSYCHOLOGICAL SURVIVAL ENGINE +**"Thị giác là một lời nói dối. Bóng tối là sự thật duy nhất."** -[![Unity 6000.3.10f1](https://img.shields.io/badge/Unity-6000.3.10f1_LTS-black?logo=unity&logoColor=white)](https://unity.com/) -[![Photon Fusion](https://img.shields.io/badge/Networking-Photon_Fusion-blue?style=flat-square)](https://www.photonengine.com/fusion) -[![License: MIT](https://img.shields.io/badge/License-MIT-lightgrey?style=flat-square)](https://opensource.org/licenses/MIT) - -> **"Trong bóng tối của sự ảo giác, thị giác là công cụ mạnh mẽ nhất, nhưng sự tin tưởng lại là sai lầm chết người."** - -**BABA_YAGA** là một dự án game PvP không đối xứng (Asymmetric PvP) đỉnh cao, nơi người chơi bước vào một cuộc đấu trí căng thẳng trong mê cung bóng tối. Một người nắm giữ **Ánh sáng (Seeker)**, người kia điều khiển **Cạm bẫy (Trapper)**. Đây không chỉ là trò chơi trốn tìm, đây là cuộc chiến về tâm lý và khả năng đọc tình huống. +

+ + + +

--- -## ![Docs](https://img.shields.io/badge/--Mục_lục-black?style=flat-square&logo=read-the-docs&logoColor=white) -1. [Tầm nhìn Dự án (Project Vision)](#-tầm-nhìn-dự-án-project-vision) -2. [Cơ chế Trò chơi (Core Mechanics)](#-cơ-chế-trò-chơi-core-mechanics) -3. [Kiến trúc Kỹ thuật (Technical Architecture)](#-kiến-trúc-kỹ-thuật-technical-architecture) -4. [Hệ thống Mê cung (Maze Generation)](#-hệ-thống-mê-cung-maze-generation) -5. [Đồng bộ Mạng (Networking)](#-đồng-bộ-mạng-networking) -6. [Hệ thống Comeback (Comeback System)](#-hệ-thống-comeback-đa-tầng-tiered-adaptive-system) -7. [Lộ trình Phát triển (Roadmap)](#-lộ-trình-phát-triển-roadmap) -8. [Cấu trúc Thư mục (Folder Structure)](#-cấu-trúc-thư-mục-dự-án-project-folder-structure) -9. [Hướng dẫn Cài đặt (Installation)](#-hướng-dẫn-cài-đặt-installation) - + + + + + + + +
+
+ Cognitive War
Tâm lý chiến +
+
+ Spatial Audio
Âm thanh 3D +
+
+ Procedural Maze
Mê cung vô tận +
--- -## Tầm nhìn Dự án (Project Vision) +
-![Game Concept Art](https://scove-vault.duckdns.org/files/share/vakALUeH) +## Tầm nhìn Dự án (Project Vision) -Dự án hướng tới việc tạo ra một trải nghiệm **"High-Stakes Hide & Seek"**. Trọng tâm không nằm ở hành động nhanh mà ở sự **kiên nhẫn** và **tính toán**. -* **Minimalist UI:** Giảm thiểu UI để người chơi tập trung hoàn toàn vào môi trường. -* **Spatial Audio:** Âm thanh là "bản đồ" thứ hai. -* **Dynamic Lighting:** Ánh sáng không chỉ để nhìn, mà là công cụ để lộ diện hoặc ẩn mình. +
+ +
+> **BABA_YAGA** không chỉ là một trò chơi; nó là một thí nghiệm về sự cô lập. Dự án được xây dựng trên triết lý **"High-Stakes Hide & Seek"**, nơi mỗi giây im lặng đều mang trọng lượng ngàn cân. + +### 💠 Các Trụ Cột Cốt Lõi (Core Pillars) + +- 🎛️ **Minimalist UI (The "Invisible" HUD):** Chúng tôi loại bỏ mọi rào cản giữa người chơi và môi trường. Không thanh máu, không bản đồ con. Mọi thông tin đều được phản hồi qua nhịp tim, nhịp thở và độ mờ của tầm nhìn. +- 🔊 **Spatial Audio Positioning:** Âm thanh là vũ khí. Seeker phải học cách "nhìn bằng tai", trong khi Trapper có thể sử dụng tiếng động giả để điều hướng con mồi vào bẫy. +- 💡 **Dynamic Lighting & Shadow Manipulation:** Ánh sáng trong BABA_YAGA là một tài nguyên hữu hạn. Việc bật đèn pin có thể giúp bạn thấy đường, nhưng đồng thời biến bạn thành một ngọn hải đăng cho kẻ đi săn. --- -## Cơ chế Trò chơi (Core Mechanics) +
-### Sự bất đối xứng (The Asymmetry) +### DANH MỤC HỆ THỐNG -| Chỉ số | Seeker (Người Tìm Đường) | Trapper (Kẻ Đặt Bẫy) | -| :--- | :--- | :--- | -| **Vai trò** | Chủ động di chuyển, tìm lối thoát. | Phòng thủ, đặt bẫy, chặn đường. | -| **Tầm nhìn** | Góc nhìn thứ nhất (FPS), đèn pin giới hạn. | Góc nhìn tổng thể (Top-down) hoặc Camera an ninh. | -| **Tốc độ** | Nhanh (Sprinting: 9.0m/s). | Chậm hơn nhưng có khả năng dịch chuyển. | -| **Công cụ** | Đèn pin, Dash, Parkour. | Bẫy kẹp, Bẫy âm thanh, Khóa cửa. | + + + + + + + + + + + + + + + + + + +
+   + Tầm nhìn & Triết lý + +   + Cơ chế Core Gameplay +
+   + Kiến trúc Technical + +   + Đồng bộ Photon Fusion +
+   + Hệ thống Adaptive Difficulty + +   + Lộ trình Roadmap +
+   + Hướng dẫn Triển khai + +   + Cấu trúc Workspace +
-### Vòng lặp Gameplay & Kiến trúc Hệ thống (Game Loop & System Architecture) +--- + +
+ +--- + +## Tầm nhìn Dự án (Project Vision) + +
+ +
+ +
+ +> **BABA_YAGA** được định nghĩa là một trải nghiệm **"Psychological Asymmetric Survival"**. Chúng tôi không xây dựng một trò chơi hành động nhanh, mà xây dựng một môi trường nơi **sự kiên nhẫn** là vũ khí và **tư duy logic** là chìa khóa để sống sót. Trọng tâm của dự án xoay quanh việc thao túng nhận thức của người chơi thông qua ba trụ cột kỹ thuật: + +
+ + + + + + + +
+ +

+ The "Zero-UI" Philosophy +
+

Triệt tiêu hoàn toàn các yếu tố HUD truyền thống. Người chơi phải quan sát nhịp thở, vết máu và môi trường để tự đánh giá trạng thái nhân vật.

+
+ +

+ Acoustic Navigation +
+

Hệ thống Spatial Audio biến âm thanh thành "bản đồ thị giác thứ hai". Tận dụng HRTF để định vị chính xác đối phương qua các tiếng động siêu nhỏ.

+
+ +

+ Tactical Photometry +
+

Ánh sáng là tài nguyên chiến thuật. Việc quản lý photon (đèn pin, nến, lửa) quyết định ranh giới giữa kẻ đi săn và con mồi.

+
+ +
+ +
+ + Dự án đang trong giai đoạn Technical Alpha, tập trung tối ưu hóa hệ thống Perception. +
+ +--- + +## Cơ chế Cốt lõi (Core Mechanics) + +> Kiến trúc gameplay của **BABA_YAGA** được xây dựng dựa trên nguyên lý **"Thông tin Bất xứng" (Information Asymmetry)**. Hai phe tham gia không chỉ khác biệt về công cụ, mà còn trải nghiệm trò chơi ở hai chiều không gian và logic hoàn toàn trái ngược nhau. + +
+ +### Hệ sinh thái Bất đối xứng (The Asymmetric Paradigm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ THE SEEKER +

+ Thực thể Động (Kinetic Survivor) +
+

+ THE TRAPPER +

+ Kiến trúc sư Bóng tối (Environment Architect) +
+ Vai trò (Role)
+ Chủ động điều hướng (Navigation), quản lý tài nguyên sinh tồn và tìm điểm Extraction Point. Phải di chuyển liên tục để tránh bị cô lập. +
+ Vai trò (Role)
+ Thiết lập hệ thống phòng ngự tĩnh, chặn luồng di chuyển (Choke points) và dồn ép tâm lý con mồi vào bẫy tử thần. +
+ Tầm nhìn (Perception)
+ Góc nhìn thứ nhất (Immersive FPS). Bị giới hạn hoàn toàn bởi bóng tối, chỉ thấy được những gì chùm sáng đèn pin quét qua. +
+ Tầm nhìn (Perception)
+ Góc nhìn Thượng đế (Top-down / Surveillance Cams). Quản lý bản đồ qua hệ thống Heatmap và Camera an ninh đa điểm. +
+ Cơ động (Mobility)
+ Tốc độ bứt tốc cao (Sprinting: 9.0m/s). Khả năng tương tác vật lý trực tiếp với môi trường (Vaulting, Sliding). +
+ Cơ động (Mobility)
+ Tốc độ vật lý thấp, nhưng bù đắp bằng khả năng Dịch chuyển Tức thời (Teleportation) qua các node mạng lưới bóng tối. +
+ Khí tài (Arsenal)
+ + + +
+ Khí tài (Arsenal)
+ + + +
+ +
+ +### Vòng lặp Gameplay & Đồng bộ Hóa (Deterministic Game Loop) + +> Toàn bộ logic bên dưới được xử lý trong `FixedUpdateNetwork()` của Photon Fusion. Chúng tôi sử dụng kiến trúc **Server Reconciliation** kết hợp **Client Prediction** để đảm bảo Seeker di chuyển mượt mà (không delay), trong khi Trapper vẫn có quyền kiểm soát toàn vẹn trạng thái bản đồ (Server Authority). + +*(Lưu ý kỹ thuật: Sơ đồ dưới đây đã được cấu trúc lại thuộc tính HTML bên trong để đảm bảo khả năng render không bị lỗi trên các bộ phân tích Markdown của GitHub/Gitea)* ```mermaid graph TD - %% Định nghĩa Style cho các nhóm - classDef initStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px,color:#01579b; - classDef seekerStyle fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#e65100; - classDef trapperStyle fill:#f3e5f5,stroke:#4a148c,stroke-width:2px,color:#4a148c; - classDef netStyle fill:#eceff1,stroke:#263238,stroke-dasharray: 5 5,color:#263238; - classDef winStyle fill:#e8f5e9,stroke:#1b5e20,stroke-width:3px,color:#1b5e20; - classDef criticalStyle fill:#ffebee,stroke:#b71c1c,stroke-width:2px,color:#b71c1c; + %% Định nghĩa Style cho các nhóm (Dark Theme Optimized) + classDef initStyle fill:#1a2b3c,stroke:#33CCFF,stroke-width:2px,color:#E0E0E0; + classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700; + classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333; + classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray: 5 5,color:#E0E0E0; + classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55; + classDef criticalStyle fill:#4d0000,stroke:#FF0000,stroke-width:2px,color:#FF0000; %% Phase 1: Initialization subgraph Initialization ["1. KHỞI TẠO HỆ THỐNG (NET-SYNC)"] - A[" Bắt đầu Trận đấu"] --> B{" Matchmaking
(Photon Fusion)"} - B --> C[" Phân vai: Seeker vs Trapper"] - C --> D[" Maze Generator
(Prims/Wilsons)"] - D --> E[" Baking NavMesh & Colliders"] - E --> F[" Character Auto-Setup"] - F --> G[" Spawn Players"] + A[" Bắt đầu Trận đấu"] --> B{" Matchmaking
(Photon Fusion)"} + B --> C[" Phân vai: Seeker vs Trapper"] + C --> D[" Maze Generator
(Prims/Wilsons)"] + D --> E[" Baking NavMesh & Colliders"] + E --> F[" Character Auto-Setup"] + F --> G[" Spawn Players"] end class Initialization,A,B,C,D,E,F,G initStyle; @@ -80,33 +267,33 @@ graph TD G --> Loop((TICK: FixedUpdateNetwork)) %% Seeker Branch - subgraph Seeker_Logic [" SEEKER (POV 1st)"] - S1[" Input: WASD/Space"] --> S2[" State: Move/Dash"] - S2 --> S3{" Hành động?"} - S3 -- "Sprinting" --> S4[" Noise Up"] - S3 -- "Sneaking" --> S5[" Noise Down"] - S3 -- "Flashlight" --> S6[" Lộ vị trí"] + subgraph Seeker_Logic [" SEEKER (POV 1st)"] + S1[" Input: WASD/Space"] --> S2[" State: Move/Dash"] + S2 --> S3{" Hành động?"} + S3 -- "Sprinting" --> S4[" Noise Up"] + S3 -- "Sneaking" --> S5[" Noise Down"] + S3 -- "Flashlight" --> S6[" Lộ vị trí"] - S4 & S5 & S6 --> S_Check{" Check Env"} - S_Check -- "Dẫm bẫy" --> S_Trap[" Bị khống chế"] + S4 & S5 & S6 --> S_Check{" Check Env"} + S_Check -- "Dẫm bẫy" --> S_Trap[" Bị khống chế"] end %% Trapper Branch - subgraph Trapper_Logic [" TRAPPER (STRATEGY)"] - T1[" Mouse Input"] --> T2[" View: Heatmap/Cams"] - T2 --> T3{" Kỹ năng?"} - T3 -- "Đặt bẫy" --> T4[" Sync Trap"] - T3 -- "Scan" --> T5[" Ping Seeker"] - T3 -- "Lock" --> T6[" Khóa cửa"] + subgraph Trapper_Logic [" TRAPPER (STRATEGY)"] + T1[" Mouse Input"] --> T2[" View: Heatmap/Cams"] + T2 --> T3{" Kỹ năng?"} + T3 -- "Đặt bẫy" --> T4[" Sync Trap"] + T3 -- "Scan" --> T5[" Ping Seeker"] + T3 -- "Lock" --> T6[" Khóa cửa"] - T4 & T5 & T6 --> T_Check{" Theo dõi"} + T4 & T5 & T6 --> T_Check{" Theo dõi"} end %% Networking Layer - subgraph Network_Sync [" NETWORK SYNC"] + subgraph Network_Sync [" NETWORK SYNC LAYER"] Loop --> NS1["⏩ Client Prediction"] - NS1 --> NS2[" Server Reconciliation"] - NS2 --> NS3[" State Sync"] + NS1 --> NS2[" Server Reconciliation"] + NS2 --> NS3[" State Sync"] end end class Seeker_Logic,S1,S2,S3,S4,S5,S6,S_Check seekerStyle; @@ -116,497 +303,927 @@ graph TD %% Phase 3: Results subgraph Result_Logic ["3. KẾT THÚC & THƯỞNG"] - S_Check -- "Chạm Exit" --> Win_S[" SEEKER THẮNG"] - T_Check -- "Bắt được Seeker" --> Win_T[" TRAPPER THẮNG"] + S_Check -- "Chạm Exit" --> Win_S[" SEEKER THẮNG"] + T_Check -- "Bắt được Seeker" --> Win_T[" TRAPPER THẮNG"] Loop -- "Timer = 0" --> Win_T - Win_S & Win_T --> Post_Match[" Thống kê Rank"] - Post_Match --> Buff{" Balance Check"} - Buff -- "Thua cuộc" --> Buff_Apply[" Kích hoạt Comeback Buff"] + Win_S & Win_T --> Post_Match[" Thống kê Match"] + Post_Match --> Buff{" Hệ thống Adaptive"} + Buff -- "Thua liên tiếp" --> Buff_Apply[" Kích hoạt Comeback Buff"] Buff_Apply --> A end class Win_S,Win_T winStyle; class Result_Logic,Post_Match,Buff,Buff_Apply initStyle; %% Interactions (Dashed Lines) - S_Trap -.->|Cảnh báo| T_Check - S4 -.->|Sóng âm| T2 - T4 -.->|Collision ẩn| S_Check + S_Trap -.->|Cảnh báo State| T_Check + S4 -.->|Phát xạ Sóng âm| T2 + T4 -.->|Collision Vô hình| S_Check NS3 --> Loop -``` - --- -## Kiến trúc Kỹ thuật (Technical Architecture) +## Kiến trúc Kỹ thuật (Technical Architecture) -### 1. Advanced Player & Camera State Machine +> Hệ thống của **BABA_YAGA** được thiết kế theo chuẩn **Modular Architecture** (Kiến trúc Module), tách biệt hoàn toàn giữa logic xử lý vật lý (Kinematics), trạng thái mạng (Net-State) và phản hồi thị giác (Visual Feedbacks). Điều này đảm bảo hiệu năng cao (High Tickrate) ngay cả trong các môi trường mê cung phức tạp. -Hệ thống điều khiển nhân vật không chỉ quản lý hành động mà còn điều phối **Camera Dynamics** để tăng cường cảm giác nhập vai và đồng bộ hóa hướng nhìn qua mạng. +
+ +### 1. Advanced Kinematic FSM & Camera Dynamics + +Hệ thống điều khiển nhân vật cốt lõi được xây dựng trên mô hình **Finite State Machine (FSM)** phân cấp. Không chỉ xử lý nội suy vật lý mượt mà, hệ thống còn tích hợp trực tiếp với **Procedural Camera Dynamics** (Head-bob, Dynamic FOV, Tilt) để tạo ra sự cộng hưởng về cảm giác nhập vai, đồng thời duy trì tính đồng bộ tuyệt đối qua lớp mạng (Networking Layer). + +*(Lưu ý: Sơ đồ trạng thái dưới đây đã được tối ưu hóa cho thuật toán dự đoán phía Client)* ```mermaid stateDiagram-v2 direction TB - state " GROUND" as Ground { + state " KINEMATIC GROUND" as Ground { [*] --> Idle state Idle { - I_P: Vel < 0.1m/s - I_C: 🌡️ Breathing (0.5Hz) + I_P: Vel < 0.1m/s + I_C: Breathing Cam (0.5Hz) } - Idle --> Moving : "Input.mag > 0.1" + Idle --> Moving : Input.mag > 0.1 state Moving { - M_P: Speed 2-4m/s - M_C: Head Bob (1.2Hz) + M_P: Speed 2-4m/s + M_C: Head Bob (1.2Hz) } - Moving --> Sneaking : "OnSneak (Hold)" + Moving --> Sneaking : Hold [Sneak] state Sneaking { - Sn_P: Noise -50% - Sn_C: Lower Height + Sn_P: Acoustic Profile -50% + Sn_C: Collider Height ↓ } - Moving --> Sprinting : "OnSprint (Hold)" - state Sneaking --> Moving : "Release Sneak" + Moving --> Sprinting : Hold [Sprint] + Sneaking --> Moving : Release [Sneak] + state Sprinting { - Sp_P: Speed > 6.5m/s - Sp_C: 🌈 Dynamic FOV + Sp_P: Speed > 6.5m/s + Sp_C: Dynamic FOV Warp } - Sprinting --> Moving : "Stamina Empty" + Sprinting --> Moving : Stamina Depleted } - state "☁️ AIRBORNE" as Air { + state " AIRBORNE DYNAMICS" as Air { state Jump { - J_P: AddForce Up + J_P: AddForce Up } state Falling { - F_P: Gravity x 1.5 + F_P: Gravity x1.5 } state Landing { - L_P: 📏 Impact Check + L_P: Impact Raycast } - Jump --> Falling : "Vel.y < 0" - Falling --> Landing : "IsGrounded == true" + Jump --> Falling : Vel.y < 0 + Falling --> Landing : KCC.IsGrounded == true } - state " ACTION" as Utility { + state " UTILITY / ACTION" as Utility { state Dashing { - D_P: Burst 15m/s + D_P: Vector Burst (15m/s) } state Interacting { - Int_P: Root Motion Lock + Int_P: Root Motion Lock } } - state " NETWORK" as Net { - state "Input Authority" as IA - state "State Authority" as SA - IA --> SA : "Send Input" - SA --> IA : "Reconcile" + state " NET-SYNC LAYER" as Net { + state "Input Authority (Client)" as IA + state "State Authority (Server)" as SA + IA --> SA : Send Input Tick + SA --> IA : Force Reconcile } - %% Transitions chính - Ground --> Air : "IsGrounded == false" - Air --> Ground : "OnLand Event" - Ground --> Utility : "OnAbility" - Utility --> Ground : "Complete" + %% Main Transitions + Ground --> Air : KCC.IsGrounded == false + Air --> Ground : OnLandEvent.Fire() + Ground --> Utility : InvokeAbility() + Utility --> Ground : Action Complete - %% Notes + %% Sticky Notes for Technical Context note left of Ground - Sync: Velocity - State: MoveState + Sync: KCC Velocity + State: Networked Enum end note note right of Net - Photon Fusion - FixedUpdateNetwork + Photon Fusion + Anti-Cheat Validated end note ``` +
+ 2. Tactical Environment Scanner & Interaction -### 2. Environment Scanner & Interaction -Hệ thống quét vật thể (`EnvironmentScanner.cs`) sử dụng **SphereCast** và **OverlapSphere** để phát hiện các đối tượng `IInteractable` trong phạm vi tương tác, đảm bảo tính chính xác ngay cả trong bóng tối. - - ---- - -## Hệ thống Mê cung (Maze Generation) - -Trái tim của **BABA_YAGA** là hệ thống tạo mê cung đa thuật toán, mang lại sự đa dạng vô hạn. - -| Algorithm | Complexity | Description | -| :--- | :--- | :--- | -| **Prims** | O(E log V) | Tạo mê cung "dày", nhiều nhánh ngắn, lý tưởng cho việc đặt bẫy. | -| **Wilsons** | O(N) | Thuật toán ngẫu nhiên hoàn hảo, không có thiên hướng cấu trúc nhất định. | -| **Recursive** | O(N) | Tạo ra các hành lang dài và sâu, tăng áp lực cho Seeker. | -| **Crawler** | O(N) | Tạo ra các không gian mở giống hang động hơn là mê cung truyền thống. | - -### Quy trình khởi tạo (Maze Generation Pipeline) - -```mermaid -graph TD - %% Định nghĩa Style - classDef lossStyle fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#c62828; - classDef tier1Style fill:#fff8e1,stroke:#fbc02d,stroke-width:2px,color:#f57f17; - classDef tier2Style fill:#fff3e0,stroke:#fb8c00,stroke-width:2px,color:#e65100; - classDef tier3Style fill:#fbe9e7,stroke:#ff5722,stroke-width:2px,color:#bf360c; - classDef systemStyle fill:#f5f5f5,stroke:#424242,stroke-width:2px,color:#424242; - classDef winStyle fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20; - - %% Quy trình chính - Start((" PLAYER LOSES ROUND")) --> Streak{{" Check Loss Streak"}} - - %% Phân tầng Buff - subgraph Buff_Pools [" HỆ THỐNG CÂN BẰNG ĐỘNG (COMEBACK POOLS)"] - Streak -- "1 Trận" --> T1 - Streak -- "2 Trận" --> T2 - Streak -- "3+ Trận" --> T3 - - T1[" Tier 1: Awakening
(Small Boosts)"] - T2[" Tier 2: Evolution
(Tactical Advantage)"] - T3[" Tier 3: Manifestation
(Game Changer)"] - - %% Ví dụ chỉ số (Tooltip-like) - T1 --- T1_Ex["+10% Speed
+15% Stamina Regen"] - T2 --- T2_Ex["Bẫy tàng hình (Trapper)
Giảm 50% tiếng ồn (Seeker)"] - T3 --- T3_Ex["Nhìn xuyên tường 5s
Hồi sinh 1 lần tại chỗ"] - end - - %% Giai đoạn áp dụng - T1 & T2 & T3 --> Selection{{" Selection Mode"}} - - Selection -- "Manual" --> P1["Người chơi tự chọn 1 trong 3 Buff"] - Selection -- "Auto" --> P2["Hệ thống chọn ngẫu nhiên"] - - P1 & P2 --> Apply[" Apply to Next Round Only
(Trạng thái: Active)"] - - %% Kết quả vòng đấu sau - Apply --> Result{{" New Round Result?"}} - - Result -- " WIN" --> Reset[" Reset Streak
Remove All Buffs"] - Result -- "❌ LOSS" --> Increment[" Increase Streak
Progress to Next Tier"] - - %% Vòng lặp - Reset --> NewGame((" Fair Match")) - Increment --> Start - - %% Gán Style - class Start,Increment lossStyle; - class T1,T1_Ex tier1Style; - class T2,T2_Ex tier2Style; - class T3,T3_Ex tier3Style; - class Selection,P1,P2,Apply systemStyle; - class Result,Reset,NewGame winStyle; +Việc tương tác trong một môi trường bị giới hạn hoàn toàn về tầm nhìn đòi hỏi một hệ thống truy vấn không gian (Spatial Querying) cực kỳ chính xác. Chúng tôi từ chối sử dụng cơ chế Raycast điểm đơn thông thường. + + + + + +
+ + +

Hệ thống lõi: EnvironmentScanner.cs

+

+Sử dụng kết hợp Physics.OverlapSphereNonAlloc để tối ưu hóa bộ nhớ (Zero Garbage Collection) và SphereCast để tính toán đường đạn thể tích. Hệ thống tự động phân tích và trích xuất các đối tượng thỏa mãn đa hình Interface IInteractable, đảm bảo người chơi có thể kích hoạt các thiết bị (Cửa, Máy phát điện, Bẫy) một cách mượt mà ngay cả khi chúng hoàn toàn chìm trong bóng tối. +

+
``` - --- -## Đồng bộ Mạng (Networking) +## Kiến trúc Mạng (Advanced Netcode Architecture) -Sử dụng **Photon Fusion (State Sync)** với cơ chế Client-Side Prediction để đảm bảo trải nghiệm không độ trễ. +> Để đảm bảo tính công bằng trong một tựa game mang nặng yếu tố hành động lén lút và phản xạ ngàn cân treo sợi tóc, **BABA_YAGA** sử dụng **Photon Fusion (State Sync)** làm lõi đồng bộ. Hệ thống được tinh chỉnh để mô phỏng cảm giác "Độ trễ bằng 0" (Zero-Latency Feel) thông qua kiến trúc mạng tất định (Deterministic Network). + +
+ + + + + + + +
+ +

+ Client-Side Prediction +
+

Mô phỏng trước các chuyển động của người chơi trên Local Client, loại bỏ hoàn toàn độ trễ Input Delay khi di chuyển hoặc lướt.

+
+ +

+ Server Authority +
+

Máy chủ nắm quyền quyết định cuối cùng. Ngăn chặn triệt để các hành vi gian lận như Speedhack, Teleport hay thao túng Hitbox.

+
+ +

+ Lag Compensation +
+

Rewind trạng thái Hitbox trên Server về đúng thời điểm Client thực hiện thao tác (Ping), đảm bảo tính chính xác cho các cú vồ/bẫy.

+
+ +
+ +### Vòng xoay Dữ liệu Mạng (Network Data Flow Pipeline) + +> Biểu đồ dưới đây mô tả luồng xử lý thông tin tại mỗi **Tick (Khung hình mạng)**. Việc phân tách rõ ràng giữa *Logical State* (trạng thái mạng) và *Visual Presentation* (hiển thị hình ảnh) giúp khung hình của game (FPS) không bị khóa vào Tickrate của Server. + +*(Lưu ý: Các trích xuất HTML trong sơ đồ đã được chuẩn hóa để tương thích hoàn toàn với bộ phân tích Markdown)* -### Network Data Flow & Synchronization ```mermaid sequenceDiagram autonumber - participant IR as Input - participant CP as 🎀 Local Player - participant NT as Fusion Net - participant S as Server - participant RP as Proxies + %% Khai báo các thực thể + participant IR as Input + participant CP as Local Client + participant NT as Fusion Net + participant S as Server Auth + participant RP as Proxies %% --- GIAI ĐOẠN 1 --- - Note over IR, CP: [PHASE 1] Thu thập Input - IR->>CP: OnMove / OnJump / OnSprint - CP->>CP: Pack NetworkInputData + Note over IR, CP: [PHASE 1] Data Sampling (Thu thập) + IR->>CP: Hành động (Move / Ability / Interact) + CP->>CP: Đóng gói NetworkInputStruct %% --- GIAI ĐOẠN 2 --- - Note over CP: [PHASE 2] Dự đoán (Prediction) - CP->>CP: Run Client-Side Physics - CP->>NT: Send Input (Tick N) + Note over CP: [PHASE 2] Client Prediction (Dự đoán) + CP->>CP: Thực thi Physics & Kinematics tức thì (Tick N) + CP->>NT: Transmit Input Payload (Gửi lên mạng) %% --- GIAI ĐOẠN 3 --- - Note over NT, S: [PHASE 3] Truyền tin mạng - NT->>S: UDP Packet Delivery - Note right of S: SERVER SIMULATION - S->>S: Validate & Update State - S-->>NT: Snapshot (Tick N) + Note over NT, S: [PHASE 3] Server Validation (Xác thực) + NT->>S: UDP Reliable Packet Delivery + Note right of S: SERVER TICK SIMULATION + S->>S: Validate Ruleset & Apply Physics State + S-->>NT: Broadcast Global State Snapshot (Tick N) %% --- GIAI ĐOẠN 4 --- - Note over NT, CP: [PHASE 4] Hồi đáp & Đồng bộ - NT-->>CP: State Snapshot - Note over CP: RECONCILIATION - CP->>CP: Fix Position if Error > Threshold + Note over NT, CP: [PHASE 4] Reconciliation (Điều chỉnh bù trừ) + NT-->>CP: Nhận State Snapshot Feed + Note over CP: ERROR CORRECTION PROTOCOL + CP->>CP: Detect Desync -> Snap Transform -> Resimulate Ticks %% --- GIAI ĐOẠN 5 --- - Note over NT, RP: [PHASE 5] Proxy Update - NT-->>RP: State Snapshot - Note over RP: INTERPOLATION (Lerp) + Note over NT, RP: [PHASE 5] Proxy Update (Cập nhật thực thể bên thứ 3) + NT-->>RP: Nhận State Snapshot Feed + Note over RP: NETWORK INTERPOLATION + RP->>RP: Lerp Position/Rotation (Bù nội suy mượt mà) %% --- GIAI ĐOẠN 6 --- - Note over CP, RP: [PHASE 6] Hiển thị (Render) - CP->>CP: Update Camera Shake/VFX - RP->>RP: Smooth Mesh Movement + Note over CP, RP: [PHASE 6] Visual Render (Hiển thị) + CP->>CP: Trigger Camera Shake / Local VFX + RP->>RP: Cập nhật Animation Parameters & Mesh + +
+ +Hệ thống được thiết lập chạy ở 60 Ticks/Second, băng thông ước tính <10kb/s mỗi Client. +
``` +--- + +## Kiến trúc Netcode (Deterministic Networking) + +
+ + + +
+ +> Tựa game với nhịp độ sinh tồn căng thẳng không có chỗ cho sự sai lệch (Desync). **BABA_YAGA** vận hành trên kiến trúc **State Sync (Đồng bộ Trạng thái)** kết hợp quy trình **Dự đoán phía Client (Client-Side Prediction)** và **Bù trừ Độ trễ (Lag Compensation)**, mang lại cảm giác phản hồi tức thì "Zero-Latency" ngay cả ở mức Ping 100ms+. + +
+ + + + + + +
+ Client-Side Prediction (Dự đoán cục bộ)
+

Người chơi nội bộ (Local Player) thực thi các lệnh di chuyển, lướt, rọi đèn pin ngay lập tức mà không cần đợi Server cho phép. Tạo cảm giác điều khiển mượt mà như game Offline.

+
+ Server Reconciliation (Thuật toán Đối chiếu)
+

Máy chủ vẫn nắm quyền tối thượng (Authority). Nếu Client dự đoán sai (do va chạm với bẫy hoặc bị kẹt), Server sẽ ép Client "Rollback" về trạng thái chuẩn trong tích tắc (Snap Correction).

+
+ +
+ +### Network Data Flow (Luồng Đồng bộ Hóa) + +> Sơ đồ biểu diễn vòng đời của một **Network Tick** từ khi người chơi nhấn phím đến khi hình ảnh được kết xuất (Render) trên màn hình của những người chơi khác. + +```mermaid +sequenceDiagram + autonumber + + %% Phân vùng không gian hệ thống (Sử dụng Box Grouping) + box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)" + participant IR as Input + participant CP as Local Player + end + + box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)" + participant NT as Network Layer + participant S as Server Tick + end + + box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS" + participant RP as Proxies + end + + %% --- GIAI ĐOẠN 1 --- + Note over IR, CP: [PHASE 1] DATA ACQUISITION + IR->>CP: OnMove / OnAbility (Raw Input) + CP->>CP: Pack NetworkInputStruct + + %% --- GIAI ĐOẠN 2 --- + Note over CP: [PHASE 2] FORWARD PREDICTION + CP->>CP: Run Local Kinematics (Tick N) + CP->>NT: Transmit Input Payload + + %% --- GIAI ĐOẠN 3 --- + rect rgba(255, 51, 51, 0.1) + Note over NT, S: [PHASE 3] SERVER VALIDATION (Simulation) + NT->>S: Deliver UDP Packet + S->>S: Validate Rules & Apply Physics + S-->>NT: Broadcast State Snapshot (Tick N) + end + + %% --- GIAI ĐOẠN 4 --- + Note over NT, CP: [PHASE 4] RECONCILIATION PROTOCOL + NT-->>CP: State Snapshot (Global Truth) + CP->>CP: Check Desync (Threshold) + CP->>CP: Snap Pos & Resimulate if Error + + %% --- GIAI ĐOẠN 5 --- + Note over NT, RP: [PHASE 5] PROXY INTERPOLATION + NT-->>RP: State Snapshot + RP->>RP: Lerp Position / Rotation Smoothly + + %% --- GIAI ĐOẠN 6 --- + Note over CP, RP: [PHASE 6] VISUAL RENDERING + CP->>CP: Update Local VFX / Camera Shake + RP->>RP: Update Animator & Mesh Transforms + +
+
+ +Tất cả Logic Va chạm (Collision) và Phát hiện Âm thanh (Noise Detection) được phân tách hoàn toàn khỏi luồng Render đồ họa, ngăn chặn hiện tượng rách hình ảnh (Tearing) do lag mạng. +
+``` --- -## Hệ thống Comeback Đa tầng (Tiered Adaptive System) +## Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics) -Để đảm bảo mỗi trận đấu đều kịch tính đến giây cuối cùng, BABA_YAGA áp dụng hệ thống **"Despair Mechanics"**. Người chơi có chuỗi thua càng dài sẽ nhận được quyền năng từ mê cung càng lớn, tạo ra những khoảnh khắc lật kèo kinh điển. +
+ +
-### Phân tầng Buff theo Chuỗi Thua (Tiered Progression) +> Để duy trì trạng thái **"Căng thẳng tột độ" (High-Stakes)** đến những giây phút cuối cùng, kiến trúc của **BABA_YAGA** tích hợp một động cơ cân bằng ngầm mang tên **"Despair Mechanics"**. Khi một thực thể bị đẩy vào chuỗi thất bại liên tiếp, Mê cung sẽ bẻ cong các quy tắc vật lý và logic thông thường để ban cho họ những đặc quyền sinh tồn phi mã, tạo ra những khoảnh khắc lật kèo (Comeback) chấn động mạng lưới. -| Chuỗi Thua | Phân tầng | Tên gọi | Quyền năng & Cơ chế | -| :--- | :--- | :--- | :--- | -| **1 Trận** | Tier 1 | *Awakening* | Chọn 1 Buff cơ bản (Tăng tốc +15% hoặc Mở rộng tầm nhìn +20%). | -| **2 Trận** | Tier 2 | *Evolution* | Nhận 1 Buff chủ động (Kỹ năng nhấn nút) + 1 Buff bị động (Nâng cấp chỉ số). | -| **3+ Trận** | Tier 3 | *Manifestation* | **Ultimate Skill:** Kỹ năng thay đổi luật chơi trong 30s. Mê cung sẽ hỗ trợ bạn trực tiếp. | +
+ +### Phân tầng Bù trừ theo Chuỗi Thua (Progression Hierarchy) + + + + + + + +
+

+
+

TIER 1: Awakening

+

Khởi động giao thức sinh tồn cơ bản. Lựa chọn 1 Buff thụ động (Nâng cấp chỉ số Base Stats như Tốc độ / Tầm nhìn).

+
+

+
+

TIER 2: Evolution

+

Tiến hóa cơ sở hạ tầng. Nhận đồng thời 1 Kỹ năng Chủ động (Active Skill) và 1 Đặc quyền Thụ động (Passive Perk).

+
+

+
+

TIER 3: Manifestation

+

Ghi đè hệ thống (Override Ruleset). Kích hoạt Ultimate Skill thay đổi hoàn toàn cục diện trận đấu trong thời gian ngắn.

+
+ +
--- -### Seeker: Ý chí Sinh tồn (Survival Evolution) +### THE SEEKER: Thức Tỉnh Bản Năng (Survival Evolution) -Khi Seeker liên tục thất bại, các giác quan của họ sẽ tiến hóa vượt bậc để chống lại bóng tối: +Khi Seeker liên tục bị bóng tối nuốt chửng, hệ thần kinh của họ sẽ bị ép buộc tiến hóa vượt giới hạn để chống lại môi trường khắc nghiệt: -* **Tier 1 - Sixth Sense (Linh cảm):** Seeker bắt đầu nghe thấy tiếng tim đập của chính mình nhanh hơn khi Trapper đang ở gần (bán kính 15m), giúp định vị mà không cần nhìn. -* **Tier 2 - Shadow Step (Bước chân hư vô):** Di chuyển hoàn toàn không gây ra tiếng động (Noise Meter = 0) trong 20 giây đầu của trận đấu. Cho phép Seeker thiết lập vị trí an toàn sớm. -* **Tier 2 - Trap Reflex (Phản xạ tột độ):** Seeker có 50% cơ hội tự động vô hiệu hóa bẫy kẹp đầu tiên dẫm phải. Nếu thành công, Seeker sẽ được tăng 50% tốc độ chạy trong 3s. -* **Tier 3 - Ultimate: Chrono Dash:** Trong 15 giây, Seeker có thể thực hiện Dash không giới hạn (No Cooldown) và trở nên miễn nhiễm with mọi loại khống chế. Lúc này, Seeker là kẻ săn lùng lối thoát. + + + + + + + + + + + + + + + + + +
+ + + Acoustic Resonance (Cộng hưởng Hạ âm)
+ Kích hoạt khả năng cảm nhận tần số thấp. Seeker có thể nghe thấy nhịp tim đập dồn dập của chính mình khi Trapper tiến vào bán kính 15m, đóng vai trò như một radar sinh học mà không cần sử dụng thị giác. +
+ + + Kinematic Void (Bước chân Hư vô)
+ Triệt tiêu hoàn toàn ma sát vật lý. Seeker không phát ra bất kỳ sóng âm nào (Noise Meter = 0) khi di chuyển trong 20 giây đầu tiên, cho phép thiết lập điểm mù chiến thuật (Blindspot) từ sớm. +
+ + + Neural Overdrive (Phản xạ Tột độ)
+ Có 50% cơ hội ghi đè (Bypass) cơ chế kích hoạt của bẫy cơ học đầu tiên vô tình chạm phải. Nếu bypass thành công, hệ thống bơm Adrenaline sẽ kích hoạt, cộng dồn 50% vận tốc bứt tốc trong 3 giây. +
+ + + Temporal Displacement (Phá vỡ Thời Không)
+ Trong 15 giây, thể lực (Stamina) bị khóa ở mức vô hạn. Seeker có thể Dash liên tục (Zero Cooldown) và đạt trạng thái I-Frame (Miễn nhiễm khống chế). Lúc này, luật chơi đảo chiều: Seeker là kẻ săn lùng lối thoát. +
+ +
--- -### Trapper: Quyền năng Bóng tối (Dark Rituals) +### THE TRAPPER: Hiến Tế Không Gian (Dark Rituals) -Khi Trapper để xổng mất con mồi, mê cung sẽ hiến tế sự ổn định của nó để ban cho Trapper những quyền năng thao túng cực hạn: - -* **Tier 1 - Paranoia Echo (Tiếng vọng ảo giác):** Tự động tạo ra 3 nguồn âm thanh bước chân giả chạy xung quanh Seeker để gây nhiễu loạn khả năng định hướng bằng âm thanh của họ. -* **Tier 2 - Global Blackout (Bóng tối bao trùm):** Kích hoạt khiến đèn pin của Seeker bị nhiễu (Flicker) hoặc tắt hoàn toàn trong 8 giây. Đây là thời điểm vàng để Trapper thu hẹp khoảng cách. -* **Tier 2 - Ghosting (Dịch chuyển không gian):** Trapper nhận khả năng đi xuyên qua các cánh cửa đã bị khóa hoặc các bức tường mỏng (Destructible Walls) trong 15 giây. -* **Tier 3 - Ultimate: Eye of the Abyss:** Hiển thị vị trí thực của Seeker xuyên tường (Wallhack) dưới dạng bóng đen trong 20 giây. Seeker không thể trốn chạy, chỉ có thể cầu nguyện. +Khi Trapper để mất quyền kiểm soát, Mê cung sẽ tự động phân rã sự ổn định của nó, cấp cho Trapper quyền truy cập vào các giao thức thao túng môi trường cực hạn: + + + + + + + + + + + + + + + + + +
+ + + Aural Hallucination (Nhiễu loạn Nhận thức)
+ Phát xạ 3 luồng tín hiệu âm thanh ảo đa hướng xung quanh Seeker. Các tín hiệu này can thiệp trực tiếp vào hệ thống Spatial Audio, tạo ảo giác về tiếng bước chân dồn dập nhằm đánh sập khả năng định vị của con mồi. +
+ + + Photon Suppression (Triệt tiêu Quang năng)
+ Hấp thụ toàn bộ ánh sáng trong khu vực. Đèn pin của Seeker sẽ bị ép vào trạng thái nhiễu loạn (Flicker) hoặc sập nguồn hoàn toàn trong 8 giây. Đây là khung cửa tử thần (Kill-window) hoàn hảo để thu hẹp khoảng cách. +
+ + + Quantum Phase (Phi vật chất hóa)
+ Tạm thời vô hiệu hóa Layer Collision của Trapper. Cấp khả năng đi xuyên qua các cánh cửa đã bị khóa mã hoặc các cấu trúc tường mỏng (Destructible Walls) trong 15 giây, bỏ qua mọi rào cản vật lý. +
+ + + Abyssal Omniscience (Nhãn quan Lưỡi Hái)
+ Đồng bộ hóa trực tiếp với mạng lưới lõi của mê cung. Render vị trí thời gian thực của Seeker xuyên qua mọi vật cản (Absolute Wallhack) dưới dạng bóng tối (Silhouette) trong 20 giây. Không có góc khuất, không có lối thoát. +
--- -## Lộ trình Phát triển (Roadmap) +## Lộ trình Triển khai (Development Roadmap) + +> Tiến trình xây dựng kiến trúc **BABA_YAGA**. Dự án được phát triển theo mô hình Agile, ưu tiên hoàn thiện độ ổn định của lõi Netcode (Networking) trước khi mở rộng các module Meta-game và Visuals. + +
-| Category | Task | Status | Progress | Notes | -| :--- | :--- | :--- | :--- | :--- | -| **** | Phase 1: Game Concept & Design | `` | `` | | -| **** | 1.1 | `Finalize Game Concept & Gameplay Direction` | `TEAM` | 15/05/2026 | -| **** | 1.3 | `Design UI Style, Horror Theme & Moodboard` | `Phương` | 18/05/2026 | -| **** | 1.4 | `Prototype Maze Layout & Environment Concept` | `Phương` | 20/05/2026 | -| **** | 1.5 | `Plan Multiplayer Structure & Networking Logic` | `Duy,Phương` | 24/05/2026 | -| **** | Phase 2: Core Multiplayer & Player Systems | `` | `` | | -| **** | 2.1 | `Setup Unity Project & Fusion Multiplayer` | `Phương` | 01/06/2026 | -| **** | 2.2 | `Develop Lobby System & Room Management` | `Phương` | 04/06/2026 | -| **** | 2.3 | `Develop Online Connection & Matchmaking` | `Phương` | 08/06/2026 | -| **** | 2.4 | `Develop Player Spawn & Synchronization` | `Duy,Phương` | 10/06/2026 | -| **** | 2.5 | `Develop Random Role Assignment (Seeker / Runner)` | `Duy` | 14/06/2026 | -| **** | 2.6 | `Develop Character Movement System` | `Tuấn` | 15/06/2026 | -| **** | 2.7 | `Develop Camera & Flashlight System` | `Tuấn` | 18/06/2026 | -| **** | 2.8 | `Develop Environment Interaction System` | `Tuấn` | 22/06/2026 | -| **** | Phase 3: Gameplay Features & Environment | `` | `` | | -| **** | 3.1 | `Develop Trap System` | `Duy` | 01/07/2026 | -| **** | 3.2 | `Develop Item System (Battery, Mini Map, Buffs)` | `Duy` | 05/07/2026 | -| **** | 3.3 | `Develop Gameplay Mechanics & Match Flow` | `Duy, Tuấn` | 10/07/2026 | -| **** | 3.4 | `Develop Maze Generation System` | `Duy` | 01/07/2026 | -| **** | 3.5 | `Design Environment Assets & Maze Details` | `Tuấn` | 10/07/2026 | -| **** | 3.6 | `Implement Horror Lighting & Fog Effects` | `Phương` | 18/07/2026 | -| **** | 3.7 | `Develop UI HUD & Ingame Interface` | `Phương` | 15/07/2026 | -| **** | 3.8 | `Develop Win/Lose Screen & Match Result UI` | `Phương` | 24/07/2026 | -| **** | Phase 4: Polish, Testing & Finalization | `` | `` | | -| **** | 4.1 | `Integrate Sound Effects & Background Music` | `Tuấn` | 01/08/2026 | -| **** | 4.2 | `Multiplayer Testing & Synchronization Check` | `Tuấn` | 04/08/2026 | -| **** | 4.3 | ![Bug](https://img.shields.io/badge/-FIXING-d73a49?style=flat-square) | `Duy,Phương` | 07/08/2026 | -| **** | 4.4 | `UI Polish & Optimization` | `Phương` | 09/08/2026 | -| **** | 4.5 | `Create Game Design Document (GDD)` | `Duy,Phương` | 09/08/2026 | -| **** | 4.6 | `Final Build, Demo & Presentation Preparation` | `TEAM` | 12/08/2026 | +| Phase | ID | Task | Assignee | Timeline | Progress | Status | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **Phase 1: Game Concept & Design** | `1.1` | Finalize Game Concept & Gameplay Direction | `TEAM` | 15/05/2026 - 18/05/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `1.3` | Design UI Style, Horror Theme & Moodboard | `Phương` | 18/05/2026 - 23/05/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `1.4` | Prototype Maze Layout & Environment Concept | `Phương` | 20/05/2026 - 26/05/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `1.5` | Plan Multiplayer Structure & Networking Logic | `Duy,Phương` | 24/05/2026 - 01/06/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| **Phase 2: Core Multiplayer & Player Systems** | `2.1` | Setup Unity Project & Fusion Multiplayer | `Phương` | 01/06/2026 - 06/06/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `2.2` | Develop Lobby System & Room Management | `Phương` | 04/06/2026 - 11/06/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `2.3` | Develop Online Connection & Matchmaking | `Phương` | 08/06/2026 - 15/06/2026 | `██████████ 100%` | ![Completed](https://img.shields.io/badge/-COMPLETED-2ea44f?style=flat-square) | +| | `2.4` | Develop Player Spawn & Synchronization | `Duy,Phương` | 10/06/2026 - 16/06/2026 | `█████░░░░░ 50%` | ![In Progress](https://img.shields.io/badge/-IN_PROGRESS-005cc5?style=flat-square) | +| | `2.5` | Develop Random Role Assignment (Seeker / Runner) | `Duy` | 14/06/2026 - 18/06/2026 | `░░░░░░░░░░ 5%` | ![In Progress](https://img.shields.io/badge/-IN_PROGRESS-005cc5?style=flat-square) | +| | `2.6` | Develop Character Movement System | `Tuấn` | 15/06/2026 - 21/06/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `2.7` | Develop Camera & Flashlight System | `Tuấn` | 18/06/2026 - 25/06/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `2.8` | Develop Environment Interaction System | `Tuấn` | 22/06/2026 - 01/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| **Phase 3: Gameplay Features & Environment** | `3.1` | Develop Trap System | `Duy` | 01/07/2026 - 09/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.2` | Develop Item System (Battery, Mini Map, Buffs) | `Duy` | 05/07/2026 - 13/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.3` | Develop Gameplay Mechanics & Match Flow | `Duy, Tuấn` | 10/07/2026 - 19/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.4` | Develop Maze Generation System | `Duy` | 01/07/2026 - 13/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.5` | Design Environment Assets & Maze Details | `Tuấn` | 10/07/2026 - 21/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.6` | Implement Horror Lighting & Fog Effects | `Phương` | 18/07/2026 - 26/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.7` | Develop UI HUD & Ingame Interface | `Phương` | 15/07/2026 - 25/07/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `3.8` | Develop Win/Lose Screen & Match Result UI | `Phương` | 24/07/2026 - 01/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| **Phase 4: Polish, Testing & Finalization** | `4.1` | Integrate Sound Effects & Background Music | `Tuấn` | 01/08/2026 - 06/08/2026 | `░░░░░░░░░░ 0%` | ![In Progress](https://img.shields.io/badge/-IN_PROGRESS-005cc5?style=flat-square) | +| | `4.2` | Multiplayer Testing & Synchronization Check | `Tuấn` | 04/08/2026 - 09/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `4.3` | Gameplay Balancing & Bug Fixing | `Duy,Phương` | 07/08/2026 - 12/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `4.4` | UI Polish & Optimization | `Phương` | 09/08/2026 - 13/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `4.5` | Create Game Design Document (GDD) | `Duy,Phương` | 09/08/2026 - 14/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | +| | `4.6` | Final Build, Demo & Presentation Preparation | `TEAM` | 12/08/2026 - 16/08/2026 | `░░░░░░░░░░ 0%` | ![Not Started](https://img.shields.io/badge/-NOT_STARTED-6a737d?style=flat-square) | -- [x] **Phase 1: Foundation** - - [x] Player State Machine (Idle, Move, Run, Jump). - - [x] Maze Generation (Multi-algorithm). - - [x] Photon Fusion Integration. -- [ ] **Phase 2: Gameplay Core** - - [ ] Role Selection (Seeker vs Trapper). - - [ ] Trap Placement System. - - [ ] Sound & Visual Detection (Noise Meter). + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

Phase 1: Architecture Foundation

+ + + + + + + + + + + +
Kinematic State Machine: Xử lý mượt mà chuỗi trạng thái nội suy (Idle, Move, Sprint, Airborne).
Procedural Generation Engine: Tích hợp thành công lõi sinh mê cung đa thuật toán (Multi-Algorithm).
Netcode Synchronization: Khởi tạo thành công mạng lưới Photon Fusion State Sync.
+
+ + +
+ +
+

Phase 2: Asymmetric Core Loop

+ + + + + + + + + + + +
Net-Role Arbitration: Hệ thống phân quyền và lựa chọn vai trò mạng (Seeker vs Trapper).
Spatial Trap Placement: Xây dựng logic kích hoạt và đặt bẫy dựa trên tọa độ không gian (Grid/Free-form).
Acoustic & Visual Matrix: Thuật toán phát hiện âm thanh (Noise Meter) và triệt tiêu tầm nhìn (Line-of-Sight Culling).
+
+ + +

Phase 3: Meta-Game & Polish

+ + + + + + + + +
Tiered Adaptive System (Hệ thống Comeback).
Advanced Audio HRTF Integration.
+
--- -## Đội ngũ Phát triển & Phân chia Nhiệm vụ (The Team & WBS) +## Bộ máy Kỹ thuật (Core Engineering Team & WBS) -Dự án được thực hiện bởi nhóm 3 thành viên với các vai trò chuyên biệt, đảm bảo tính chuyên môn hóa cao trong quy trình sản xuất Game. +> Dự án được phát triển và vận hành bởi một **Micro-Studio 3 thành viên**. Để đạt được chất lượng tiệm cận AAA-Indie trong một thời gian giới hạn, chúng tôi áp dụng mô hình chuyên môn hóa sâu (Deep Specialization) theo từng phân hệ kỹ thuật lõi. -| Thành viên | Vai trò | Trách nhiệm chi tiết (Work Breakdown Structure) | -| :--- | :--- | :--- | -| **Scove** | **Trưởng nhóm / World Architect** | - Nghiên cứu & triển khai thuật toán Maze (Prims, Wilsons, Crawler).
- Thiết kế hệ thống **Mesh Generation** (Tạo tường, sàn, trần tự động).
- Đảm bảo tính **Solvability** (Mê cung luôn có lối thoát khả thi).
- Xây dựng logic **Comeback Đa tầng** (Despair Mechanics).
- Review Code toàn cục & Quản lý kiến trúc State Machine. | -| **Duy** | **Phó nhóm / Lead Network Engineer** | - Quản lý hạ tầng **Photon Fusion** (Matchmaking, Session, Relay).
- Đồng bộ hóa trạng thái mạng (`Networked Properties`) cho bẫy, cửa, đèn.
- Xử lý logic phân vai (Role Assignment) & Điều phối Game State.
- Tối ưu hóa băng thông & Xử lý Reconciliation/Interpolation mạng. | -| **Tuấn** | **Mechanics Developer & Tech Artist** | - Hệ thống **Noise Meter** & Ánh sáng động (Flashlight/Battery System).
- Logic bẫy (Traps): Snare (kẹp), Alarm (báo động), Sound (giả thanh).
- Hệ thống **Camera Dynamics** (FOV Kick, Shake, Tilt, Motion Blur).
- Quản lý hiệu ứng hình ảnh (VFX) & Âm thanh không gian (3D Spatial Audio).
- Thiết kế HUD cho Seeker & Trapper; UI Menu & UX Flow. | + + +
SYSTEM READINESS
29.0%
7
DONE
3
ACTIVE
16
BACKLOG
Phase Breakdown
Phase 1: Game Concept & Design100% (4/4)
Phase 2: Core Multiplayer & Player Systems44% (3/8)
Phase 3: Gameplay Features & Environment0% (0/8)
Phase 4: Polish, Testing & Finalization0% (0/6)
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+

+ SCOVE
+
+ +
+

Phân rã Công việc (Work Breakdown Structure)

+
    +
  • Triển khai kiến trúc thuật toán Maze lõi (Prims, Wilsons, Crawler).
  • +
  • Xây dựng bộ máy Mesh Generation kiến tạo môi trường 3D tự động.
  • +
  • Giám sát tính Solvability (Đảm bảo Mê cung luôn có đường thoát khả thi).
  • +
  • Thiết kế toán học cho hệ thống Comeback Đa tầng (Despair Mechanics).
  • +
  • Code Review toàn cục & Quản lý vòng đời State Machine tổng.
  • +
+
+

+ DUY
+
+ +
+

Phân rã Công việc (Work Breakdown Structure)

+
    +
  • Xây dựng & Quản lý hạ tầng Photon Fusion (Matchmaking, Session Relay).
  • +
  • Cấu trúc hóa [Networked Properties] cho thực thể động (Bẫy, Cửa, Trạng thái đèn).
  • +
  • Thiết lập logic phân vai mạng (Role Assignment) và Server Game State.
  • +
  • Tối ưu hóa băng thông & Viết thuật toán bù trừ nội suy (Reconciliation/Lerp).
  • +
+
+

+ TUẤN
+
+ +
+

Phân rã Công việc (Work Breakdown Structure)

+
    +
  • Lập trình hệ thống Noise Meter & Quản lý quang năng (Flashlight/Battery).
  • +
  • Xây dựng Logic bẫy Trapper: Snare (Khống chế), Alarm (Báo động), Decoy (Giả thanh).
  • +
  • Phát triển Camera Dynamics (FOV Kick, Screen Shake, Tilt, Motion Blur).
  • +
  • Tích hợp 3D Spatial Audio & Hiệu ứng thị giác (VFX) tương tác môi trường.
  • +
  • Thiết kế trải nghiệm HUD & Luồng UI/UX (Menu, State transitions).
  • +
+
+ +
--- -## Tiêu chuẩn Kỹ thuật Nâng cao (Non-functional Requirements) +## Giao thức Chất lượng (Strict Engineering Protocols) -Mỗi thành viên phải tuân thủ nghiêm ngặt các tiêu chuẩn kỹ thuật sau để đảm bảo dự án đạt chất lượng AAA-Indie: +> Bộ tiêu chuẩn **NFR (Non-functional Requirements)** bắt buộc. Mọi dòng code được Commit (Merge Request) đều phải vượt qua bài kiểm tra chéo dựa trên 4 trụ cột kỹ thuật dưới đây. -### Networking & Synchronization (Duy) -* **RTT Optimization:** Duy trì Round Trip Time < 150ms; tối ưu hóa kích thước gói tin bằng `[Networked]` và `Reliable RPCs`. -* **State Authority:** Mọi logic Thắng/Thua và Trigger bẫy phải được xác thực hoàn toàn tại **Server** để ngăn chặn gian lận. -* **Interpolation Smoothing:** Đảm bảo di chuyển của đối thủ (Remote Proxies) mượt mà ngay cả khi mất gói tin (Packet Loss). +
-### World Generation & Performance (Scove) -* **Algorithmic Complexity:** Thuật toán tạo mê cung phải đạt hiệu năng O(N) hoặc O(N log N) để tránh treo Editor/Runtime. -* **Draw Call Batching:** Tối ưu hóa Mesh mê cung để đạt mức Draw Calls thấp nhất (Sử dụng Static Batching & GPU Instancing). -* **NavMesh Runtime:** Tự động bake NavMesh sau khi Maze tạo xong để hỗ trợ AI và các tính năng hỗ trợ Trapper. + + -### Gameplay & Physics (Tuấn) -* **Input Latency:** Xử lý Input thông qua `FixedUpdateNetwork` để đồng bộ hoàn hảo với Server Simulation. -* **Physics Matrix:** Tối ưu hóa Collision Matrix; sử dụng Collider đơn giản (Box/Capsule) cho các hành lang mê cung lắt léo. -* **State Integrity:** Mỗi State trong State Machine phải độc lập, không được can thiệp trực tiếp vào biến nội bộ của State khác. + + + + -### Visuals & UI/UX (Tuấn) -* **Rendering (Unity 6):** Tận dụng **URP (Universal Render Pipeline)** và Render Graph để tạo hiệu ứng bóng tối chất lượng cao. -* **Asset Compression:** Texture sử dụng chuẩn nén ASTC/DXT5; Mesh polycount tối ưu cho môi trường di động và PC tầm trung. -* **UX Consistency:** Tín hiệu phản hồi (VFX/SFX/Haptic) phải nhất quán để người chơi nhận biết ngay lập tức các sự kiện trong game. + + + + + + + + + + + + +
+

+ Net-Sync (Assigned to: Duy) +

+
+ » RTT Optimization: Duy trì Round Trip Time < 150ms. Tối ưu kích thước Payload mạng qua [Networked]Reliable RPCs.
+ » Absolute Server Auth: Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy bắt buộc phải được xác thực trên Server để chống Hack/Desync.
+ » Proxy Smoothing: Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss. +
+
+

+ World & Perf (Assigned to: Scove) +

+
+ » Algorithmic Constraints: Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp O(N) hoặc O(N log N) tránh chặn luồng Main Thread.
+ » Draw Call Budget: Mesh mê cung sau khi sinh ra phải gộp (Static Batching / GPU Instancing) để giữ số lượng Draw Calls ở mức vi mô.
+ » Dynamic NavMesh: Bake tự động NavMesh tại Runtime sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt. +
+
+

+ Mechanics (Assigned to: Tuấn) +

+
+ » Deterministic Input: Polling Input phải được dời vào hàm FixedUpdateNetwork để đồng bộ hoàn hảo với Tickrate của Server.
+ » Physics Matrix: Quy hoạch chặt chẽ Layer Collision Matrix. Khuyến khích dùng Box/Capsule Colliders cho môi trường lắt léo để giảm tải CPU.
+ » FSM Integrity: Mỗi State trong Kinematic FSM là một Sandbox độc lập, nghiêm cấm tiêm/thay đổi biến (Mutate) chéo giữa các trạng thái. +
+
+

+ Render & UX (Assigned to: Tuấn) +

+
+ » URP 6.0 Pipeline: Khai thác tối đa Render Graph của Unity 6 để tạo ra Light-baking & Shadow-mapping chân thực cao với chi phí thấp.
+ » Asset Compression: Chuẩn hóa mọi Texture về định dạng ASTC/DXT5. Polycount phải được kiểm duyệt khắt khe cho PC tầm trung.
+ » UX Consistency: Các phản hồi thị giác/thính giác (Máu me, Cảnh báo bẫy, Tiếng tim đập) phải đồng nhất về cường độ, tạo phản xạ có điều kiện cho User. +
+
--- -## 📂 Cấu trúc Thư mục Dự án (Project Folder Structure) +## Cấu trúc Thư mục (Workspace Architecture) -Dự án được tổ chức theo tiêu chuẩn công nghiệp (Standard Industry Practices), tách biệt rõ ràng giữa logic Code, Assets và Configuration. +> Cấu trúc không gian làm việc của **BABA_YAGA** tuân thủ nghiêm ngặt mô hình **Quy chuẩn Công nghiệp (Standard Industry Practices)**. Sự phân tách rạch ròi giữa Dữ liệu tĩnh (Assets), Lõi Logic (Core Scripts) và Cấu hình hệ thống (Configs) đảm bảo khả năng mở rộng (Scalability) và triệt tiêu Conflict khi làm việc nhóm. -```text -📦 BABA_YAGA -├── 🌸 Assets/ (Trái tim của trò chơi) -│ ├── 📜 Scripts/ (Phép thuật điều khiển logic) -│ │ ├── 🏷️ Attributes/ # Tùy biến Inspector -│ │ ├── 🎥 Camera Controller/ -│ │ ├── 🛠️ Debug/ -│ │ ├── 🌐 Fusion/ -│ │ │ └── 🚀 BasicSpawner.cs -│ │ ├── 🏗️ GameSetup/ -│ │ │ ├── 🌀 Maze/ # Mê cung -│ │ │ │ ├── 🐾 Crawler.cs -│ │ │ │ ├── 🌳 Prims.cs -│ │ │ │ ├── 🧵 Wilsons.cs -│ │ │ │ └── 🗺️ Maze.cs -│ │ │ └── 🧍 CharacterAutoSetup.cs -│ │ ├── 鼠标 Interactables/ -│ │ │ ├── 🚪 DoorInteractable.cs -│ │ │ ├── 💡 LampInteractable.cs -│ │ │ └── 💎 BaseInteractable.cs -│ │ ├── 📐 Interface/ -│ │ ├── 🏃‍♀️ Player Controller/ -│ │ │ ├── 🧠 PlayerStateMachine.cs -│ │ │ ├── ⌨️ InputReader.cs -│ │ │ └── 🎭 States/ -│ │ ├── ⚡ Optimization/ -│ │ ├── 🖥️ UI/ -│ │ └── 🎆 VFX/ -│ ├── 🧸 Prefabs/ -│ ├── 📖 document/ -│ ├── 🎬 Scenes/ -│ ├── 🎨 Materials/ -│ ├── 👸 Models/ -│ ├── 💃 Animation/ -│ ├── 🔌 Photon/ -│ ├── 🅰️ TextMesh Pro/ -│ └── ⚙️ Settings/ -├── 🛠️ ProjectSettings/ -│ ├── 🏷️ TagManager.asset -│ ├── 🌍 DynamicsManager.asset -│ └── 📡 MultiplayerManager.asset -├── 📦 Packages/ -└── 📝 README.md # Creator (。•̀ᴗ-)✧ +
+ +
+ + **BABA_YAGA_PROJECT/** + +     **Assets/** — Trái tim của trò chơi + +         **Scripts/** — Phép thuật điều khiển logic + +             **Attributes/** (Tùy biến Inspector) + +             **Camera Controller/** + +             **Debug/** + +             **Fusion/** + +                 `BasicSpawner.cs` + +             **GameSetup/** + +                 **Maze/** (Thuật toán Mê cung) + +                     `Maze.cs` + +                     `Crawler.cs` + +                     `Prims.cs` + +                     `Wilsons.cs` + +                 `CharacterAutoSetup.cs` + +             **Interactables/** + +                 `BaseInteractable.cs` + +                 `DoorInteractable.cs` + +                 `LampInteractable.cs` + +             **Interface/** + +             **Optimization/** + +             **Player Controller/** + +                 `PlayerStateMachine.cs` + +                 `InputReader.cs` + +                 **States/** + +             **UI/** + +             **VFX/** + +         **Prefabs/** + +         **document/** + +         **Scenes/** + +         **Materials/** + +         **Models/** + +         **Animation/** + +         **Photon/** + +         **TextMesh Pro/** + +         **Settings/** + +     **ProjectSettings/** + +         `TagManager.asset` + +         `DynamicsManager.asset` + +         `MultiplayerManager.asset` + +     **Packages/** + +     `README.md` — Creator (。•̀ᴗ-)✧ + +
+ +--- + +## Giao thức Triển khai (Deployment Protocol) + +> Hướng dẫn thiết lập môi trường phát triển và kết nối mạng lưới cho **BABA_YAGA**. Khuyến nghị sử dụng công cụ **ParrelSync** để tối ưu hóa quy trình kiểm thử Multiplayer (Mô phỏng Host/Client) ngay trên một Editor duy nhất. + +
+ + + + + + + + +
+

+ Engine Core
+ Unity 6000.3.10f1+ +
+

+ Architecture
+ Win 10/11 | macOS (M/Intel) +
+

+ Storage Budget
+ ~5.0 GB (Repo + Library) +
+ +
+ +### 1. Khởi tạo Không gian mạng (Repository Clone) + +```bash +# Clone mã nguồn dự án từ kho lưu trữ chính thức +git clone https://github.com/OnlyScove/BABA_YAGA.git + + Mở Unity Hub ➝ Chọn Add ➝ Add project from disk. + + Trỏ đường dẫn đến thư mục BABA_YAGA vừa clone. Lần chạy đầu tiên (Import Asset Pipeline & Library) có thể mất từ 3 - 5 phút. +``` +
+ 2. Khớp mã Máy chủ Photon (Fusion AppID Config) + + + + + +
+ + +

Trò chơi yêu cầu kết nối đến cụm máy chủ Relay của Photon để xử lý State Sync. Bạn bắt buộc phải cung cấp một AppID hợp lệ:

+
    +
  1. Truy cập và đăng nhập vào Photon Engine Dashboard.
  2. +
  3. Khởi tạo một Application mới (Loại App: Fusion) và sao chép mã App ID.
  4. +
  5. Trong Unity Editor, điều hướng tới: Tools ➝ Photon ➝ Fusion ➝ Network Project Settings.
  6. +
  7. Dán App ID vào trường App Id Fusion (Áp dụng cho cả Realtime & Fusion).
  8. +
  9. Đảm bảo Network Mode được thiết lập là Client/Server để bật tính năng State Authority.
  10. +
+
+
+ 3. Khởi chạy Trình mô phỏng (Launch Simulation) + + Mở Scene trung tâm tại: Assets/Scenes/Main Scene.unity. + + Nhấp vào Smart Bootstrapper (Nằm trên thanh Menu Top-bar của Unity) để tự động hóa quy trình tiêm (Inject) cấu hình Network Runner. + + Nhấn nút Play trong Editor. + + Để test thực tế: Khuyến nghị Build ra file .exe độc lập, hoặc sử dụng hệ thống ParrelSync Clone Editor để chạy 2 Instances song song. + +
+ Trung tâm Tín hiệu (Community & Support) +

+ +Stars + + +Forks + + +Follow + +

+

+ +Discord + + +Ko-fi + + +Buy Me A Coffee + +

+
+Network Visitors +

+ + + +

+ + +
+© 2026 SCOVANIA STUDIOS +
+"Baba_Yaga is more than a game, it's a social experiment." + +

+ +X/Twitter + +
``` - --- -## Hướng dẫn Cài đặt & Khởi chạy (Installation & Setup) - -Để trải nghiệm **BABA_YAGA** một cách mượt mà nhất, vui lòng thực hiện theo các bước chi tiết dưới đây: - -### 1. Yêu cầu Hệ thống -* **Unity Editor:** Phiên bản **6000.3.10f1 (Unity 6)** trở lên. -* **Hệ điều hành:** Windows 10/11 hoặc macOS (M1/M2/Intel). -* **Disk Space:** Tối thiểu 5GB trống để chứa Project và Library. - -### 2. Tải về & Mở dự án -1. **Clone Repository:** - ```bash - git clone https://github.com/OnlyScove/BABA_YAGA.git - ``` -2. Mở **Unity Hub**, chọn **Add** -> **Add project from disk**. -3. Tìm đến thư mục vừa clone và nhấn **Open**. Chờ Unity Hub tải các Packages cần thiết (có thể mất vài phút). - -### 3. Cấu hình Photon Fusion (Bắt buộc) -Trò chơi yêu cầu **AppID** hợp lệ để hoạt động qua mạng: -1. Đăng nhập vào [Photon Engine Dashboard](https://dashboard.photonengine.com/). -2. Tạo một ứng dụng mới với loại App là **Fusion**. -3. Sao chép **App ID** vừa tạo. -4. Trong Unity Editor, đi đến: `Photon` -> `Fusion` -> `Network Project Settings`. -5. Dán App ID vào mục **App Id Fusion** (cho cả Realtime và Fusion). -6. Đảm bảo **Network Mode** được đặt là `Client/Server` (để hỗ trợ State Authority). - -### 4. Khởi chạy Trò chơi -1. Mở Scene chính tại: `Assets/Scenes/Main Scene.unity`. -2. Sử dụng **Smart Bootstrapper** (nằm ở thanh Menu trên cùng) để tự động cấu hình Runner. -3. Nhấn nút **Play** trong Unity Editor. -4. Để test Multiplayer, bạn có thể build ra file `.exe` hoặc sử dụng công cụ **ParrelSync** (nếu đã cài) để chạy hai instance cùng lúc. - ---- - -## Support & Community - -

- - Stars - - - Forks - - - Follow - -

- -

- - Buy Me A Coffee - - - Discord - - - Ko-fi - -

- -

- Visitors -

- ---- - -**© 2026 SCOVANIA STUDIOS.** -*Baba_Yaga is more than a game, it's a social experiment.* - ---- - -**Connect with us:** -[![Twitter](https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white)](https://x.com/Scovy303) -