@adiholick/nvstudio-mcp 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,8 +6,22 @@ Sistem ini didesain menggunakan **Hybrid Architecture** yang memisahkan logika E
6
6
 
7
7
  ---
8
8
 
9
- ## 🌟 Fitur Unggulan v2.3
10
-
9
+ ## 🌟 Fitur Unggulan v2.4 (Animation, VFX & Rigging Suite)
10
+
11
+ - 🏗️ **NV-Rig Engine & Joint Kinematics (`inspect_rig`, `auto_rig`, `edit_rig_joint`, `weld_assembly`, `mirror_rig`)**:
12
+ - **Pure Headless Dispatcher**: Operasi rigging deterministik instan ($O(1)$) tanpa overhead render visual.
13
+ - **Hukum Non-Dislokasi Poros (*Non-Dislocation Law*)**: Menggeser/memutar titik engsel sendi di dunia nyata dengan kompensasi otomatis $C_1 = C_{1\text{old}} \times \text{diff}$ tanpa pernah mendislokasi part anak.
14
+ - **1-Click Auto-Rigging**: Membangun rig lengkap R6 (6 part), R15 (15 part), maupun penautan senjata (`WeaponGrip`) secara instan dengan auto-unanchor.
15
+ - **Bilateral X-Axis Mirroring & Assembly Welder**: Refleksi simetris sendi kiri $\leftrightarrow$ kanan dan pengelasan seluruh komponen armor/prop ke part jangkar utama.
16
+ - 🏃 **NV-Animation Engine & Kinematics (`animate_character`, `solve_limb_ik`, `scrub_timeline`)**:
17
+ - **Human-like Motion Synthesis**: Menghasilkan animasi karakter berkualitas tinggi (Walk, Slash, Punch, Idle Breath) berbasis prinsip animasi alami (Anticipation, Follow-Through).
18
+ - **Interpolasi Kurva Halus**: Menggunakan kurva Cubic Bezier (`PoseEasingStyle.Cubic`) dan Quaternion SLERP 4D rotation interpolation bebas *Gimbal Lock*.
19
+ - **Analytical 2-Link LimbIK O(1)**: Penyelesaian sudut tekukan siku dan lutut menggunakan Hukum Cosinus sudut tertutup instan dan ekstensi SoftIK anti-snapping.
20
+ - **Official KeyframeSequence**: Animasi disimpan langsung ke instance resmi di `AnimSaves` karakter, bukan script loop runtime.
21
+ - ✨ **NV-VFX Subsystem & Cross-Project Database (`scan_vfx`, `apply_vfx`, `list_vfx_database`, `delete_vfx`)**:
22
+ - **1:1 Pure Table Serializer**: Mengonversi `ParticleEmitter`, `Beam`, `Trail`, `Light`, dan `Attachment` menjadi tabel data murni JSON dengan relasi pointer yang aman.
23
+ - **Database Lintas-Proyek**: Pindai VFX di Project A dan pasang kembali di Project B dengan faktor skala ukuran opsional (`scale`). Dilengkapi 5 preset bawaan (*Cyan Slash*, *Solar Burst*, *Dragon Aura*, *Arcane Rune*, *Emerald Beam*).
24
+ - **Web Category Browser**: Tab antarmuka web modern dengan filter kategori, pencarian real-time, preview JSON, dan aksi 1-klik.
11
25
  - ⚡ **Batch Instance Builder (`batch_create_instances`, `batch_set_properties`)**:
12
26
  - Membangun hierarki objek/UI bersarang puluhan tingkat secara instan dalam 1 putaran request (mengeliminasi 10–20 latency roundtrips).
13
27
  - Pembaruan properti massal secara atomik dengan dukungan penuh tipe data Roblox (`UDim`, `UDim2`, `Vector2`, `Vector3`, `NumberRange`, `Rect`, dll).
@@ -53,7 +67,7 @@ curl -fsSL https://raw.githubusercontent.com/Adiholick/nvstudio-mcp/main/install
53
67
  **Apa saja yang dilakukan installer ini secara otomatis?**
54
68
  1. 📦 Mengunduh source code, memasang dependensi Node.js, dan mengkompilasi TypeScript (*Bridge Server*).
55
69
  2. 🧩 **Memasang Plugin Roblox Studio (`nvstudio_mcp.rbxmx`) otomatis** ke folder sistem Roblox Studio Anda (`%LOCALAPPDATA%\Roblox\Plugins` di Windows atau `~/Documents/ROBLOX/Plugins` di macOS).
