This commit is contained in:
2026-06-07 21:17:51 +07:00
parent 54ddd924d9
commit e0a2aeaed8
19 changed files with 476 additions and 617 deletions

File diff suppressed because one or more lines are too long

View File

@@ -5,13 +5,22 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="d308d1cb-09fc-4331-ba20-00f7b43d1576" name="Changes" comment=""> <list default="true" id="d308d1cb-09fc-4331-ba20-00f7b43d1576" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.gemini-workspace-history/active-context.md" beforeDir="false" afterPath="$PROJECT_DIR$/.gemini-workspace-history/active-context.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.BABA_YAGA/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.BABA_YAGA/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/.idea.BABA_YAGA/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.BABA_YAGA/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/core/models.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/core/models.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/.gemini-workspace-history/active-context.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/.gemini-workspace-history/active-context.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/main.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/00_header.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/00_header.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/mappers/markdown_builder.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/mappers/markdown_builder.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/01_vision.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/01_vision.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/mappers/sheet_mapper.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/mappers/sheet_mapper.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/02_mechanics.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/02_mechanics.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/03_architecture.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/03_architecture.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/04_maze.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/04_maze.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/05_networking.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/05_networking.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/06_comeback.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/06_comeback.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/07_roadmap.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/07_roadmap.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/08_team_standards.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/08_team_standards.md" afterDir="false" /> <change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/08_team_standards.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/08_team_standards.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/services/readme_editor.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/services/readme_editor.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/09_structure.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/09_structure.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/10_footer.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/10_footer.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ProjectSettings/Packages/com.unity.probuilder/Settings.json" beforeDir="false" afterPath="$PROJECT_DIR$/ProjectSettings/Packages/com.unity.probuilder/Settings.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ProjectSettings/ShaderGraphSettings.asset" beforeDir="false" afterPath="$PROJECT_DIR$/ProjectSettings/ShaderGraphSettings.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" /> <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@@ -103,7 +112,7 @@
<option name="number" value="Default" /> <option name="number" value="Default" />
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1780826181670</updated> <updated>1780826181670</updated>
<workItem from="1780826183468" duration="11195000" /> <workItem from="1780826183468" duration="14344000" />
</task> </task>
<servers /> <servers />
</component> </component>

View File

