9.3 KiB
9.3 KiB
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)
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)
graph TD
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;
subgraph Initialization ["1. KHỞI TẠO HỆ THỐNG (NET-SYNC)"]
A["🚀 Bắt đầu Trận đấu"] --> B{"🤝 Matchmaking\nPhoton Fusion"}
B --> C["🎭 Phân vai: Seeker vs Trapper"]
C --> D["🧩 Maze Generator\nPrims/Wilsons"]
D --> E["🏛️ Baking NavMesh & Colliders"]
E --> F["👤 Character Auto-Setup"]
F --> G["📍 Spawn Players"]
end
class A,B,C,D,E,F,G initStyle;
subgraph Active_Round ["2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)"]
G --> Loop(["⚙️ TICK: FixedUpdateNetwork"])
subgraph Seeker_Logic ["⚡ SEEKER - POV 1st Person"]
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ế"]
end
subgraph Trapper_Logic ["🔧 TRAPPER - Strategy View"]
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"}
end
subgraph Network_Sync ["🌐 NETWORK SYNC LAYER"]
Loop --> NS1["⏩ Client Prediction"]
NS1 --> NS2["🔄 Server Reconciliation"]
NS2 --> NS3["📦 State Sync"]
end
end
class S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
class T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
class NS1,NS2,NS3,Loop netStyle;
class S_Trap criticalStyle;
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"]
Loop -- "Timer = 0" --> Win_T
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 Post_Match,Buff,Buff_Apply initStyle;
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