56
- 3. 🧠 **Universal AI Skill Installer**: Menginjeksi skill pemandu (*nvstudio-mcp-guide*, *nvstudio-gui-standards*, *nvstudio-assets-terrain-guide*, *nvstudio-roblox-sync-guide*) dan aturan anti-halusinasi langsung ke struktur editor AI Anda (**Antigravity IDE**, **Cursor**, **Claude Code**, **Codex**, **OpenCode**, dan **Windsurf**).
70
+ 3. 🧠 **Universal AI Skill Installer**: Menginjeksi skill pemandu (*nvstudio-mcp-guide*, *nvstudio-gui-standards*, *nvstudio-animation-vfx*, *nvstudio-rig-engine*, *nvstudio-assets-terrain-guide*, *nvstudio-roblox-sync-guide*) dan aturan anti-halusinasi langsung ke struktur editor AI Anda (**Antigravity IDE**, **Cursor**, **Claude Code**, **Codex**, **OpenCode**, dan **Windsurf**).
57
71
  4. ⚙️ Melakukan auto-konfigurasi registrasi MCP server pada editor yang terdeteksi.
58
72
 
59
73
  ---
@@ -84,4 +84,35 @@ Saat merancang komponen interaktif khusus, patuhi pola NV-Series:
84
84
  - **Item Seleksi:** Gunakan `UIStroke` bernama `SelectStroke`: Active = `Color3.fromRGB(0, 255, 255)` (Cyan), Inactive = `Color3.fromRGB(60, 60, 65)`.
85
85
  - **Tombol Non-Aktif / Limit:** Set `AutoButtonColor = false` dan teks status (contoh: `"WAIT (Xs)"`, `"OUT OF QUOTA"`).
86
86
 
