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