From 18708e2d1933fb0c4763b70c115f2b34e34992d0 Mon Sep 17 00:00:00 2001 From: arch_agent Date: Tue, 21 Jul 2026 22:06:11 +0200 Subject: [PATCH] =?UTF-8?q?v2.0=20=E2=80=94=20Complete=20rewrite:=20Clone?= =?UTF-8?q?=20Satori=20+=20Nehan=20instead=20of=20building=20from=20scratc?= =?UTF-8?q?h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Key changes: - Katana: Items.Preset_Katana_Saburo_Legendary (Satori clone) → Retains all bleeding, hemorrhaging, hidden GameplayLogicPackages - Knife: Items.Preset_Tanto_Saburo_Retrofix (Nehan clone) → Retains thrown bleeding, hemorrhaging, health restoration - Only displayName/localizedDescription overridden - Localization in r6/loc/en-us/ and r6/loc/de-de/ (proper LocKey resolution) - Removed all custom statModifiers (they were ignored anyway) - Removed IconicWeaponModAbilityBase approach - Removed LocalizationOverride block - Clean file structure matching CDPR conventions Thanks to ChatGPT for the correct approach: - Stats via statModifiers were being ignored - HealOnKill/HealthRegen don't exist as BaseStats - Nehan heals via GameplayLogicPackage, not stats - ArmorPenetration is not the right stat name post-2.0 - Cloning existing Iconics preserves all hidden behavior --- README.md | 107 +++++++++++------- .../config/settings}/crystal_blades.json | 0 r6/loc/de-de/crystal_blades.json | 6 + r6/loc/en-us/crystal_blades.json | 6 + r6/tweaks/crystal_blades/crystal_blades.yaml | 107 +++--------------- 5 files changed, 88 insertions(+), 138 deletions(-) rename {localization => r6/config/settings}/crystal_blades.json (100%) create mode 100644 r6/loc/de-de/crystal_blades.json create mode 100644 r6/loc/en-us/crystal_blades.json diff --git a/README.md b/README.md index 23fc4eb..c456198 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,77 @@ -# Crystal Blades — README +# Crystal Blades — Kristallklingen -## Waffen +Two new Iconic weapons for Cyberpunk 2077, cloned from Satori and Nehan. -### Kristallschneider (Katana) -- **Konzept:** Katana mit monomolekularer Kristallklinge -- **Stats:** Hohes Damage, mittlere Angriffsgeschwindigkeit -- **Spezial:** Ignoriert 100% Rüstung, 100% Blutung bei jedem Treffer -- **Qualität:** Legendary +## Weapons -### Phantom Splitter (Wurfdolch) -- **Konzept:** Wurfdolch mit monomolekularer Kristallklinge -- **Stats:** Schnell, geringer Schaden aber hoher Crit -- **Spezial:** Ignoriert 100% Rüstung, 100% Blutung bei jedem Treffer -- **Qualität:** Legendary +### Kristallschneider (Crystal Cleaver) — Katana +- **Base:** Satori (Items.Preset_Katana_Saburo_Legendary) +- **Retains:** Bleeding on hit, all hidden GameplayLogicPackages +- **New:** Custom name and description + +### Phantom Splitter — Wurfdolch +- **Base:** Nehan (Items.Preset_Tanto_Saburo_Retrofix) +- **Retains:** Thrown hits apply Bleeding, hemorrhaging on already-bleeding targets, health restoration +- **New:** Custom name and description + +## Requirements +- TweakXL +- ArchiveXL (for LocKey resolution) +- RED4ext ## Installation -### Benötigt: -- ArchiveXL -- TweakXL -- Codeware -- red4ext -- redscript +Copy the following folders to your Cyberpunk 2077 game directory: -### Installation: -1. Kopiere den `r6/tweaks/crystal_blades/` Ordner nach `r6/tweaks/crystal_blades/` im Spielordner -2. Kopiere die `localization/crystal_blades.json` nach `r6/config/settings/` (oder ins localization Verzeichnis) -3. Starte das Spiel — TweakXL lädt die Waffen-Definitionen automatisch - -### Waffen erhalten: -Im Spiel die CET-Konsole öffnen und eingeben: ``` -Game.GetTarget():AddMod("Items.Preset_Crystal_Katana") -Game.GetTarget():AddMod("Items.Preset_Crystal_ThrowingKnife") +r6/tweaks/crystal_blades/crystal_blades.yaml → r6/tweaks/crystal_blades/ +r6/loc/en-us/crystal_blades.json → r6/loc/en-us/ +r6/loc/de-de/crystal_blades.json → r6/loc/de-de/ ``` -Oder über ArchiveXL/Virtual Atelier als Shop-Item hinzufügen. +## Spawn Commands (CET Console) -## Status +``` +Game.AddToInventory("Items.Preset_Crystal_Katana", 1) +Game.AddToInventory("Items.Preset_Crystal_Knife", 1) +``` -- [x] TweakXL Stats definiert -- [x] Lokalisierung (EN + DE) -- [x] Status Effects (Bleed + Armor Pierce) -- [ ] 3D Mesh (Blender → WolvenKit) -- [ ] Texturen (ComfyUI) -- [ ] Icon -- [ ] ArchiveXL Item-Definition (.xl) -- [ ] Virtual Atelier Shop-Eintrag +## File Structure -## Nächste Schritte +``` +cp2077-crystal-blades/ +├── r6/ +│ ├── tweaks/ +│ │ └── crystal_blades/ +│ │ └── crystal_blades.yaml ← Weapon definitions (clone Satori + Nehan) +│ └── loc/ +│ ├── en-us/ +│ │ └── crystal_blades.json ← English names/descriptions +│ └── de-de/ +│ └── crystal_blades.json ← German names/descriptions +├── archive/ +│ └── pc/ +│ └── mod/ ← (future: custom meshes/textures) +└── README.md +``` -1. **Blender:** Kristall-Katana Mesh erstellen (transparente Klinge, leuchtende Schneide) -2. **Blender:** Wurfdolch Mesh erstellen (kompakt, Kristallklinge) -3. **WolvenKit:** Meshes ins CP2077 .mesh Format konvertieren -4. **ComfyUI:** Texturen generieren (Kristall-Look, leuchtend) -5. **ArchiveXL:** .xl Datei für das Item-Appearance -6. **Testen:** Im Spiel prüfen ob Waffen funktionieren \ No newline at end of file +## How It Works + +Instead of building weapons from scratch, this mod **clones** Satori and Nehan: + +1. `$base: Items.Preset_Katana_Saburo_Legendary` copies the ENTIRE Satori record + - All hidden GameplayLogicPackages (bleeding, hemorrhaging) + - All statModifiers from the base weapon + - All scripts and effectors + +2. Only `displayName` and `localizedDescription` are overridden + +3. LocKeys are resolved via `r6/loc/` JSON files (not ArchiveXL) + +## TODO + +- [ ] Custom 3D mesh (Blender → WolvenKit) +- [ ] Custom textures (ComfyUI — crystal look) +- [ ] Custom inventory icons +- [ ] ArchiveXL appearance definition (.xl) +- [ ] Virtual Atelier store entry \ No newline at end of file diff --git a/localization/crystal_blades.json b/r6/config/settings/crystal_blades.json similarity index 100% rename from localization/crystal_blades.json rename to r6/config/settings/crystal_blades.json diff --git a/r6/loc/de-de/crystal_blades.json b/r6/loc/de-de/crystal_blades.json new file mode 100644 index 0000000..2c3fb89 --- /dev/null +++ b/r6/loc/de-de/crystal_blades.json @@ -0,0 +1,6 @@ +{ + "crystal_katana_name": "Kristallschneider", + "crystal_katana_desc": "Ein Katana mit monomolekularer Kristallklinge. Geschmiedet in den Tiefen des schwarzen Marktes von Night City. Jeder Treffer verursacht unkontrollierbare Blutung — Rüstung ist bedeutungslos.", + "crystal_knife_name": "Phantom Splitter", + "crystal_knife_desc": "Ein Wurfdolch mit monomolekularer Kristallklinge. Geworfene Treffer garantieren Blutung. Wenn das Ziel bereits blutet, verursacht der Dolch innere Blutungen und heilt den Träger." +} \ No newline at end of file diff --git a/r6/loc/en-us/crystal_blades.json b/r6/loc/en-us/crystal_blades.json new file mode 100644 index 0000000..f06d8ce --- /dev/null +++ b/r6/loc/en-us/crystal_blades.json @@ -0,0 +1,6 @@ +{ + "crystal_katana_name": "Crystal Cleaver", + "crystal_katana_desc": "A katana with a monomolecular crystal blade. Forged in the depths of Night City's black market. Every strike causes uncontrollable bleeding — armor is meaningless.", + "crystal_knife_name": "Phantom Splitter", + "crystal_knife_desc": "A throwing knife with a monomolecular crystal edge. Thrown hits guarantee bleeding. If the target is already bleeding, the knife causes hemorrhaging and heals the wielder." +} \ No newline at end of file diff --git a/r6/tweaks/crystal_blades/crystal_blades.yaml b/r6/tweaks/crystal_blades/crystal_blades.yaml index fc3920e..b275388 100644 --- a/r6/tweaks/crystal_blades/crystal_blades.yaml +++ b/r6/tweaks/crystal_blades/crystal_blades.yaml @@ -1,109 +1,28 @@ # Crystal Blades — Kristallklingen -# Direkte Waffen-Definition ohne Hidden Mod Umweg +# Klon von Satori (Katana) und Nehan (Wurfdolch) +# Behält alle versteckten GameplayLogicPackages, Scripte und Effekte +# Nur Name, Beschreibung und zusätzliche Stats werden überschrieben # ============================================================ -# WAFFE 1: Kristallschneider (Katana) +# WAFFE 1: Kristallschneider — Klon von Satori +# Satori = Items.Preset_Katana_Saburo_Legendary +# Behält: Bleeding, Hemorrhaging, alle Hidden Packages # ============================================================ Items.Preset_Crystal_Katana: - $base: Items.Preset_Katana_Default + $base: Items.Preset_Katana_Saburo_Legendary displayName: LocKey#crystal_katana_name localizedDescription: LocKey#crystal_katana_desc quality: Quality.Legendary - - # Direkte Stat-Überschreibungen auf der Waffe - statModifiers: - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.DPS - value: 200.0 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.AttackSpeed - value: 0.2 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.CritChance - value: 15.0 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.CritDamage - value: 30.0 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.BleedingApplicationRate - value: 1.0 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.ArmorPenetration - value: 1.0 - # Kopfschuss bleibt extrem tödlich — monomolekular durchtrennt alles - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.HeadshotDamageMultiplier - value: 4.0 - # Lifesteal — Leben zurück bei Kill (wie Nehan) - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.HealOnKill - value: 50.0 - # Heilung bei Treffer - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.HealthRegen - value: 10.0 # ============================================================ -# WAFFE 2: Phantom Splitter (Wurfdolch) +# WAFFE 2: Phantom Splitter — Klon von Nehan +# Nehan = Items.Preset_Tanto_Saburo_Retrofix +# Behält: Thrown hits apply Bleeding, Hemorrhaging, Healing # ============================================================ -Items.Preset_Crystal_ThrowingKnife: - $base: Items.Preset_Knife_Default +Items.Preset_Crystal_Knife: + $base: Items.Preset_Tanto_Saburo_Retrofix displayName: LocKey#crystal_knife_name localizedDescription: LocKey#crystal_knife_desc - quality: Quality.Legendary - - statModifiers: - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.DPS - value: 150.0 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.AttackSpeed - value: 0.5 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.CritChance - value: 25.0 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.CritDamage - value: 50.0 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.BleedingApplicationRate - value: 1.0 - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.ArmorPenetration - value: 1.0 - # Kopfschuss bleibt extrem tödlich - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.HeadshotDamageMultiplier - value: 4.0 - # Lifesteal — Leben zurück bei Kill (wie Nehan) - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.HealOnKill - value: 50.0 - # Heilung bei Treffer - - $type: gamedataConstantStatModifier_Record - modifierType: Additive - statType: BaseStats.HealthRegen - value: 10.0 - -# ============================================================ -# Localization — als JSON im localization Ordner -# ============================================================ \ No newline at end of file + quality: Quality.Legendary \ No newline at end of file