87
+ ## 8. NV-Animation Engine & Kinematics (Anti-Hallucination Ground Truth)
88
+ Saat diminta menganimasikan karakter di Roblox Studio, Anda WAJIB mematuhi ground truth berikut:
89
+ - **DILARANG MENGGUNAKAN LOOP RUNTIME**: Animasi karakter tidak boleh dibuat menggunakan script loop `while true do task.wait() ...`. Animasi wajib dibuat sebagai instance resmi `KeyframeSequence` di dalam `AnimSaves` rig (gunakan tool semantic `animate_character` atau `solve_limb_ik`).
90
+ - **SENSITIVITAS SPASI NAMA MOTOR6D**:
91
+ - Karakter R15: Menggunakan CamelCase TANPA SPASI (`LeftShoulder`, `LeftElbow`, `LeftWrist`, `LeftHip`, `LeftKnee`, `LeftAnkle`, `Waist`, `Neck`, `Root`).
92
+ - Karakter R6: WAJIB MENGGUNAKAN SPASI (`Left Shoulder`, `Right Shoulder`, `Left Hip`, `Right Hip`, `Neck`, `RootJoint`).
93
+ - **BATAS SUDUT ANATOMIS AMAN**:
94
+ - Siku (`LeftElbow`, `RightElbow`) dan Lutut (`LeftKnee`, `RightKnee`) adalah sendi engsel (hinge joint). Dilarang memutar sumbu Roll/Yaw. Sudut tekukan Pitch hanya $0^\circ \dots 145^\circ$ untuk siku dan $0^\circ \dots 135^\circ$ untuk lutut. Dilarang menekuk siku atau lutut ke arah berlawanan (dislokasi).
95
+ - Torso/Waist pitch dibatasi $-25^\circ \dots 35^\circ$, twist yaw $\pm 45^\circ$.
96
+ - **PRINSIP GERAKAN HALUS (Disney 12 Principles)**:
97
+ - Setiap gerakan wajib memiliki fase ancang-ancang (*Anticipation*), interpolasi pelambatan (*QuadInOut* atau *CubicInOut*), dan peredaman akhir (*Follow-Through*).
98
+
99
+ ## 9. NV-VFX Serializer & Cross-Project Database Protocols
100
+ Saat memindai, merekonstruksi, atau menerapkan efek visual antar-proyek:
101
+ - **ATTACHMENT HARUS VALID**: Properti `Attachment0` dan `Attachment1` pada `Beam` atau `Trail` HANYA BOLEH menunjuk ke instance bertipe `Attachment`. Dilarang keras menunjuk ke Part atau Model.
102
+ - **ATURAN URUTAN KEYPOINT**: Setiap `ColorSequence` dan `NumberSequence` WAJIB memiliki keypoint awal pada $t = 0.0$ dan keypoint akhir pada $t = 1.0$.
103
+ - **ALUR KERJA LINTAS-PROYEK**:
104
+ - Gunakan tool `scan_vfx` pada Project A untuk mengonversi partikel, beam, trail, dan light menjadi tabel data murni yang disimpan secara persisten di database MCP.
105
+ - Gunakan tool `apply_vfx` pada Project B untuk menginstansiasi efek dari database ke target objek dengan parameter `scale` opsional.
106
+ - Dokumentasi referensi lengkap: lihat `docs/NV_ANIMATION_AND_VFX_GUIDE.md`.
107
+
108
+ ## 10. NV-Rig Engine & Joint Kinematics Protocols (Anti-Hallucination Ground Truth)
109
+ Saat memeriksa, membuat, atau memodifikasi sendi karakter (`Motor6D` / `Weld`):
110
+ - **PERSAMAAN KESEIMBANGAN SAMBUNGAN**: Hubungan spasial sendi diatur oleh `Part0.CFrame * C0 = Part1.CFrame * C1`.
111
+ - **HUKUM NON-DISLOKASI PIVOT**: Saat menggeser atau memutar poros sendi, DILARANG hanya mengubah `C0` sepihak karena akan mendislokasi posisi fisik `Part1`. Nilai `C1` WAJIB dikompensasi secara simultan: `diff = C0_old:ToObjectSpace(C0_new); C1_new = C1_old * diff` (gunakan tool `edit_rig_joint`).
112
+ - **ATURAN WAJIB UNANCHOR**: Seluruh part anak (`Part1`) yang dihubungkan dengan `Motor6D` atau `Weld` WAJIB disetel `Anchored = false`. Part yang berstatus anchored tidak akan dapat bergerak dalam simulasi fisika atau animasi.
113
+ - **URUTAN KERJA RIGGING SEBELUM ANIMASI**: Dilarang memanggil `animate_character` pada model yang belum memiliki hierarki sendi valid. Selalu jalankan `inspect_rig` untuk diagnosa atau `auto_rig` untuk membuat kerangka standar.
114
+ - **PENGELASAN ASSEMBLY SENJATA/PROP**: Gunakan `weld_assembly` untuk menyatukan seluruh komponen prop/senjata secara kaku ke part pegangan sebelum ditautkan ke karakter.
115
+ - **DOKUMENTASI REFERENSI LENGKAP**: lihat `docs/NV_RIG_ENGINE_GUIDE.md`.
116
+
117
+
87
118
 
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: nvstudio-animation-vfx
3
+ description: Panduan AI Agent untuk membuat animasi karakter halus (Walk, Slash, Punch, Idle, Custom IK) menggunakan NV-Animation Engine dan mengelola efek visual lintas-proyek dengan NV-VFX Database di Roblox Studio.
4
+ ---
5
+
6
+ # NVStudio Animation Engine & VFX Subsystem Guide
7
+
8
+ Panduan resmi untuk AI Agent dalam memanfaatkan kemampuan pembuatan animasi karakter manusiawi (*Human-like Motion Synthesis*) dan sistem efek visual portabel lintas-proyek.
9
+
10
+ ---
11
+
12
+ ## 1. Pembuatan Animasi Karakter (`animate_character`)
13
+
14
+ Gunakan tool `animate_character` untuk menghasilkan animasi yang halus (*smooth*) dengan kurva interpolasi Bezier, pelambatan *easing*, dan *LimbIK* analitis tanpa perlu menghitung sudut CFrame secara manual.
15
+
16
+ ### Parameter Utama:
17
+ - `target`: Path ke Model karakter rig R6 atau R15 di Studio (contoh: `"Workspace.Dummy"`).
18
+ - `action`: Jenis gerakan yang ingin disintesis:
19
+ - `"walk_cycle"`: Siklus berjalan seimbang dengan pergeseran berat badan dan ayunan tangan berlawanan.
20
+ - `"melee_slash"`: Serangan tebasan pedang dengan ancang-ancang (*wind-up*), *acceleration snap*, dan *follow-through*.
21
+ - `"punch"`: Pukulan terarah dengan pemanfaatan LimbIK ke sasaran dan putaran bahu.
22
+ - `"idle_breath"`: Pernapasan lembut dengan ritme naik-turun dada dan sedikit kemiringan kepala.
23
+ - `"custom"`: Pose kunci kustom yang disediakan di parameter `key_poses`.
24
+ - `parameters` (opsional):
25
+ - `duration`: Durasi animasi dalam detik (contoh: `1.0`).
26
+ - `intensity`: Skala intensitas gerakan (contoh: `1.2`).
27
+ - `easing`: Jenis kurva interpolasi (`"QuadInOut"`, `"CubicInOut"`, `"BackOut"`, `"ElasticOut"`, dll).
28
+ - `loop`: Boolean apakah animasi berulang (default: `true` untuk walk/idle, `false` untuk serangan).
29
+ - `clipName`: Nama klip animasi di `AnimSaves`.
30
+
31
+ ### Contoh Pemanggilan Tool:
32
+ ```json
33
+ {
34
+ "target": "Workspace.Dummy",
35
+ "action": "melee_slash",
36
+ "parameters": {
37
+ "duration": 0.8,
38
+ "intensity": 1.2,
39
+ "easing": "CubicInOut",
40
+ "loop": false,
41
+ "clipName": "KatanaSlash"
42
+ }
43
+ }
44
+ ```
45
+
46
+ Hasilnya akan secara otomatis terkompilasi menjadi `KeyframeSequence` resmi di dalam folder `AnimSaves` karakter pada Studio.
47
+
48
+ ---
49
+
50
+ ## 2. Kalkulasi Kinematika Lengan / Kaki (`solve_limb_ik`)
51
+
52
+ Gunakan tool `solve_limb_ik` untuk mengarahkan telapak tangan atau kaki karakter ke target koordinat 3D secara instan menggunakan solver analitis sudut tertutup $O(1)$ (Hukum Cosinus).
53
+
54
+ ### Parameter:
55
+ - `target`: Path ke karakter rig (contoh: `"Workspace.Dummy"`).
56
+ - `limb`: Anggota tubuh (`"LeftArm"`, `"RightArm"`, `"LeftLeg"`, atau `"RightLeg"`).
57
+ - `goal`: Array posisi 3D `[X, Y, Z]` di world space.
58
+ - `pole`: Array arah tekukan siku/lutut `[X, Y, Z]` (opsional).
59
+ - `apply_to_rig`: Boolean apakah langsung diterapkan ke sendi karakter di Studio (default: `true`).
60
+
61
+ ---
62
+
63
+ ## 3. Scrubbing Timeline & Preview VFX (`scrub_timeline`)
64
+
65
+ Gunakan tool `scrub_timeline` untuk menggeser playhead waktu animasi dan memicu semburan (burst) partikel VFX pada timestamp tertentu langsung di Viewport Studio tanpa perlu memutar animasi secara penuh:
66
+
67
+ ### Parameter:
68
+ - `target`: Path model karakter rig atau folder VFX (contoh: `"Workspace.Dummy"`).
69
+ - `time`: Posisi timestamp waktu dalam detik (contoh: `0.35`).
70
+ - `action`: Aksi animasi yang di-scrub (`"melee_slash"`, `"walk_cycle"`, `"punch"`, `"idle_breath"`).
71
+ - `emit_vfx`: Boolean apakah memicu semburan partikel pada frame waktu ini (default: `true`).
72
+ - `emit_count`: Jumlah partikel yang disemburkan (default: `20`).
73
+
74
+ ---
75
+
76
+ ## 4. Modifikasi Properti Partikel & VFX (`set_properties` / `batch_set_properties`)
77
+
78
+ Gunakan `set_properties` untuk mengubah properti partikel VFX secara granular, termasuk `ColorSequence`, `NumberSequence`, `NumberRange`, dan `Rate`:
79
+ ```json
80
+ {
81
+ "target": "Workspace.FlameBurst.ParticleEmitter",
82
+ "properties": {
83
+ "Rate": 50,
84
+ "Speed": [15, 30],
85
+ "Size": [
86
+ [0, 1.5, 0],
87
+ [1, 0.2, 0]
88
+ ],
89
+ "Color": [
90
+ [0, [1, 0.8, 0.2]],
91
+ [1, [0.8, 0.1, 0]]
92
+ ]
93
+ }
94
+ }
95
+ ```
96
+
97
+ ---
98
+
99
+ ## 5. Pindai Efek Visual Lintas-Proyek (`scan_vfx`)
100
+
101
+ Gunakan tool `scan_vfx` pada Project A untuk mengekstrak seluruh hierarki partikel, beam, trail, dan light menjadi tabel data murni yang disimpan secara persisten di database MCP.
102
+
103
+ ### Parameter:
104
+ - `target`: Path objek di Studio (contoh: `"Workspace.FireSpell"`).
105
+ - `name`: Nama efek visual di database (contoh: `"FlameBurst_Ultimate"`).
106
+ - `category`: Kategori efek (`"Slash"`, `"Explosion"`, `"Aura"`, `"Projectile"`, `"Magic"`, `"Impact"`, `"Beam"`, atau `"Ambient"`).
107
+ - `tags`: Array kata kunci (contoh: `["fire", "orange", "anime"]`).
108
+
109
+ ---
110
+
111
+ ## 4. Terapkan Efek Visual di Proyek Lain (`apply_vfx`)
112
+
113
+ Buka proyek baru (Project B), lalu panggil `apply_vfx` untuk menginstansiasi efek visual yang tersimpan dengan fidelitas 100%.
114
+
115
+ ### Parameter:
116
+ - `vfx_id`: ID efek visual dari database (contoh: `"preset-cyan-slash"`).
117
+ - `target`: Path objek tujuan di Studio (contoh: `"Workspace.Boss.RightHand"`).
118
+ - `scale`: Skala ukuran efek (contoh: `1.5` untuk memperbesar 50%, `0.8` untuk mengecilkan 20%).
119
+ - `enabled`: Boolean opsional untuk menyalakan/mematikan seluruh emitter saat pertama dibuat.
120
+
@@ -67,3 +67,17 @@ Sebelum menulis skrip Luau atau menggunakan API/Service yang belum pasti nama pr
67
67
  ## Modifikasi Skrip Cerdas (`patch_script_source`)