@@ -0,0 +1,71 @@
using UnityEngine;
using UnityEditor;
using System.Diagnostics;
using System.IO;
public class ReadmeUpdater : EditorWindow
{
private const string PythonScriptPath = "BABA_YAGA_Updater/main.py";
private const string VenvPythonPath = "BABA_YAGA_Updater/.venv/Scripts/python.exe";
private const string UpdaterDir = "BABA_YAGA_Updater";
[MenuItem("BABA YAGA/Update README")]
public static void UpdateReadme()
{
string projectRoot = Directory.GetParent(Application.dataPath).FullName;
string fullVenvPath = Path.Combine(projectRoot, VenvPythonPath);
string fullScriptPath = Path.Combine(projectRoot, PythonScriptPath);
string workingDir = Path.Combine(projectRoot, UpdaterDir);
if (!File.Exists(fullVenvPath))
{
UnityEngine.Debug.LogError($"[README Updater] Python venv not found at: {fullVenvPath}. Please ensure the .venv is set up in BABA_YAGA_Updater.");
return;
}
UnityEngine.Debug.Log("[README Updater] Starting update process...");
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = fullVenvPath,
Arguments = $"\"{fullScriptPath}\"",
WorkingDirectory = workingDir,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
StandardOutputEncoding = System.Text.Encoding.UTF8,
StandardErrorEncoding = System.Text.Encoding.UTF8,
CreateNoWindow = true
};
// Force Python to use UTF-8 for IO to handle emojis
startInfo.EnvironmentVariables["PYTHONIOENCODING"] = "utf-8";
using (Process process = Process.Start(startInfo))
{
using (StreamReader reader = process.StandardOutput)
{
string result = reader.ReadToEnd();
if (!string.IsNullOrEmpty(result))
UnityEngine.Debug.Log($"[README Updater] Output:\n{result}");
}
using (StreamReader reader = process.StandardError)
{
string errors = reader.ReadToEnd();
if (!string.IsNullOrEmpty(errors))
UnityEngine.Debug.LogError($"[README Updater] Errors:\n{errors}");
}
process.WaitForExit();
if (process.ExitCode == 0)
{
UnityEngine.Debug.Log("🎉 [README Updater] README.md successfully updated!");
}
else
{
UnityEngine.Debug.LogError($"[README Updater] Process exited with code {process.ExitCode}");
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ae55b686282bc5248a82e3164817a074

File diff suppressed because one or more lines are too long

View File

@@ -41,7 +41,7 @@
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision) ## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
<div align="center"> <div align="center">
<img src="https://scove-vault.duckdns.org/files/share/vakALUeH" width="100%" style="border-radius: 10px; border: 1px solid #333;"> <img src="https://scove-vault.duckdns.org/files/api/public/dl/vakALUeH" width="100%" style="border-radius: 10px; border: 1px solid #333;">
</div> </div>
> **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. > **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.

View File

@@ -1,7 +1,9 @@
<div id="vision"></div>
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision) ## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
<div align="center"> <div align="center">
<img src="https://scove-vault.duckdns.org/files/share/vakALUeH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5);"> <img src="https://scove-vault.duckdns.org/files/api/public/dl/vakALUeH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5);">
<br> <br>
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px"> <img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px">
</div> </div>

View File

@@ -1,3 +1,5 @@
<div id="mechanics"></div>
## <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) ## <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. > 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.
@@ -86,80 +88,71 @@
```mermaid ```mermaid
graph TD 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 initStyle fill:#1a2b3c,stroke:#33CCFF,stroke-width:2px,color:#E0E0E0;
classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700; classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700;
classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333; classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333;
classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray: 5 5,color:#E0E0E0; classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray:5 5,color:#E0E0E0;
classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55; classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55;
classDef criticalStyle fill:#4d0000,stroke:#FF0000,stroke-width:2px,color:#FF0000; 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)"]
subgraph Initialization ["<b>1. KHỞI TẠO HỆ THỐNG (NET-SYNC)</b>"] A["🚀 Bắt đầu Trận đấu"] --> B{"🤝 Matchmaking\nPhoton Fusion"}
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["🎭 Phân vai: Seeker vs Trapper"]
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["🧩 Maze Generator\nPrims/Wilsons"]
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["🏛️ Baking NavMesh & Colliders"]
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["👤 Character Auto-Setup"]
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["📍 Spawn Players"]
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 end
class Initialization,A,B,C,D,E,F,G initStyle; class A,B,C,D,E,F,G initStyle;
%% Phase 2: Core Loop subgraph Active_Round ["2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)"]
subgraph Active_Round ["<b>2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)</b>"] G --> Loop(["⚙️ TICK: FixedUpdateNetwork"])
G --> Loop((TICK: FixedUpdateNetwork))
subgraph Seeker_Logic ["⚡ SEEKER - POV 1st Person"]
%% Seeker Branch S1["⌨️ Input: WASD/Space"] --> S2["🏃 State: Move/Dash"]
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>"] S2 --> S3{"❓ Hành động?"}
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"] S3 -- "Sprinting" --> S4["🔊 Noise Up"]
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 -- "Sneaking" --> S5["🔇 Noise Down"]
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 -- "Flashlight" --> S6["🔦 Lộ vị trí"]
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"] S4 & S5 & S6 --> S_Check{"🔍 Check Env"}
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í"] S_Check -- "Dẫm bẫy" --> S_Trap["⚠️ Bị khống chế"]
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 end
%% Trapper Branch subgraph Trapper_Logic ["🔧 TRAPPER - Strategy View"]
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["🖱️ Mouse Input"] --> T2["🗺️ View: Heatmap/Cams"]
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{"🔨 Kỹ năng?"}
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["💾 Sync Trap"]
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["📡 Ping Seeker"]
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["🚪 Khóa cửa"]
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{"👁️ Theo dõi"}
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 end
%% Networking Layer subgraph Network_Sync ["🌐 NETWORK SYNC 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"] 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"] NS1 --> NS2["🔄 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"] NS2 --> NS3["📦 State Sync"]
end end
end end
class Seeker_Logic,S1,S2,S3,S4,S5,S6,S_Check seekerStyle; class S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
class Trapper_Logic,T1,T2,T3,T4,T5,T6,T_Check trapperStyle; class T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
class Network_Sync,NS1,NS2,NS3,Loop netStyle; class NS1,NS2,NS3,Loop netStyle;
class S_Trap criticalStyle; class S_Trap criticalStyle;
%% Phase 3: Results subgraph Result_Logic ["3. KẾT THÚC & THƯỞNG"]
subgraph Result_Logic ["<b>3. KẾT THÚC & THƯỞNG</b>"] S_Check -- "Chạm Exit" --> Win_S["🏆 SEEKER THẮNG"]
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["🏆 TRAPPER 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 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"] Win_S & Win_T --> Post_Match["📊 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"} Post_Match --> Buff{"⚖️ 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 -- "Thua liên tiếp" --> Buff_Apply["💎 Kích hoạt Comeback Buff"]
Buff_Apply --> A Buff_Apply --> A
end end
class Win_S,Win_T winStyle; class Win_S,Win_T winStyle;
class Result_Logic,Post_Match,Buff,Buff_Apply initStyle; class Post_Match,Buff,Buff_Apply initStyle;
%% Interactions (Dashed Lines) S_Trap -.->|"Cảnh báo State"| T_Check
S_Trap -.->|Cảnh báo State| T_Check S4 -.->|"Phát xạ Sóng âm"| T2
S4 -.->|Phát xạ Sóng âm| T2 T4 -.->|"Collision Vô hình"| S_Check
T4 -.->|Collision Vô hình| S_Check NS3 --> Loop
NS3 --> Loop ```

View File

@@ -1,3 +1,5 @@
<div id="arch"></div>
## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture) ## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture)
> 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 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.
@@ -14,83 +16,81 @@ Hệ thống điều khiển nhân vật cốt lõi được xây dựng trên m
stateDiagram-v2 stateDiagram-v2
direction TB direction TB
state "<img src='https://api.iconify.design/lucide/footprints.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> KINEMATIC GROUND" as Ground { state "👣 KINEMATIC GROUND" as Ground {
[*] --> Idle [*] --> Idle
state Idle { state Idle {
I_P: <img src='https://api.iconify.design/lucide/anchor.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Vel < 0.1m/s I_P: Vel < 0.1m/s
I_C: <img src='https://api.iconify.design/lucide/activity.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Breathing Cam (0.5Hz) I_C: 📈 Breathing Cam (0.5Hz)
} }
Idle --> Moving : Input.mag > 0.1 Idle --> Moving : Input.mag > 0.1
state Moving { state Moving {
M_P: <img src='https://api.iconify.design/lucide/move.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Speed 2-4m/s M_P: 🚶 Speed 2-4m/s
M_C: <img src='https://api.iconify.design/lucide/video.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Head Bob (1.2Hz) M_C: 🎥 Head Bob (1.2Hz)
} }
Moving --> Sneaking : Hold [Sneak] Moving --> Sneaking : Hold [Sneak]
state Sneaking { state Sneaking {
Sn_P: <img src='https://api.iconify.design/lucide/volume-x.svg?color=%2300FF55' width='16' style='vertical-align: middle;'> Acoustic Profile -50% Sn_P: 🔇 Acoustic Profile -50%
Sn_C: <img src='https://api.iconify.design/lucide/arrow-down-to-line.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Collider Height Sn_C: ⬇️ Collider Height Down
} }
Moving --> Sprinting : Hold [Sprint] Moving --> Sprinting : Hold [Sprint]
Sneaking --> Moving : Release [Sneak] Sneaking --> Moving : Release [Sneak]
state Sprinting { state Sprinting {
Sp_P: <img src='https://api.iconify.design/lucide/zap.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Speed > 6.5m/s Sp_P: Speed > 6.5m/s
Sp_C: <img src='https://api.iconify.design/lucide/aperture.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Dynamic FOV Warp Sp_C: 🔵 Dynamic FOV Warp
} }
Sprinting --> Moving : Stamina Depleted Sprinting --> Moving : Stamina Depleted
} }
state "<img src='https://api.iconify.design/lucide/feather.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> AIRBORNE DYNAMICS" as Air { state "🪶 AIRBORNE DYNAMICS" as Air {
state Jump { state Jump {
J_P: <img src='https://api.iconify.design/lucide/arrow-up-circle.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> AddForce Up J_P: ⬆️ AddForce Up
} }
state Falling { state Falling {
F_P: <img src='https://api.iconify.design/lucide/trending-down.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Gravity x1.5 F_P: 📉 Gravity x1.5
} }
state Landing { state Landing {
L_P: <img src='https://api.iconify.design/lucide/ruler.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Impact Raycast L_P: 📐 Impact Raycast
} }
Jump --> Falling : Vel.y < 0 Jump --> Falling : Vel.y < 0
Falling --> Landing : KCC.IsGrounded == true Falling --> Landing : KCC.IsGrounded == true
} }
state "<img src='https://api.iconify.design/lucide/crosshair.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> UTILITY / ACTION" as Utility { state "🎯 UTILITY / ACTION" as Utility {
state Dashing { state Dashing {
D_P: <img src='https://api.iconify.design/lucide/wind.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Vector Burst (15m/s) D_P: 💨 Vector Burst (15m/s)
} }
state Interacting { state Interacting {
Int_P: <img src='https://api.iconify.design/lucide/lock.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Root Motion Lock Int_P: 🔒 Root Motion Lock
} }
} }
state "<img src='https://api.iconify.design/lucide/globe.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> NET-SYNC LAYER" as Net { state "🌐 NET-SYNC LAYER" as Net {
state "Input Authority (Client)" as IA state "Input Authority (Client)" as IA
state "State Authority (Server)" as SA state "State Authority (Server)" as SA
IA --> SA : Send Input Tick IA --> SA : Send Input Tick
SA --> IA : Force Reconcile SA --> IA : Force Reconcile
} }
%% Main Transitions
Ground --> Air : KCC.IsGrounded == false Ground --> Air : KCC.IsGrounded == false
Air --> Ground : OnLandEvent.Fire() Air --> Ground : OnLandEvent.Fire()
Ground --> Utility : InvokeAbility() Ground --> Utility : InvokeAbility()
Utility --> Ground : Action Complete Utility --> Ground : Action Complete
%% Sticky Notes for Technical Context
note left of Ground note left of Ground
<img src='https://api.iconify.design/lucide/database.svg?color=%23FFD700' width='14' style='vertical-align: middle;'> Sync: KCC Velocity 💾 Sync: KCC Velocity
<img src='https://api.iconify.design/lucide/layers.svg?color=%23E0E0E0' width='14' style='vertical-align: middle;'> State: Networked Enum 🗂️ State: Networked Enum
end note end note
note right of Net note right of Net
<img src='https://api.iconify.design/lucide/server-cog.svg?color=%2333CCFF' width='14' style='vertical-align: middle;'> Photon Fusion ⚙️ Photon Fusion
<img src='https://api.iconify.design/lucide/shield-check.svg?color=%2300FF55' width='14' style='vertical-align: middle;'> Anti-Cheat Validated 🛡️ Anti-Cheat Validated
end note end note
``` ```
<br> <br>
@@ -110,4 +110,3 @@ Sử dụng kết hợp <code>Physics.OverlapSphereNonAlloc</code> để tối
</td> </td>
</tr> </tr>
</table> </table>
```

View File

@@ -41,50 +41,46 @@
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
autonumber autonumber
%% Khai báo các thực thể
participant IR as <img src='https://api.iconify.design/lucide/mouse-pointer-2.svg?color=%23FFD700' width='20' style='vertical-align: middle;'> Input
participant CP as <img src='https://api.iconify.design/lucide/monitor.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Local Client
participant NT as <img src='https://api.iconify.design/lucide/router.svg?color=%23E0E0E0' width='20' style='vertical-align: middle;'> Fusion Net
participant S as <img src='https://api.iconify.design/lucide/server.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Server Auth
participant RP as <img src='https://api.iconify.design/lucide/ghost.svg?color=%23888888' width='20' style='vertical-align: middle;'> Proxies
%% --- GIAI ĐOẠN 1 --- box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
Note over IR, CP: [PHASE 1] Data Sampling (Thu thập) participant IR as "🖱️ Input"
IR->>CP: Hành động (Move / Ability / Interact) participant CP as "💻 Local Player"
CP->>CP: Đóng gói NetworkInputStruct end
%% --- GIAI ĐOẠN 2 --- box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
Note over CP: [PHASE 2] Client Prediction (Dự đoán) participant NT as "📡 Network Layer"
CP->>CP: Thực thi Physics & Kinematics tức thì (Tick N) participant S as "🖥️ Server Tick"
CP->>NT: Transmit Input Payload (Gửi lên mạng) end
%% --- GIAI ĐOẠN 3 --- box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
Note over NT, S: [PHASE 3] Server Validation (Xác thực) participant RP as "👥 Proxies"
NT->>S: UDP Reliable Packet Delivery end
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 IR,CP: [PHASE 1] DATA ACQUISITION
Note over NT, CP: [PHASE 4] Reconciliation (Điều chỉnh bù trừ) IR->>CP: OnMove / OnAbility (Raw Input)
NT-->>CP: Nhận State Snapshot Feed CP->>CP: 📦 Pack NetworkInputStruct
Note over CP: ERROR CORRECTION PROTOCOL
CP->>CP: Detect Desync -> Snap Transform -> Resimulate Ticks
%% --- GIAI ĐOẠN 5 --- Note over CP: [PHASE 2] FORWARD PREDICTION
Note over NT, RP: [PHASE 5] Proxy Update (Cập nhật thực thể bên thứ 3) CP->>CP: ⚡ Run Local Kinematics (Tick N)
NT-->>RP: Nhận State Snapshot Feed CP->>NT: 📤 Transmit Input Payload
Note over RP: NETWORK INTERPOLATION
RP->>RP: Lerp Position/Rotation (Bù nội suy mượt mà)
%% --- GIAI ĐOẠN 6 --- rect rgba(255, 51, 51, 0.1)
Note over CP, RP: [PHASE 6] Visual Render (Hiển thị) Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
CP->>CP: Trigger Camera Shake / Local VFX NT->>S: Deliver UDP Packet
RP->>RP: Cập nhật Animation Parameters & Mesh S->>S: 🛡️ Validate Rules & Apply Physics
S-->>NT: 📢 Broadcast State Snapshot (Tick N)
end
<div align="right"> Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
<img src="https://api.iconify.design/lucide/activity-square.svg?color=%23555555" width="14" style="vertical-align: middle;"> NT-->>CP: State Snapshot (Global Truth)
<small><i>Hệ thống được thiết lập chạy ở <b>60 Ticks/Second</b>, băng thông ước tính <b><10kb/s</b> mỗi Client.</i></small> CP->>CP: ⚖️ Check Desync (Threshold)
</div> CP->>CP: 🔄 Snap Pos & Resimulate if Error
Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
NT-->>RP: State Snapshot
RP->>RP: 〰️ Lerp Position / Rotation Smoothly
Note over CP,RP: [PHASE 6] VISUAL RENDERING
CP->>CP: 🎥 Update Local VFX / Camera Shake
RP->>RP: 👻 Update Animator & Mesh Transforms
``` ```

View File

@@ -1,3 +1,5 @@
<div id="networking"></div>
## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking) ## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking)
<div align="center"> <div align="center">
@@ -32,56 +34,49 @@
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
autonumber 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)" box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
participant IR as <img src='https://api.iconify.design/lucide/mouse-pointer-click.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Input participant IR as "🖱️ Input"
participant CP as <img src='https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Local Player participant CP as "💻 Local Player"
end end
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)" box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
participant NT as <img src='https://api.iconify.design/lucide/router.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Network Layer participant NT as "📡 Network Layer"
participant S as <img src='https://api.iconify.design/lucide/server.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Server Tick participant S as "🖥️ Server Tick"
end end
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS" box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
participant RP as <img src='https://api.iconify.design/lucide/users.svg?color=%23FFD700' width='20' style='vertical-align: middle;'> Proxies participant RP as "👥 Proxies"
end end
%% --- GIAI ĐOẠN 1 --- Note over IR,CP: [PHASE 1] DATA ACQUISITION
Note over IR, CP: [PHASE 1] DATA ACQUISITION
IR->>CP: OnMove / OnAbility (Raw Input) IR->>CP: OnMove / OnAbility (Raw Input)
CP->>CP: <img src='https://api.iconify.design/lucide/package-plus.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Pack NetworkInputStruct CP->>CP: 📦 Pack NetworkInputStruct
%% --- GIAI ĐOẠN 2 ---
Note over CP: [PHASE 2] FORWARD PREDICTION Note over CP: [PHASE 2] FORWARD PREDICTION
CP->>CP: <img src='https://api.iconify.design/lucide/zap.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Run Local Kinematics (Tick N) CP->>CP: Run Local Kinematics (Tick N)
CP->>NT: <img src='https://api.iconify.design/lucide/send.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Transmit Input Payload CP->>NT: 📤 Transmit Input Payload
%% --- GIAI ĐOẠN 3 ---
rect rgba(255, 51, 51, 0.1) rect rgba(255, 51, 51, 0.1)
Note over NT, S: [PHASE 3] SERVER VALIDATION (Simulation) Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
NT->>S: Deliver UDP Packet NT->>S: Deliver UDP Packet
S->>S: <img src='https://api.iconify.design/lucide/shield-alert.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Validate Rules & Apply Physics S->>S: 🛡️ Validate Rules & Apply Physics
S-->>NT: <img src='https://api.iconify.design/lucide/broadcast.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Broadcast State Snapshot (Tick N) S-->>NT: 📢 Broadcast State Snapshot (Tick N)
end end
%% --- GIAI ĐOẠN 4 --- Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
Note over NT, CP: [PHASE 4] RECONCILIATION PROTOCOL
NT-->>CP: State Snapshot (Global Truth) NT-->>CP: State Snapshot (Global Truth)
CP->>CP: <img src='https://api.iconify.design/lucide/scale.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Check Desync (Threshold) CP->>CP: ⚖️ Check Desync (Threshold)
CP->>CP: <img src='https://api.iconify.design/lucide/rotate-ccw.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Snap Pos & Resimulate if Error CP->>CP: 🔄 Snap Pos & Resimulate if Error
%% --- GIAI ĐOẠN 5 --- Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
Note over NT, RP: [PHASE 5] PROXY INTERPOLATION
NT-->>RP: State Snapshot NT-->>RP: State Snapshot
RP->>RP: <img src='https://api.iconify.design/lucide/spline.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Lerp Position / Rotation Smoothly RP->>RP: 〰️ Lerp Position / Rotation Smoothly
%% --- GIAI ĐOẠN 6 ---
Note over CP, RP: [PHASE 6] VISUAL RENDERING
CP->>CP: <img src='https://api.iconify.design/lucide/video.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Update Local VFX / Camera Shake
RP->>RP: <img src='https://api.iconify.design/lucide/ghost.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Update Animator & Mesh Transforms
Note over CP,RP: [PHASE 6] VISUAL RENDERING
CP->>CP: 🎥 Update Local VFX / Camera Shake
RP->>RP: 👻 Update Animator & Mesh Transforms
```
<br> <br>
<div align="center"> <div align="center">
<img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;"> <img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;">

View File

@@ -1,3 +1,5 @@
<div id="comeback"></div>
## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics) ## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics)
<div align="center"> <div align="center">

View File

@@ -1,3 +1,5 @@
<div id="roadmap"></div>
## <img src="https://api.iconify.design/lucide/milestone.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Lộ trình Triển khai (Development Roadmap) ## <img src="https://api.iconify.design/lucide/milestone.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> 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. > 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.

View File

@@ -84,61 +84,41 @@
<br> <br>
<!-- BẢNG GRID 2x2 CHO TIÊU CHUẨN KỸ THUẬT --> <table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;border:none;">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: none;"> <tr>
<td width="50%" style="padding:15px;background:rgba(51,204,255,0.02);border-right:2px solid #222;border-bottom:2px solid #222;">
<!-- HÀNG 1 --> <h3 style="margin:0 0 10px 0;color:#33CCFF;"><img src="https://api.iconify.design/lucide/network.svg?color=%2333CCFF" width="20" style="vertical-align:middle;"> Net-Sync <i>(Assigned to: Duy)</i></h3>
<tr> <div style="font-size:13px;color:#AAA;line-height:1.6;">
<!-- CỘT 1: NETWORKING --> <strong style="color:#E0E0E0;">» RTT Optimization:</strong> Duy trì Round Trip Time &lt; 150ms. Tối ưu kích thước Payload mạng qua <code>[Networked]</code> và <code>Reliable RPCs</code>.<br>
<td width="50%" style="padding: 15px; background: rgba(51,204,255,0.02); border-right: 2px solid #222; border-bottom: 2px solid #222;"> <strong style="color:#E0E0E0;">» Absolute Server Auth:</strong> Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy <b>bắt buộc</b> phải được xác thực trên Server để chống Hack/Desync.<br>
<h3 style="margin: 0 0 10px 0; color: #33CCFF;"> <strong style="color:#E0E0E0;">» Proxy Smoothing:</strong> Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss.
<img src="https://api.iconify.design/lucide/network.svg?color=%2333CCFF" width="20" style="vertical-align: middle;"> Net-Sync <i>(Assigned to: Duy)</i> </div>
</h3> </td>
<div style="font-size: 13px; color: #AAA; line-height: 1.6;"> <td width="50%" style="padding:15px;background:rgba(176,38,255,0.02);border-bottom:2px solid #222;">
<strong style="color: #E0E0E0;">» RTT Optimization:</strong> Duy trì Round Trip Time < 150ms. Tối ưu kích thước Payload mạng qua <code>[Networked]</code> và <code>Reliable RPCs</code>.<br> <h3 style="margin:0 0 10px 0;color:#B026FF;"><img src="https://api.iconify.design/lucide/layers.svg?color=%23B026FF" width="20" style="vertical-align:middle;"> World & Perf <i>(Assigned to: Scove)</i></h3>
<strong style="color: #E0E0E0;">» Absolute Server Auth:</strong> Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy <b>bắt buộc</b> phải được xác thực trên Server để chống Hack/Desync.<br> <div style="font-size:13px;color:#AAA;line-height:1.6;">
<strong style="color: #E0E0E0;">» Proxy Smoothing:</strong> Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss. <strong style="color:#E0E0E0;">» Algorithmic Constraints:</strong> Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp <code>O(N)</code> hoặc <code>O(N log N)</code> tránh chặn luồng Main Thread.<br>
</div> <strong style="color:#E0E0E0;">» Draw Call Budget:</strong> 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ô.<br>
</td> <strong style="color:#E0E0E0;">» Dynamic NavMesh:</strong> Bake tự động NavMesh <i>tại Runtime</i> sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt.
</div>
<!-- CỘT 2: WORLD GEN --> </td>
<td width="50%" style="padding: 15px; background: rgba(176,38,255,0.02); border-bottom: 2px solid #222;"> </tr>
<h3 style="margin: 0 0 10px 0; color: #B026FF;"> <tr>
<img src="https://api.iconify.design/lucide/layers.svg?color=%23B026FF" width="20" style="vertical-align: middle;"> World & Perf <i>(Assigned to: Scove)</i> <td width="50%" style="padding:15px;background:rgba(255,51,51,0.02);border-right:2px solid #222;">
</h3> <h3 style="margin:0 0 10px 0;color:#FF3333;"><img src="https://api.iconify.design/lucide/swords.svg?color=%23FF3333" width="20" style="vertical-align:middle;"> Mechanics <i>(Assigned to: Tuấn)</i></h3>
<div style="font-size: 13px; color: #AAA; line-height: 1.6;"> <div style="font-size:13px;color:#AAA;line-height:1.6;">
<strong style="color: #E0E0E0;">» Algorithmic Constraints:</strong> Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp <code>O(N)</code> hoặc <code>O(N log N)</code> tránh chặn luồng Main Thread.<br> <strong style="color:#E0E0E0;">» Deterministic Input:</strong> Polling Input phải được dời vào hàm <code>FixedUpdateNetwork</code> để đồng bộ hoàn hảo với Tickrate của Server.<br>
<strong style="color: #E0E0E0;">» Draw Call Budget:</strong> 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ô.<br> <strong style="color:#E0E0E0;">» Physics Matrix:</strong> 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.<br>
<strong style="color: #E0E0E0;">» Dynamic NavMesh:</strong> Bake tự động NavMesh <i>tại Runtime</i> sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt. <strong style="color:#E0E0E0;">» FSM Integrity:</strong> 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.
</div> </div>
</td> </td>
</tr> <td width="50%" style="padding:15px;background:rgba(255,215,0,0.02);">
<h3 style="margin:0 0 10px 0;color:#FFD700;"><img src="https://api.iconify.design/lucide/palette.svg?color=%23FFD700" width="20" style="vertical-align:middle;"> Render & UX <i>(Assigned to: Tuấn)</i></h3>
<!-- HÀNG 2 --> <div style="font-size:13px;color:#AAA;line-height:1.6;">
<tr> <strong style="color:#E0E0E0;">» URP 6.0 Pipeline:</strong> 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.<br>
<!-- CỘT 3: GAMEPLAY --> <strong style="color:#E0E0E0;">» Asset Compression:</strong> 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.<br>
<td width="50%" style="padding: 15px; background: rgba(255,51,51,0.02); border-right: 2px solid #222;"> <strong style="color:#E0E0E0;">» UX Consistency:</strong> 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.
<h3 style="margin: 0 0 10px 0; color: #FF3333;"> </div>
<img src="https://api.iconify.design/lucide/swords.svg?color=%23FF3333" width="20" style="vertical-align: middle;"> Mechanics <i>(Assigned to: Tuấn)</i> </td>
</h3> </tr>
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
<strong style="color: #E0E0E0;">» Deterministic Input:</strong> Polling Input phải được dời vào hàm <code>FixedUpdateNetwork</code> để đồng bộ hoàn hảo với Tickrate của Server.<br>
<strong style="color: #E0E0E0;">» Physics Matrix:</strong> 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.<br>
<strong style="color: #E0E0E0;">» FSM Integrity:</strong> 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.
</div>
</td>
<!-- CỘT 4: VISUALS -->
<td width="50%" style="padding: 15px; background: rgba(255,215,0,0.02);">
<h3 style="margin: 0 0 10px 0; color: #FFD700;">
<img src="https://api.iconify.design/lucide/palette.svg?color=%23FFD700" width="20" style="vertical-align: middle;"> Render & UX <i>(Assigned to: Tuấn)</i>
</h3>
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
<strong style="color: #E0E0E0;">» URP 6.0 Pipeline:</strong> 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.<br>
<strong style="color: #E0E0E0;">» Asset Compression:</strong> 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.<br>
<strong style="color: #E0E0E0;">» UX Consistency:</strong> 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.
</div>
</td>
</tr>
</table> </table>

View File

@@ -1,3 +1,5 @@
<div id="folders"></div>
## <img src="https://api.iconify.design/lucide/folder-tree.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cấu trúc Thư mục (Workspace Architecture) ## <img src="https://api.iconify.design/lucide/folder-tree.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cấu trúc Thư mục (Workspace Architecture)
> 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. > 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.

View File

@@ -1,3 +1,5 @@
<div id="install"></div>
## <img src="https://api.iconify.design/lucide/terminal-square.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Giao thức Triển khai (Deployment Protocol) ## <img src="https://api.iconify.design/lucide/terminal-square.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> 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. > 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.
@@ -63,7 +65,7 @@ git clone https://github.com/OnlyScove/BABA_YAGA.git
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ấ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 <img src="https://api.iconify.design/lucide/play.svg?color=%2300FF55" width="14" style="vertical-align: middle;"> trong Editor. Nhấn nút Play <img src="https://api.iconify.design/lucide/play.svg?color=%2300FF55" width="14" style="vertical-align: middle;"> 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. Để 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.
@@ -92,7 +94,7 @@ git clone https://github.com/OnlyScove/BABA_YAGA.git
</a> </a>
</p> </p>
<br> <br>
<img src="https://scove-vault.duckdns.org/files/share/hARx-n28" alt="Network Visitors" style="border-radius: 4px; opacity: 0.8;"> <img src="https://scove-vault.duckdns.org/files/api/public/dl/hARx-n28" alt="Network Visitors" style="border-radius: 4px; opacity: 0.8;">
<br><br> <br><br>
<!-- SEPARATOR LINE --> <!-- SEPARATOR LINE -->
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="80%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);"> <img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="80%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);">

400
README.md
View File

@@ -2,7 +2,7 @@
<!-- ANIMATED BANNER (Sử dụng SVG Pulse hoặc GIF) --> <!-- ANIMATED BANNER (Sử dụng SVG Pulse hoặc GIF) -->
<p align="center"> <p align="center">
<img src="https://capsule-render.vercel.app/render?type=koding&color=000000&customColorList=10&text=BABA_YAGA&fontSize=80&animation=fadeIn&fontAlignY=40&fontColor=FF0000" alt="Animated Header" /> <img src="https://scove-vault.duckdns.org/files/api/public/dl/S8eQwp-Y" alt="Animated Header" />
</p> </p>
### ⚡ THE ASYMMETRIC PSYCHOLOGICAL SURVIVAL ENGINE ### ⚡ THE ASYMMETRIC PSYCHOLOGICAL SURVIVAL ENGINE
@@ -41,7 +41,7 @@
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision) ## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
<div align="center"> <div align="center">
<img src="https://scove-vault.duckdns.org/files/share/vakALUeH" width="100%" style="border-radius: 10px; border: 1px solid #333;"> <img src="https://scove-vault.duckdns.org/files/api/public/dl/vakALUeH" width="100%" style="border-radius: 10px; border: 1px solid #333;">
</div> </div>
> **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. > **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.
@@ -108,10 +108,12 @@
--- ---
<div id="vision"></div>
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision) ## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
<div align="center"> <div align="center">
<img src="https://scove-vault.duckdns.org/files/share/vakALUeH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5);"> <img src="https://scove-vault.duckdns.org/files/api/public/dl/SCjSqhKH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5); alt="Animated Header";>
<br> <br>
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px"> <img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px">
</div> </div>
@@ -155,6 +157,8 @@
--- ---
<div id="mechanics"></div>
## <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) ## <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. > 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.
@@ -243,86 +247,79 @@
```mermaid ```mermaid
graph TD 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 initStyle fill:#1a2b3c,stroke:#33CCFF,stroke-width:2px,color:#E0E0E0;
classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700; classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700;
classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333; classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333;
classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray: 5 5,color:#E0E0E0; classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray:5 5,color:#E0E0E0;
classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55; classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55;
classDef criticalStyle fill:#4d0000,stroke:#FF0000,stroke-width:2px,color:#FF0000; 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)"]
subgraph Initialization ["<b>1. KHỞI TẠO HỆ THỐNG (NET-SYNC)</b>"] A["🚀 Bắt đầu Trận đấu"] --> B{"🤝 Matchmaking\nPhoton Fusion"}
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["🎭 Phân vai: Seeker vs Trapper"]
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["🧩 Maze Generator\nPrims/Wilsons"]
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["🏛️ Baking NavMesh & Colliders"]
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["👤 Character Auto-Setup"]
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["📍 Spawn Players"]
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 end
class Initialization,A,B,C,D,E,F,G initStyle; class A,B,C,D,E,F,G initStyle;
%% Phase 2: Core Loop subgraph Active_Round ["2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)"]
subgraph Active_Round ["<b>2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)</b>"] G --> Loop(["⚙️ TICK: FixedUpdateNetwork"])
G --> Loop((TICK: FixedUpdateNetwork))
subgraph Seeker_Logic ["⚡ SEEKER - POV 1st Person"]
%% Seeker Branch S1["⌨️ Input: WASD/Space"] --> S2["🏃 State: Move/Dash"]
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>"] S2 --> S3{"❓ Hành động?"}
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"] S3 -- "Sprinting" --> S4["🔊 Noise Up"]
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 -- "Sneaking" --> S5["🔇 Noise Down"]
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 -- "Flashlight" --> S6["🔦 Lộ vị trí"]
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"] S4 & S5 & S6 --> S_Check{"🔍 Check Env"}
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í"] S_Check -- "Dẫm bẫy" --> S_Trap["⚠️ Bị khống chế"]
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 end
%% Trapper Branch subgraph Trapper_Logic ["🔧 TRAPPER - Strategy View"]
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["🖱️ Mouse Input"] --> T2["🗺️ View: Heatmap/Cams"]
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{"🔨 Kỹ năng?"}
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["💾 Sync Trap"]
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["📡 Ping Seeker"]
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["🚪 Khóa cửa"]
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{"👁️ Theo dõi"}
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 end
%% Networking Layer subgraph Network_Sync ["🌐 NETWORK SYNC 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"] 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"] NS1 --> NS2["🔄 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"] NS2 --> NS3["📦 State Sync"]
end end
end end
class Seeker_Logic,S1,S2,S3,S4,S5,S6,S_Check seekerStyle; class S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
class Trapper_Logic,T1,T2,T3,T4,T5,T6,T_Check trapperStyle; class T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
class Network_Sync,NS1,NS2,NS3,Loop netStyle; class NS1,NS2,NS3,Loop netStyle;
class S_Trap criticalStyle; class S_Trap criticalStyle;
%% Phase 3: Results subgraph Result_Logic ["3. KẾT THÚC & THƯỞNG"]
subgraph Result_Logic ["<b>3. KẾT THÚC & THƯỞNG</b>"] S_Check -- "Chạm Exit" --> Win_S["🏆 SEEKER THẮNG"]
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["🏆 TRAPPER 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 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"] Win_S & Win_T --> Post_Match["📊 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"} Post_Match --> Buff{"⚖️ 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 -- "Thua liên tiếp" --> Buff_Apply["💎 Kích hoạt Comeback Buff"]
Buff_Apply --> A Buff_Apply --> A
end end
class Win_S,Win_T winStyle; class Win_S,Win_T winStyle;
class Result_Logic,Post_Match,Buff,Buff_Apply initStyle; class Post_Match,Buff,Buff_Apply initStyle;
%% Interactions (Dashed Lines) S_Trap -.->|"Cảnh báo State"| T_Check
S_Trap -.->|Cảnh báo State| T_Check S4 -.->|"Phát xạ Sóng âm"| T2
S4 -.->|Phát xạ Sóng âm| T2 T4 -.->|"Collision Vô hình"| S_Check
T4 -.->|Collision Vô hình| S_Check
NS3 --> Loop NS3 --> Loop
```
--- ---
<div id="arch"></div>
## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture) ## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture)
> 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 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.
@@ -339,83 +336,81 @@ Hệ thống điều khiển nhân vật cốt lõi được xây dựng trên m
stateDiagram-v2 stateDiagram-v2
direction TB direction TB
state "<img src='https://api.iconify.design/lucide/footprints.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> KINEMATIC GROUND" as Ground { state "👣 KINEMATIC GROUND" as Ground {
[*] --> Idle [*] --> Idle
state Idle { state Idle {
I_P: <img src='https://api.iconify.design/lucide/anchor.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Vel < 0.1m/s I_P: Vel < 0.1m/s
I_C: <img src='https://api.iconify.design/lucide/activity.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Breathing Cam (0.5Hz) I_C: 📈 Breathing Cam (0.5Hz)
} }
Idle --> Moving : Input.mag > 0.1 Idle --> Moving : Input.mag > 0.1
state Moving { state Moving {
M_P: <img src='https://api.iconify.design/lucide/move.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Speed 2-4m/s M_P: 🚶 Speed 2-4m/s
M_C: <img src='https://api.iconify.design/lucide/video.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Head Bob (1.2Hz) M_C: 🎥 Head Bob (1.2Hz)
} }
Moving --> Sneaking : Hold [Sneak] Moving --> Sneaking : Hold [Sneak]
state Sneaking { state Sneaking {
Sn_P: <img src='https://api.iconify.design/lucide/volume-x.svg?color=%2300FF55' width='16' style='vertical-align: middle;'> Acoustic Profile -50% Sn_P: 🔇 Acoustic Profile -50%
Sn_C: <img src='https://api.iconify.design/lucide/arrow-down-to-line.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Collider Height Sn_C: ⬇️ Collider Height Down
} }
Moving --> Sprinting : Hold [Sprint] Moving --> Sprinting : Hold [Sprint]
Sneaking --> Moving : Release [Sneak] Sneaking --> Moving : Release [Sneak]
state Sprinting { state Sprinting {
Sp_P: <img src='https://api.iconify.design/lucide/zap.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Speed > 6.5m/s Sp_P: Speed > 6.5m/s
Sp_C: <img src='https://api.iconify.design/lucide/aperture.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Dynamic FOV Warp Sp_C: 🔵 Dynamic FOV Warp
} }
Sprinting --> Moving : Stamina Depleted Sprinting --> Moving : Stamina Depleted
} }
state "<img src='https://api.iconify.design/lucide/feather.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> AIRBORNE DYNAMICS" as Air { state "🪶 AIRBORNE DYNAMICS" as Air {
state Jump { state Jump {
J_P: <img src='https://api.iconify.design/lucide/arrow-up-circle.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> AddForce Up J_P: ⬆️ AddForce Up
} }
state Falling { state Falling {
F_P: <img src='https://api.iconify.design/lucide/trending-down.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Gravity x1.5 F_P: 📉 Gravity x1.5
} }
state Landing { state Landing {
L_P: <img src='https://api.iconify.design/lucide/ruler.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Impact Raycast L_P: 📐 Impact Raycast
} }
Jump --> Falling : Vel.y < 0 Jump --> Falling : Vel.y < 0
Falling --> Landing : KCC.IsGrounded == true Falling --> Landing : KCC.IsGrounded == true
} }
state "<img src='https://api.iconify.design/lucide/crosshair.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> UTILITY / ACTION" as Utility { state "🎯 UTILITY / ACTION" as Utility {
state Dashing { state Dashing {
D_P: <img src='https://api.iconify.design/lucide/wind.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Vector Burst (15m/s) D_P: 💨 Vector Burst (15m/s)
} }
state Interacting { state Interacting {
Int_P: <img src='https://api.iconify.design/lucide/lock.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Root Motion Lock Int_P: 🔒 Root Motion Lock
} }
} }
state "<img src='https://api.iconify.design/lucide/globe.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> NET-SYNC LAYER" as Net { state "🌐 NET-SYNC LAYER" as Net {
state "Input Authority (Client)" as IA state "Input Authority (Client)" as IA
state "State Authority (Server)" as SA state "State Authority (Server)" as SA
IA --> SA : Send Input Tick IA --> SA : Send Input Tick
SA --> IA : Force Reconcile SA --> IA : Force Reconcile
} }
%% Main Transitions
Ground --> Air : KCC.IsGrounded == false Ground --> Air : KCC.IsGrounded == false
Air --> Ground : OnLandEvent.Fire() Air --> Ground : OnLandEvent.Fire()
Ground --> Utility : InvokeAbility() Ground --> Utility : InvokeAbility()
Utility --> Ground : Action Complete Utility --> Ground : Action Complete
%% Sticky Notes for Technical Context
note left of Ground note left of Ground
<img src='https://api.iconify.design/lucide/database.svg?color=%23FFD700' width='14' style='vertical-align: middle;'> Sync: KCC Velocity 💾 Sync: KCC Velocity
<img src='https://api.iconify.design/lucide/layers.svg?color=%23E0E0E0' width='14' style='vertical-align: middle;'> State: Networked Enum 🗂️ State: Networked Enum
end note end note
note right of Net note right of Net
<img src='https://api.iconify.design/lucide/server-cog.svg?color=%2333CCFF' width='14' style='vertical-align: middle;'> Photon Fusion ⚙️ Photon Fusion
<img src='https://api.iconify.design/lucide/shield-check.svg?color=%2300FF55' width='14' style='vertical-align: middle;'> Anti-Cheat Validated 🛡️ Anti-Cheat Validated
end note end note
``` ```
<br> <br>
@@ -435,7 +430,7 @@ Sử dụng kết hợp <code>Physics.OverlapSphereNonAlloc</code> để tối
</td> </td>
</tr> </tr>
</table> </table>
```
--- ---
@@ -482,56 +477,54 @@ Sử dụng kết hợp <code>Physics.OverlapSphereNonAlloc</code> để tối
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
autonumber autonumber
%% Khai báo các thực thể
participant IR as <img src='https://api.iconify.design/lucide/mouse-pointer-2.svg?color=%23FFD700' width='20' style='vertical-align: middle;'> Input
participant CP as <img src='https://api.iconify.design/lucide/monitor.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Local Client
participant NT as <img src='https://api.iconify.design/lucide/router.svg?color=%23E0E0E0' width='20' style='vertical-align: middle;'> Fusion Net
participant S as <img src='https://api.iconify.design/lucide/server.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Server Auth
participant RP as <img src='https://api.iconify.design/lucide/ghost.svg?color=%23888888' width='20' style='vertical-align: middle;'> Proxies
%% --- GIAI ĐOẠN 1 --- box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
Note over IR, CP: [PHASE 1] Data Sampling (Thu thập) participant IR as "🖱️ Input"
IR->>CP: Hành động (Move / Ability / Interact) participant CP as "💻 Local Player"
CP->>CP: Đóng gói NetworkInputStruct end
%% --- GIAI ĐOẠN 2 --- box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
Note over CP: [PHASE 2] Client Prediction (Dự đoán) participant NT as "📡 Network Layer"
CP->>CP: Thực thi Physics & Kinematics tức thì (Tick N) participant S as "🖥️ Server Tick"
CP->>NT: Transmit Input Payload (Gửi lên mạng) end
%% --- GIAI ĐOẠN 3 --- box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
Note over NT, S: [PHASE 3] Server Validation (Xác thực) participant RP as "👥 Proxies"
NT->>S: UDP Reliable Packet Delivery end
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 IR,CP: [PHASE 1] DATA ACQUISITION
Note over NT, CP: [PHASE 4] Reconciliation (Điều chỉnh bù trừ) IR->>CP: OnMove / OnAbility (Raw Input)
NT-->>CP: Nhận State Snapshot Feed CP->>CP: 📦 Pack NetworkInputStruct
Note over CP: ERROR CORRECTION PROTOCOL
CP->>CP: Detect Desync -> Snap Transform -> Resimulate Ticks
%% --- GIAI ĐOẠN 5 --- Note over CP: [PHASE 2] FORWARD PREDICTION
Note over NT, RP: [PHASE 5] Proxy Update (Cập nhật thực thể bên thứ 3) CP->>CP: ⚡ Run Local Kinematics (Tick N)
NT-->>RP: Nhận State Snapshot Feed CP->>NT: 📤 Transmit Input Payload
Note over RP: NETWORK INTERPOLATION
RP->>RP: Lerp Position/Rotation (Bù nội suy mượt mà)
%% --- GIAI ĐOẠN 6 --- rect rgba(255, 51, 51, 0.1)
Note over CP, RP: [PHASE 6] Visual Render (Hiển thị) Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
CP->>CP: Trigger Camera Shake / Local VFX NT->>S: Deliver UDP Packet
RP->>RP: Cập nhật Animation Parameters & Mesh S->>S: 🛡️ Validate Rules & Apply Physics
S-->>NT: 📢 Broadcast State Snapshot (Tick N)
end
<div align="right"> Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
<img src="https://api.iconify.design/lucide/activity-square.svg?color=%23555555" width="14" style="vertical-align: middle;"> NT-->>CP: State Snapshot (Global Truth)
<small><i>Hệ thống được thiết lập chạy ở <b>60 Ticks/Second</b>, băng thông ước tính <b><10kb/s</b> mỗi Client.</i></small> CP->>CP: ⚖️ Check Desync (Threshold)
</div> CP->>CP: 🔄 Snap Pos & Resimulate if Error
Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
NT-->>RP: State Snapshot
RP->>RP: 〰️ Lerp Position / Rotation Smoothly
Note over CP,RP: [PHASE 6] VISUAL RENDERING
CP->>CP: 🎥 Update Local VFX / Camera Shake
RP->>RP: 👻 Update Animator & Mesh Transforms
``` ```
--- ---
<div id="networking"></div>
## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking) ## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking)
<div align="center"> <div align="center">
@@ -566,56 +559,49 @@ sequenceDiagram
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
autonumber 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)" box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
participant IR as <img src='https://api.iconify.design/lucide/mouse-pointer-click.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Input participant IR as "🖱️ Input"
participant CP as <img src='https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Local Player participant CP as "💻 Local Player"
end end
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)" box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
participant NT as <img src='https://api.iconify.design/lucide/router.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Network Layer participant NT as "📡 Network Layer"
participant S as <img src='https://api.iconify.design/lucide/server.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Server Tick participant S as "🖥️ Server Tick"
end end
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS" box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
participant RP as <img src='https://api.iconify.design/lucide/users.svg?color=%23FFD700' width='20' style='vertical-align: middle;'> Proxies participant RP as "👥 Proxies"
end end
%% --- GIAI ĐOẠN 1 --- Note over IR,CP: [PHASE 1] DATA ACQUISITION
Note over IR, CP: [PHASE 1] DATA ACQUISITION
IR->>CP: OnMove / OnAbility (Raw Input) IR->>CP: OnMove / OnAbility (Raw Input)
CP->>CP: <img src='https://api.iconify.design/lucide/package-plus.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Pack NetworkInputStruct CP->>CP: 📦 Pack NetworkInputStruct
%% --- GIAI ĐOẠN 2 ---
Note over CP: [PHASE 2] FORWARD PREDICTION Note over CP: [PHASE 2] FORWARD PREDICTION
CP->>CP: <img src='https://api.iconify.design/lucide/zap.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Run Local Kinematics (Tick N) CP->>CP: Run Local Kinematics (Tick N)
CP->>NT: <img src='https://api.iconify.design/lucide/send.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Transmit Input Payload CP->>NT: 📤 Transmit Input Payload
%% --- GIAI ĐOẠN 3 ---
rect rgba(255, 51, 51, 0.1) rect rgba(255, 51, 51, 0.1)
Note over NT, S: [PHASE 3] SERVER VALIDATION (Simulation) Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
NT->>S: Deliver UDP Packet NT->>S: Deliver UDP Packet
S->>S: <img src='https://api.iconify.design/lucide/shield-alert.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Validate Rules & Apply Physics S->>S: 🛡️ Validate Rules & Apply Physics
S-->>NT: <img src='https://api.iconify.design/lucide/broadcast.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Broadcast State Snapshot (Tick N) S-->>NT: 📢 Broadcast State Snapshot (Tick N)
end end
%% --- GIAI ĐOẠN 4 --- Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
Note over NT, CP: [PHASE 4] RECONCILIATION PROTOCOL
NT-->>CP: State Snapshot (Global Truth) NT-->>CP: State Snapshot (Global Truth)
CP->>CP: <img src='https://api.iconify.design/lucide/scale.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Check Desync (Threshold) CP->>CP: ⚖️ Check Desync (Threshold)
CP->>CP: <img src='https://api.iconify.design/lucide/rotate-ccw.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Snap Pos & Resimulate if Error CP->>CP: 🔄 Snap Pos & Resimulate if Error
%% --- GIAI ĐOẠN 5 --- Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
Note over NT, RP: [PHASE 5] PROXY INTERPOLATION
NT-->>RP: State Snapshot NT-->>RP: State Snapshot
RP->>RP: <img src='https://api.iconify.design/lucide/spline.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Lerp Position / Rotation Smoothly RP->>RP: 〰️ Lerp Position / Rotation Smoothly
%% --- GIAI ĐOẠN 6 ---
Note over CP, RP: [PHASE 6] VISUAL RENDERING
CP->>CP: <img src='https://api.iconify.design/lucide/video.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Update Local VFX / Camera Shake
RP->>RP: <img src='https://api.iconify.design/lucide/ghost.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Update Animator & Mesh Transforms
Note over CP,RP: [PHASE 6] VISUAL RENDERING
CP->>CP: 🎥 Update Local VFX / Camera Shake
RP->>RP: 👻 Update Animator & Mesh Transforms
```
<br> <br>
<div align="center"> <div align="center">
<img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;"> <img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;">
@@ -625,6 +611,8 @@ sequenceDiagram
--- ---
<div id="comeback"></div>
## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics) ## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics)
<div align="center"> <div align="center">
@@ -756,6 +744,8 @@ Khi Trapper để mất quyền kiểm soát, Mê cung sẽ tự động phân r
--- ---
<div id="roadmap"></div>
## <img src="https://api.iconify.design/lucide/milestone.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Lộ trình Triển khai (Development Roadmap) ## <img src="https://api.iconify.design/lucide/milestone.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> 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. > 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.
@@ -954,67 +944,49 @@ Khi Trapper để mất quyền kiểm soát, Mê cung sẽ tự động phân r
<br> <br>
<!-- BẢNG GRID 2x2 CHO TIÊU CHUẨN KỸ THUẬT --> <table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;border:none;">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: none;"> <tr>
<td width="50%" style="padding:15px;background:rgba(51,204,255,0.02);border-right:2px solid #222;border-bottom:2px solid #222;">
<!-- HÀNG 1 --> <h3 style="margin:0 0 10px 0;color:#33CCFF;"><img src="https://api.iconify.design/lucide/network.svg?color=%2333CCFF" width="20" style="vertical-align:middle;"> Net-Sync <i>(Assigned to: Duy)</i></h3>
<tr> <div style="font-size:13px;color:#AAA;line-height:1.6;">
<!-- CỘT 1: NETWORKING --> <strong style="color:#E0E0E0;">» RTT Optimization:</strong> Duy trì Round Trip Time &lt; 150ms. Tối ưu kích thước Payload mạng qua <code>[Networked]</code> và <code>Reliable RPCs</code>.<br>
<td width="50%" style="padding: 15px; background: rgba(51,204,255,0.02); border-right: 2px solid #222; border-bottom: 2px solid #222;"> <strong style="color:#E0E0E0;">» Absolute Server Auth:</strong> Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy <b>bắt buộc</b> phải được xác thực trên Server để chống Hack/Desync.<br>
<h3 style="margin: 0 0 10px 0; color: #33CCFF;"> <strong style="color:#E0E0E0;">» Proxy Smoothing:</strong> Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss.
<img src="https://api.iconify.design/lucide/network.svg?color=%2333CCFF" width="20" style="vertical-align: middle;"> Net-Sync <i>(Assigned to: Duy)</i> </div>
</h3> </td>
<div style="font-size: 13px; color: #AAA; line-height: 1.6;"> <td width="50%" style="padding:15px;background:rgba(176,38,255,0.02);border-bottom:2px solid #222;">
<strong style="color: #E0E0E0;">» RTT Optimization:</strong> Duy trì Round Trip Time < 150ms. Tối ưu kích thước Payload mạng qua <code>[Networked]</code> và <code>Reliable RPCs</code>.<br> <h3 style="margin:0 0 10px 0;color:#B026FF;"><img src="https://api.iconify.design/lucide/layers.svg?color=%23B026FF" width="20" style="vertical-align:middle;"> World & Perf <i>(Assigned to: Scove)</i></h3>
<strong style="color: #E0E0E0;">» Absolute Server Auth:</strong> Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy <b>bắt buộc</b> phải được xác thực trên Server để chống Hack/Desync.<br> <div style="font-size:13px;color:#AAA;line-height:1.6;">
<strong style="color: #E0E0E0;">» Proxy Smoothing:</strong> Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss. <strong style="color:#E0E0E0;">» Algorithmic Constraints:</strong> Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp <code>O(N)</code> hoặc <code>O(N log N)</code> tránh chặn luồng Main Thread.<br>
</div> <strong style="color:#E0E0E0;">» Draw Call Budget:</strong> 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ô.<br>
</td> <strong style="color:#E0E0E0;">» Dynamic NavMesh:</strong> Bake tự động NavMesh <i>tại Runtime</i> sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt.
</div>
<!-- CỘT 2: WORLD GEN --> </td>
<td width="50%" style="padding: 15px; background: rgba(176,38,255,0.02); border-bottom: 2px solid #222;"> </tr>
<h3 style="margin: 0 0 10px 0; color: #B026FF;"> <tr>
<img src="https://api.iconify.design/lucide/layers.svg?color=%23B026FF" width="20" style="vertical-align: middle;"> World & Perf <i>(Assigned to: Scove)</i> <td width="50%" style="padding:15px;background:rgba(255,51,51,0.02);border-right:2px solid #222;">
</h3> <h3 style="margin:0 0 10px 0;color:#FF3333;"><img src="https://api.iconify.design/lucide/swords.svg?color=%23FF3333" width="20" style="vertical-align:middle;"> Mechanics <i>(Assigned to: Tuấn)</i></h3>
<div style="font-size: 13px; color: #AAA; line-height: 1.6;"> <div style="font-size:13px;color:#AAA;line-height:1.6;">
<strong style="color: #E0E0E0;">» Algorithmic Constraints:</strong> Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp <code>O(N)</code> hoặc <code>O(N log N)</code> tránh chặn luồng Main Thread.<br> <strong style="color:#E0E0E0;">» Deterministic Input:</strong> Polling Input phải được dời vào hàm <code>FixedUpdateNetwork</code> để đồng bộ hoàn hảo với Tickrate của Server.<br>
<strong style="color: #E0E0E0;">» Draw Call Budget:</strong> 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ô.<br> <strong style="color:#E0E0E0;">» Physics Matrix:</strong> 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.<br>
<strong style="color: #E0E0E0;">» Dynamic NavMesh:</strong> Bake tự động NavMesh <i>tại Runtime</i> sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt. <strong style="color:#E0E0E0;">» FSM Integrity:</strong> 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.
</div> </div>
</td> </td>
</tr> <td width="50%" style="padding:15px;background:rgba(255,215,0,0.02);">
<h3 style="margin:0 0 10px 0;color:#FFD700;"><img src="https://api.iconify.design/lucide/palette.svg?color=%23FFD700" width="20" style="vertical-align:middle;"> Render & UX <i>(Assigned to: Tuấn)</i></h3>
<!-- HÀNG 2 --> <div style="font-size:13px;color:#AAA;line-height:1.6;">
<tr> <strong style="color:#E0E0E0;">» URP 6.0 Pipeline:</strong> 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.<br>
<!-- CỘT 3: GAMEPLAY --> <strong style="color:#E0E0E0;">» Asset Compression:</strong> 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.<br>
<td width="50%" style="padding: 15px; background: rgba(255,51,51,0.02); border-right: 2px solid #222;"> <strong style="color:#E0E0E0;">» UX Consistency:</strong> 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.
<h3 style="margin: 0 0 10px 0; color: #FF3333;"> </div>
<img src="https://api.iconify.design/lucide/swords.svg?color=%23FF3333" width="20" style="vertical-align: middle;"> Mechanics <i>(Assigned to: Tuấn)</i> </td>
</h3> </tr>
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
<strong style="color: #E0E0E0;">» Deterministic Input:</strong> Polling Input phải được dời vào hàm <code>FixedUpdateNetwork</code> để đồng bộ hoàn hảo với Tickrate của Server.<br>
<strong style="color: #E0E0E0;">» Physics Matrix:</strong> 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.<br>
<strong style="color: #E0E0E0;">» FSM Integrity:</strong> 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.
</div>
</td>
<!-- CỘT 4: VISUALS -->
<td width="50%" style="padding: 15px; background: rgba(255,215,0,0.02);">
<h3 style="margin: 0 0 10px 0; color: #FFD700;">
<img src="https://api.iconify.design/lucide/palette.svg?color=%23FFD700" width="20" style="vertical-align: middle;"> Render & UX <i>(Assigned to: Tuấn)</i>
</h3>
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
<strong style="color: #E0E0E0;">» URP 6.0 Pipeline:</strong> 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.<br>
<strong style="color: #E0E0E0;">» Asset Compression:</strong> 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.<br>
<strong style="color: #E0E0E0;">» UX Consistency:</strong> 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.
</div>
</td>
</tr>
</table> </table>
--- ---
<div id="folders"></div>
## <img src="https://api.iconify.design/lucide/folder-tree.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cấu trúc Thư mục (Workspace Architecture) ## <img src="https://api.iconify.design/lucide/folder-tree.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cấu trúc Thư mục (Workspace Architecture)
> 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. > 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.
@@ -1111,6 +1083,8 @@ Khi Trapper để mất quyền kiểm soát, Mê cung sẽ tự động phân r
--- ---
<div id="install"></div>
## <img src="https://api.iconify.design/lucide/terminal-square.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Giao thức Triển khai (Deployment Protocol) ## <img src="https://api.iconify.design/lucide/terminal-square.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> 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. > 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.
@@ -1176,7 +1150,7 @@ git clone https://github.com/OnlyScove/BABA_YAGA.git
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ấ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 <img src="https://api.iconify.design/lucide/play.svg?color=%2300FF55" width="14" style="vertical-align: middle;"> trong Editor. Nhấn nút Play <img src="https://api.iconify.design/lucide/play.svg?color=%2300FF55" width="14" style="vertical-align: middle;"> 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. Để 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.
@@ -1205,7 +1179,7 @@ git clone https://github.com/OnlyScove/BABA_YAGA.git
</a> </a>
</p> </p>
<br> <br>
<img src="https://scove-vault.duckdns.org/files/share/hARx-n28" alt="Network Visitors" style="border-radius: 4px; opacity: 0.8;"> <img src="https://scove-vault.duckdns.org/files/api/public/dl/hARx-n28" alt="Network Visitors" style="border-radius: 4px; opacity: 0.8;">
<br><br> <br><br>
<!-- SEPARATOR LINE --> <!-- SEPARATOR LINE -->
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="80%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);"> <img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="80%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);">