Files
BABA_YAGA/BABA_YAGA_Updater/sections/02_mechanics.md
2026-06-07 19:41:43 +07:00

165 lines
14 KiB
Markdown

## <img src="https://api.iconify.design/lucide/gamepad-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> 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.
<br>
### <img src="https://api.iconify.design/lucide/scale-3d.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> Hệ sinh thái Bất đối xứng (The Asymmetric Paradigm)
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: none;">
<!-- HEADER ROW -->
<tr>
<td width="50%" align="left" style="background: rgba(255,215,0,0.05); padding: 15px; border-radius: 8px 0 0 0; border-bottom: 2px solid rgba(255,215,0,0.3);">
<h3 style="margin: 0; color: #FFD700;">
<img src="https://api.iconify.design/lucide/footprints.svg?color=%23FFD700" width="24" style="vertical-align: middle;"> THE SEEKER
</h3>
<small style="color: #999;">Thực thể Động (Kinetic Survivor)</small>
</td>
<td width="50%" align="left" style="background: rgba(255,51,51,0.05); padding: 15px; border-radius: 0 8px 0 0; border-bottom: 2px solid rgba(255,51,51,0.3);">
<h3 style="margin: 0; color: #FF3333;">
<img src="https://api.iconify.design/lucide/cctv.svg?color=%23FF3333" width="24" style="vertical-align: middle;"> THE TRAPPER
</h3>
<small style="color: #999;">Kiến trúc sư Bóng tối (Environment Architect)</small>
</td>
</tr>
<!-- ROW 1: VAI TRÒ -->
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
<strong><img src="https://api.iconify.design/lucide/crosshair.svg?color=%23888888" width="16" style="vertical-align: middle;"> Vai trò (Role)</strong><br>
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.
</td>
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
<strong><img src="https://api.iconify.design/lucide/shield-ban.svg?color=%23888888" width="16" style="vertical-align: middle;"> Vai trò (Role)</strong><br>
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.
</td>
</tr>
<!-- ROW 2: TẦM NHÌN -->
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
<strong><img src="https://api.iconify.design/lucide/eye.svg?color=%23888888" width="16" style="vertical-align: middle;"> Tầm nhìn (Perception)</strong><br>
Góc nhìn thứ nhất <b>(Immersive FPS)</b>. 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.
</td>
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
<strong><img src="https://api.iconify.design/lucide/monitor.svg?color=%23888888" width="16" style="vertical-align: middle;"> Tầm nhìn (Perception)</strong><br>
Góc nhìn Thượng đế <b>(Top-down / Surveillance Cams)</b>. Quản lý bản đồ qua hệ thống Heatmap và Camera an ninh đa điểm.
</td>
</tr>
<!-- ROW 3: ĐỘNG LỰC HỌC -->
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
<strong><img src="https://api.iconify.design/lucide/wind.svg?color=%23888888" width="16" style="vertical-align: middle;"> Cơ động (Mobility)</strong><br>
Tốc độ bứt tốc cao <b>(Sprinting: 9.0m/s)</b>. Khả năng tương tác vật lý trực tiếp với môi trường (Vaulting, Sliding).
</td>
<td style="padding: 12px 15px; border-bottom: 1px solid rgba(255,255,255,0.05);">
<strong><img src="https://api.iconify.design/lucide/ghost.svg?color=%23888888" width="16" style="vertical-align: middle;"> Cơ động (Mobility)</strong><br>
Tốc độ vật lý thấp, nhưng bù đắp bằng khả năng <b>Dịch chuyển Tức thời (Teleportation)</b> qua các node mạng lưới bóng tối.
</td>
</tr>
<!-- ROW 4: CÔNG CỤ -->
<tr>
<td style="padding: 12px 15px; border-radius: 0 0 0 8px;">
<strong><img src="https://api.iconify.design/lucide/wrench.svg?color=%23888888" width="16" style="vertical-align: middle;"> Khí tài (Arsenal)</strong><br>
<img src="https://img.shields.io/badge/-Flashlight-black?style=flat&logo=dcent&logoColor=white"/>
<img src="https://img.shields.io/badge/-Dash_Mechanic-black?style=flat&logo=dash&logoColor=white"/>
<img src="https://img.shields.io/badge/-Parkour_Rig-black?style=flat&logo=framer&logoColor=white"/>
</td>
<td style="padding: 12px 15px; border-radius: 0 0 8px 0;">
<strong><img src="https://api.iconify.design/lucide/server-cog.svg?color=%23888888" width="16" style="vertical-align: middle;"> Khí tài (Arsenal)</strong><br>
<img src="https://img.shields.io/badge/-Bear_Traps-black?style=flat&logo=target&logoColor=red"/>
<img src="https://img.shields.io/badge/-Decoy_Audio-black?style=flat&logo=audacity&logoColor=red"/>
<img src="https://img.shields.io/badge/-Door_Override-black?style=flat&logo=lock&logoColor=red"/>
</td>
</tr>
</table>
<br>
### <img src="https://api.iconify.design/lucide/refresh-cw.svg?color=%23E0E0E0" width="22" height="22" style="vertical-align: middle;"> 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 (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 ["<b>1. KHỞI TẠO HỆ THỐNG (NET-SYNC)</b>"]
A["<img src='https://api.iconify.design/lucide/rocket.svg?color=%2333CCFF' width='20' height='20' style='vertical-align: middle;'> Bắt đầu Trận đấu"] --> B{"<img src='https://api.iconify.design/lucide/handshake.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Matchmaking<br/>(Photon Fusion)"}
B --> C["<img src='https://api.iconify.design/lucide/masks-theater.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Phân vai: Seeker vs Trapper"]
C --> D["<img src='https://api.iconify.design/lucide/puzzle.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Maze Generator<br/>(Prims/Wilsons)"]
D --> E["<img src='https://api.iconify.design/lucide/building-2.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Baking NavMesh & Colliders"]
E --> F["<img src='https://api.iconify.design/lucide/user.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Character Auto-Setup"]
F --> G["<img src='https://api.iconify.design/lucide/map-pin.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Spawn Players"]
end
class Initialization,A,B,C,D,E,F,G initStyle;
%% Phase 2: Core Loop
subgraph Active_Round ["<b>2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)</b>"]
G --> Loop((TICK: FixedUpdateNetwork))
%% Seeker Branch
subgraph Seeker_Logic ["<b><img src='https://api.iconify.design/lucide/run.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> SEEKER (POV 1st)</b>"]
S1["<img src='https://api.iconify.design/lucide/keyboard.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Input: WASD/Space"] --> S2["<img src='https://api.iconify.design/lucide/run.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> State: Move/Dash"]
S2 --> S3{"<img src='https://api.iconify.design/lucide/zap.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Hành động?"}
S3 -- "Sprinting" --> S4["<img src='https://api.iconify.design/lucide/volume-2.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Noise Up"]
S3 -- "Sneaking" --> S5["<img src='https://api.iconify.design/lucide/volume-x.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Noise Down"]
S3 -- "Flashlight" --> S6["<img src='https://api.iconify.design/lucide/flashlight.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Lộ vị trí"]
S4 & S5 & S6 --> S_Check{"<img src='https://api.iconify.design/lucide/search.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Check Env"}
S_Check -- "Dẫm bẫy" --> S_Trap["<img src='https://api.iconify.design/lucide/alert-triangle.svg?color=%23FF0000' width='20' height='20' style='vertical-align: middle;'> Bị khống chế"]
end
%% Trapper Branch
subgraph Trapper_Logic ["<b><img src='https://api.iconify.design/lucide/settings.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> TRAPPER (STRATEGY)</b>"]
T1["<img src='https://api.iconify.design/lucide/mouse.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Mouse Input"] --> T2["<img src='https://api.iconify.design/lucide/map.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> View: Heatmap/Cams"]
T2 --> T3{"<img src='https://api.iconify.design/lucide/wrench.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Kỹ năng?"}
T3 -- "Đặt bẫy" --> T4["<img src='https://api.iconify.design/lucide/binary.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Sync Trap"]
T3 -- "Scan" --> T5["<img src='https://api.iconify.design/lucide/rss.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Ping Seeker"]
T3 -- "Lock" --> T6["<img src='https://api.iconify.design/lucide/door-closed.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Khóa cửa"]
T4 & T5 & T6 --> T_Check{"<img src='https://api.iconify.design/lucide/eye.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Theo dõi"}
end
%% Networking Layer
subgraph Network_Sync ["<b><img src='https://api.iconify.design/lucide/globe.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> NETWORK SYNC LAYER</b>"]
Loop --> NS1["⏩ Client Prediction"]
NS1 --> NS2["<img src='https://api.iconify.design/lucide/refresh-cw.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Server Reconciliation"]
NS2 --> NS3["<img src='https://api.iconify.design/lucide/package.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> State Sync"]
end
end
class Seeker_Logic,S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
class Trapper_Logic,T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
class Network_Sync,NS1,NS2,NS3,Loop netStyle;
class S_Trap criticalStyle;
%% Phase 3: Results
subgraph Result_Logic ["<b>3. KẾT THÚC & THƯỞNG</b>"]
S_Check -- "Chạm Exit" --> Win_S["<img src='https://api.iconify.design/lucide/trophy.svg?color=%2300FF55' width='20' height='20' style='vertical-align: middle;'> SEEKER THẮNG"]
T_Check -- "Bắt được Seeker" --> Win_T["<img src='https://api.iconify.design/lucide/trophy.svg?color=%2300FF55' width='20' height='20' style='vertical-align: middle;'> TRAPPER THẮNG"]
Loop -- "Timer = 0" --> Win_T
Win_S & Win_T --> Post_Match["<img src='https://api.iconify.design/lucide/bar-chart-3.svg?color=%2333CCFF' width='20' height='20' style='vertical-align: middle;'> Thống kê Match"]
Post_Match --> Buff{"<img src='https://api.iconify.design/lucide/scale.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Hệ thống Adaptive"}
Buff -- "Thua liên tiếp" --> Buff_Apply["<img src='https://api.iconify.design/lucide/gem.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> 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 State| T_Check
S4 -.->|Phát xạ Sóng âm| T2
T4 -.->|Collision Vô hình| S_Check
NS3 --> Loop