Files
BABA_YAGA/BABA_YAGA_Updater/sections/02_mechanics.md
2026-06-07 21:17:51 +07:00

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)

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)

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