68
68
  - Jika hanya ingin mengubah sebagian baris kode tanpa menimpa seluruh file skrip, gunakan `patch_script_source` dengan parameter `search` dan `replacement`.
69
69
  - Untuk penggantian skrip utuh, gunakan `update_script_source` (otomatis dicek oleh AST Validator di Node.js untuk mencegah syntax error fatal).
70
+
71
+ ## Rigging, Animasi Karakter & Efek Visual (v2.4+)
72
+ nvstudio-mcp dilengkapi dengan rangkaian modular tripartit:
73
+ 1. **NV-Rig Engine** (lihat skill `nvstudio-rig-engine`):
74
+ - Gunakan `inspect_rig` untuk diagnosa kesehatan sendi & anchor status.
75
+ - Gunakan `auto_rig` untuk membuat rig R6, R15, atau menautkan senjata (`Weapon`).
76
+ - Gunakan `edit_rig_joint` untuk memindahkan pivot tanpa dislokasi part anak.
77
+ - Gunakan `weld_assembly` untuk menyatukan armor/prop/kendaraan.
78
+ 2. **NV-Animation Engine** (lihat skill `nvstudio-animation-vfx`):
79
+ - Gunakan `animate_character` untuk membuat animasi resmi `KeyframeSequence` di `AnimSaves` (Walk, Slash, Punch, Idle).
80
+ - Gunakan `solve_limb_ik` untuk analytical 2-link LimbIK ke koordinat 3D.
81
+ - Gunakan `scrub_timeline` untuk scrubbing playhead waktu deterministik.
82
+ 3. **NV-VFX Subsystem** (lihat skill `nvstudio-animation-vfx`):
83
+ - Gunakan `scan_vfx` untuk memindai efek visual dan `apply_vfx` untuk merekonstruksinya dari database persisten.
@@ -0,0 +1,170 @@
1
+ ---
2
+ name: nvstudio-rig-engine
3
+ description: Panduan AI Agent untuk memeriksa, membuat, mengedit poros (C0/C1 tanpa dislokasi), auto-rigging R6/R15/senjata, dan mengelas assembly model di Roblox Studio menggunakan NV-Rig Engine.
4
+ ---
5
+
6
+ # NV-Rig Engine: Headless Modular Rigging Suite Guide
7
+
8
+ Panduan resmi untuk AI Agent dalam mengoperasikan sistem rigging Roblox secara headless menggunakan **NV-Rig Engine**. Modul ini melengkapi **NV-Animation Engine** dan **NV-VFX Subsystem** untuk menghasilkan alur kerja karakter yang lengkap dan anti-halusinasi.
9
+
10
+ ---
11
+
12
+ ## 1. Kapan Harus Menggunakan NV-Rig Engine
13
+
14
+ Gunakan tool-tool NV-Rig Engine saat:
15
+ - Karakter atau model impor belum memiliki `Motor6D` / sendi gerak.
16
+ - Titik tumpu (*pivot*) bahu, siku, lutut, atau sayap berada di posisi yang salah dan perlu digeser tanpa merusak susunan visual part.
17
+ - Bagian tubuh masih ter-anchor (`Anchored = true`) sehingga animasi tidak dapat menggerakkannya.
18
+ - Ingin menautkan senjata, perisai, atau pedang ke tangan karakter (`Weapon Grip`).
19
+ - Ingin mengelas (*weld*) seluruh komponen helm, armor, atau kendaraan menjadi satu kesatuan kaku.
20
+ - Ingin menyalin konfigurasi sendi sisi kiri ke sisi kanan secara simetris cermin (*X-axis mirror*).
21
+
22
+ ---
23
+
24
+ ## 2. Inspeksi Rig Mendalam (`inspect_rig`)
25
+
26
+ Selalu awali dengan memanggil `inspect_rig` sebelum melakukan rigging atau animasi untuk mendeteksi potensi masalah secara dini:
27
+
28
+ ```json
29
+ {
30
+ "target": "Workspace.CharacterModel"
31
+ }
32
+ ```
33
+
34
+ ### Yang Didiagnosis oleh `inspect_rig`:
35
+ 1. **Daftar Joint**: Semua `Motor6D` dan `Weld`, lengkap dengan nama `Part0`, `Part1`, $C_0$, $C_1$, dan koordinat poros dunia 3D.
36
+ 2. **Anchor Warning**: Mendeteksi part yang masih `Anchored = true`. Part anak yang ter-anchor tidak akan bergerak saat dianimasikan!
37
+ 3. **Circular Dependency**: Mendeteksi jika ada siklus sambungan tertutup yang dapat membekukan simulasi fisika Roblox.
38
+ 4. **Root Part**: Menemukan calon part induk utama (misal `HumanoidRootPart` atau `Torso`).
39
+
40
+ ---
41
+
42
+ ## 3. Auto-Rigging Cerdas 1-Klik (`auto_rig`)
43
+
44
+ Alih-alih membuat belasan sendi satu per satu, gunakan `auto_rig` untuk membangun pohon hierarki standar dalam sekejap:
45
+
46
+ ### A. Auto-Rig Avatar R15
47
+ Membangun 15 sambungan Motor6D lengkap (`Root`, `Waist`, `Neck`, bahu, siku, pergelangan tangan, panggul, lutut, pergelangan kaki):
48
+ ```json
49
+ {
50
+ "target": "Workspace.CustomR15Avatar",
51
+ "rig_type": "R15"
52
+ }
53
+ ```
54
+
55
+ ### B. Auto-Rig Avatar R6
56
+ Membangun 6 sambungan Motor6D klasik (`RootJoint`, `Neck`, `Left Shoulder`, `Right Shoulder`, `Left Hip`, `Right Hip`):
57
+ ```json
58
+ {
59
+ "target": "Workspace.CustomR6Avatar",
60
+ "rig_type": "R6"
61
+ }
62
+ ```
63
+
64
+ ### C. Auto-Rig Senjata / Tool
65
+ Menghubungkan senjata ke tangan karakter dengan `Motor6D` dinamai `WeaponGrip` dan mengelas seluruh bagian senjata lainnya ke `Handle`:
66
+ ```json
67
+ {
68
+ "target": "Workspace.Knight",
69
+ "rig_type": "Weapon",
70
+ "weapon_target": "Workspace.GreatSword",
71
+ "target_limb": "RightHand"
72
+ }
73
+ ```
74
+
75
+ ---
76
+
77
+ ## 4. Manipulasi Poros Sendi Presisi (`edit_rig_joint`)
78
+
79
+ Gunakan `edit_rig_joint` untuk menggeser, memutar, mereset, menyelaraskan, atau membuat sendi baru.
80
+
81
+ ### A. Geser Poros Sendi (Non-Dislocation Law)
82
+ Menggeser titik engsel sendi di dunia nyata tanpa membuat part anak terlempar:
83
+ ```json
84
+ {
85
+ "target": "Workspace.CharacterModel",
86
+ "action": "edit_pivot",
87
+ "joint_name": "RightShoulder",
88
+ "delta_world": [0, 0.5, 0]
89
+ }
90
+ ```
91
+
92
+ ### B. Pindahkan Poros ke Koordinat Dunia Tertentu
93
+ Menempatkan titik engsel tepat pada koordinat target 3D:
94
+ ```json
95
+ {
96
+ "target": "Workspace.CharacterModel",
97
+ "action": "edit_pivot",
98
+ "joint_name": "RightElbow",
99
+ "target_world": [10.5, 5.0, -12.3]
100
+ }
101
+ ```
102
+
103
+ ### C. Putar Orientasi Poros
104
+ Memutar orientasi sumbu lokal sendi sebesar sudut Euler derajat:
105
+ ```json
106
+ {
107
+ "target": "Workspace.CharacterModel",
108
+ "action": "rotate_pivot",
109
+ "joint_name": "Neck",
110
+ "rotate_euler_deg": [0, 90, 0]
111
+ }
112
+ ```
113
+
114
+ ### D. Reset Poros ke Pusat Part Anak
115
+ Mengembalikan $C_0$ langsung ke origin Part1 dan mengosongkan $C_1$:
116
+ ```json
117
+ {
118
+ "target": "Workspace.CharacterModel",
119
+ "action": "reset_pivot",
120
+ "joint_name": "LeftShoulder"
121
+ }
122
+ ```
123
+
124
+ ### E. Buat Sendi Baru Secara Spesifik
125
+ ```json
126
+ {
127
+ "target": "Workspace.CharacterModel",
128
+ "action": "create_joint",
129
+ "joint_name": "TailJoint1",
130
+ "part0": "LowerTorso",
131
+ "part1": "TailBase"
132
+ }
133
+ ```
134
+
135
+ ---
136
+
137
+ ## 5. Pengelasan Assembly Model (`weld_assembly`)
138
+
139
+ Gunakan `weld_assembly` untuk menyatukan seluruh komponen pada sebuah model (aksesori, sayap dekoratif, helm, armor, kendaraan) ke part jangkar utama:
140
+ ```json
141
+ {
142
+ "target": "Workspace.ArmorSet",
143
+ "primary_part": "Chestplate"
144
+ }
145
+ ```
146
+ *Catatan: Semua part anak otomatis di-unanchor dan dilas ke `Chestplate` menggunakan transformasi $C_0$ yang presisi.*
147
+
148
+ ---
149
+
150
+ ## 6. Pencerminan Simetri Bilateral (`mirror_rig`)
151
+
152
+ Jika Anda telah mengonfigurasi poros sendi sisi kiri (`LeftShoulder`, `LeftElbow`, dll.), gunakan `mirror_rig` untuk mencerminkan nilai $C_0$ dan $C_1$ ke sisi kanan secara simetris sepanjang sumbu $X$:
153
+ ```json
154
+ {
155
+ "target": "Workspace.CharacterModel",
156
+ "source_side": "Left"
157
+ }
158
+ ```
159
+
160
+ ---
161
+
162
+ ## 7. Alur Kerja Komprehensif: Rigging $\rightarrow$ Animasi $\rightarrow$ VFX
163
+
164
+ Ketika pengguna meminta animasi pertarungan lengkap:
165
+ 1. **Langkah 1**: Panggil `inspect_rig` pada karakter. Jika belum ada joint, jalankan `auto_rig` (mode `"R15"`).
166
+ 2. **Langkah 2**: Jika ada senjata, panggil `weld_assembly` pada senjata, lalu panggil `auto_rig` mode `"Weapon"`.
167
+ 3. **Langkah 3**: Buat animasi halus menggunakan `animate_character` (misal aksi `"melee_slash"` dengan `vfx_events`).
168
+ 4. **Langkah 4**: Pasang efek visual menggunakan `apply_vfx` dari database persisten.
169
+ 5. **Langkah 5**: Scrub timeline menggunakan `scrub_timeline` ke timestamp tebasan untuk memverifikasi pose dan partikel.
170
+